Page 1 sur 1

Création de gadget

Publié : lun. 20/févr./2006 2:08
par Dorian
Bonjour

Es-ce que quelqu'u pourrait m'expliquer comment créer un gadget ainsi que ce qui va avec svp ? (un truc simple du style bouton ou editbox)

Merci d'avance

Re: Création de gadget

Publié : lun. 20/févr./2006 15:05
par brossden
Il y a des exemples dans PureBasic et ici même les tutoriels sont trés bien fait donc ....
Mais pour te faire plaisir un petit programme d'exemple :

Code : Tout sélectionner


Enumeration
  #Fenetre
  #Bouton
  #Chaine
EndEnumeration

Procedure OuvreFenetre()
  If OpenWindow(#Fenetre, 470, 102, 387, 194,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Titre de la fenêtre")
    If CreateGadgetList(WindowID())
;--------------------------------------------------------------------

      ButtonGadget(#Bouton, 150, 80, 80, 30, "Bouton")

;--------------------------------------------------------------------
      StringGadget(#Chaine, 40, 40, 300, 20, "Chaine de caractères")
    EndIf
  EndIf
EndProcedure

Global Compteur
OuvreFenetre()

Repeat
  Evenement = WaitWindowEvent()
  GadgetNum = EventGadgetID() 
 
  If Evenement = #PB_EventGadget
    If GadgetNum = #Bouton
      Compteur + 1
      SetGadgetText(#Chaine,"Vous avez appuyer sur le bouton " + Str(Compteur)+ " fois")
    EndIf
  EndIf
Until Evenement = #PB_Event_CloseWindow
End




Si cela ne répond pas à ton attente soit un peu plus précis dans ta demande !!

Publié : lun. 20/févr./2006 15:27
par Dorian
Merci mais sa je sais faire ^^.

Ce que je chercher c'est créer un nouveau gadget pas afficher un déjà éxistant

Publié : lun. 20/févr./2006 15:32
par CameleonTH
Je vois ce que tu veut dire, en gros tu veut savoir comment on fait pour crée un nouveau stye de gadget comme dans tous les grand logiciel commerciale :D
Mias seule probléme c'est que je ne sais pas du tous comment on s'y prend, en espérant que quelqu'un le sache car cela m'interesserai aussi.

Publié : lun. 20/févr./2006 15:50
par Flype
Oui c'est possible mais pour cela il faut créer une userlibrary en ASM, en C, ou avec Purebasic lui-même grâce à Tailbite.

Tout est déjà prévu pour créer un nouveau gadget ou un codec d'image.

Par exemple avec TailBite, une structure est donnée pour supportée toutes les fonctions purebasic classiques de gestion de gadgets :

Code : Tout sélectionner

Structure TB_GadgetVT
        FreeGadget.l
        GetGadgetState.l
        SetGadgetState.l
        GetGadgetText.l
        SetGadgetText.l
        AddGadgetItem.l
        AddGadgetItem2.l
        RemoveGadgetItem.l
        ClearGadgetItemList.l
        ResizeGadget.l
        CountGadgetItems.l
        GetGadgetItemState.l
        SetGadgetItemState.l
        GetGadgetItemText.l
        SetGadgetItemText.l
   EndStructure
Donc, pour l'instant le mieux à faire c'est de télécharger TailBite, et de lire la documentation fournie avec.
Pour l'instant, TailBite n'est réellement compatible qu'avec PB3.94. Il faudra attendre encore peu pour la v4.

Publié : lun. 20/févr./2006 16:13
par nico
Le cas classique est d'utiliser le Static Control pour en faire un HyperlinkGadget, en cherchant tu peux peut être trouver des exemples aux adresses connues.

Tiens justement un exemple:

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2955&highlight=
; Author: Andreas  (updated for PB3.92+ by Andre)
; Date: 29. November 2003

Global Static2.l 
Global ReUsableBrush,a.l 

Procedure IsMouseOver(wnd) 
    GetWindowRect_(wnd,re.RECT) 
    GetCursorPos_(pt.POINT) 
    Result = PtInRect_(re,pt\x,pt\y) 
    ProcedureReturn Result 
EndProcedure 

Procedure SetColor(TxtColor,BkColor,wParam ,lParam ) 
Shared ReUsableBrush 
    DeleteObject_(ReUsableBrush) 
    ReUsableBrush = GetStockObject_(#HOLLOW_BRUSH) 
    SetBkColor_(wParam,BkColor) 
    SetTextColor_(wParam,TxtColor) 
    SetBkMode_(wParam,#TRANSPARENT) 
    Result  =  ReUsableBrush 
    ProcedureReturn Result 
EndProcedure 

Procedure WindowCallback(WindowID, message, wParam, lParam) 
    Result = #PB_ProcessPureBasicEvents 
    Select message 
    Case #WM_LBUTTONUP 
        If IsMouseOver(Static2) 
            ShellExecute_(0,"open","http:\\www.ampsoft.org",0,0,#SW_SHOWNORMAL) 
        EndIf 
    Case   #WM_MOUSEMOVE 
        GetCursorPos_(pt.POINT) 
        GetWindowRect_(Static2,re.RECT) 
        If PtInRect_(re,pt\x,pt\y) 
            a = 1 
            SetWindowText_(Static2,"www.ampsoft.org") 
            SetCursor_(LoadCursor_(0,32649)) 
        Else 
            a = 0 
            SetWindowText_(Static2,"www.ampsoft.org") 
            SetCursor_(LoadCursor_(0,#IDC_ARROW)) 
        EndIf 
        InvalidateRect_(WindowID(),0,0) 
    Case #WM_CTLCOLORSTATIC 
        If lParam = Static2 
            If a 
                Result = SetColor(RGB(255,0,0),RGB(255,255,255),wParam,lParam) 
            Else 
                Result = SetColor(RGB(0,0,255),RGB(255,255,255),wParam,lParam) 
            EndIf 
        EndIf 
    EndSelect 
    ProcedureReturn Result 
EndProcedure 

If OpenWindow(0, 10, 150, 640,180, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "MouseOver") 
    If CreateGadgetList(WindowID()) 
        Static2 = TextGadget(0, 10,10,220,24,"") 
    EndIf 
    SetWindowCallback(@WindowCallback()) 
    SendMessage_(WindowID(),#WM_MOUSEMOVE,0,0) 
    Repeat 
        EventID.l = WaitWindowEvent() 
        If EventID = #PB_Event_CloseWindow 
            Quit = 1 
        EndIf 
    Until Quit = 1 
EndIf 
End