IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Gadgets
        Comment annuler la dernière modification d'un StringGadget (undo) ?
        Comment ajouter dynamiquement des gadgets dans une fenêtre ?
        Comment détecter le passage de la souris sur un gadget ?

rechercher
precedent    sommaire    suivant    telechargermiroir


Comment annuler la dernière modification d'un StringGadget (undo) ?
auteur : Progi1984
Pour cela, nous utilisons la fonction SendMessage() de l'API Windows pour envoyer un message au StringGadget lui demandant d'annuler sa dernière modification.

If OpenWindow(0, 100, 200, 200, 200, "Annulation - undo")
  ; Crée la liste de gadgets
  If CreateGadgetList(WindowID(0))
    StringGadget(0, 0, 0, 100, 20, "Texte initial")  
    ButtonGadget(1, 100, 100, 100, 100, "Annuler")
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      GadgetID = EventGadget()
      If GadgetID = 1
        SendMessage_(GadgetID(0), #EM_UNDO, 0, 0)
      EndIf
    EndIf

  Until Quit = 1
  
EndIf

Comment ajouter dynamiquement des gadgets dans une fenêtre ?
auteur : Progi1984

La gestion des gadgets dans une fenêtre est réalisée via une GadgetList. Il suffit d'ouvrir cette GadgetList et d'y ajouter le gadget souhaité.

Declare AjouteGadget(No, x, y, width, height, texte.s)

If OpenWindow(0, 100, 200, 200, 200, "Ajout gadgets")
  ; Crée la liste de gadgets
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 0, 0, 100, 100, "Bouton 0")  
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_CloseWindow
      Quit = 1
    ElseIf EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 0
          AjouteGadget(1, 100, 100, 100, 100, "Bouton 1") 
        Case 1
          If IsGadget(2)=0 ; Test si le gadget n'existe pas
            AjouteGadget(2, 0, 100, 100, 100, "Bouton 2")
          EndIf                      
      EndSelect
    EndIf

  Until Quit = 1
  
EndIf

Procedure AjouteGadget(No, x, y, width, height, texte.s)
  ; Ouvre la liste de gadgets
  If OpenGadgetList(0)
    ButtonGadget(No, x, y, width, height, texte)
  EndIf
EndProcedure

Comment détecter le passage de la souris sur un gadget ?
auteur : Nico
En testant le message #WM_SETCURSOR

  • wParam renvoie le Handle du gadget sur lequel se trouve la souris.
  • GetDlgCtrlID_() renvoie l'identifiant du gadget.
Il faut que l'ID du Gadget soit supérieur à zéro car le message renvoie null s'il n'est pas au dessus un Gadget.

De plus le gadget ne sera pas détecté s'il est désactivé.

Procedure ProcedureCallback(WindowID, Message, wParam, lParam)
  Select Message
    Case #WM_SETCURSOR
      ;Affiche le Handle et l'identifiant du gadget dans la barre de titre
	  SetWindowTitle(0,"Handle= "+Str(wParam)+"   , "+"ID= "+Str(GetDlgCtrlID_(wParam)))
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Enumeration
  #Window
  #StringG     ;ID=1
  #Button      ;ID=2
  #CheckBox    ;ID=3
EndEnumeration

If OpenWindow(#Window,0,0,400,400,"PureBasic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(#Window))
  StringGadget(#StringG   , 20,  20, 200, 20, "StringGadget Normal ...")
  ButtonGadget(#Button    , 20,  60, 200, 20, "Bouton Standard")
  CheckBoxGadget(#CheckBox, 20, 100, 200, 20, "CheckBox standard")
 
  ;DisableGadget(#Button,1)
 
  SetWindowCallback(@ProcedureCallback())

  Repeat
    EventID.l=WaitWindowEvent()
    Select EventID
      Case #WM_CLOSE
        Quit=1
    EndSelect
  Until Quit=1
EndIf 

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.