Page 1 sur 2

[OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : dim. 13/déc./2015 15:01
par Ar-S
Y'a t il une syntaxe pour remplacer un cas comme ça sans avoir à mettre 2x BindGadgetEvent:

Code : Tout sélectionner

 Case #PB_Event_Gadget
        Select EventGadget()
          Case #Lmin,  #Lsec ; <<<<<<<<<<<<
            ;Code
  
        EndSelect
Merci

Re: BindGadgetEvent pour la même proce sur plusieurs gadgets

Publié : dim. 13/déc./2015 15:16
par Fred
Non, il faut mettre 2 BindGadgetEvent(). Sinon, tu peux en mettre un seul BindEvent(#PB_Event_Gadget, ...) et faire ce test dans ta callback, mais l'interet est plutot limité.

Re: BindGadgetEvent pour la même proce sur plusieurs gadgets

Publié : dim. 13/déc./2015 15:20
par Ar-S
Ok merci Fred,
Du coup puis-je utiliser des BindGadgetEvent pour certains gadgets, un BindEvent pour mon timer mais laisser ma partie "double gadget pour 1 proce" dans la boucle sans que ça cause de soucis ?

Re: BindGadgetEvent pour la même proce sur plusieurs gadgets

Publié : dim. 13/déc./2015 21:16
par Fred
Oui, ca devrait marcher meme si c'est pas conseillé de mixer tout.

Re: BindGadgetEvent pour la même proce sur plusieurs gadgets

Publié : dim. 13/déc./2015 21:34
par Ar-S
J'ai testé ça a l'air de bien fonctionner.

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : dim. 13/déc./2015 23:41
par falsam
Si tu as pas mal de gadgets, tu peux aussi inclure ton BindGadgetEvent() dans une boucle For .... Next

Code : Tout sélectionner

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #First
  #Second
  #Third
  #Fourth
  #Fifth
EndEnumeration
 
y=10

Procedure OnClick()
  Debug "Clique sur le bouton " + EventGadget()
EndProcedure

If OpenWindow(#MainForm, 0, 0, 500, 400, "BindGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)   
  For Gadget = #First To #Fifth
    ButtonGadget(Gadget, 400, y, 80, 22, "Button" + Str(Gadget)) 
    y + 30
    
    BindGadgetEvent(Gadget, @OnClick())
  Next
    
  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 2:15
par Ar-S
Mouais pour des actions similaires sur différents gadgets je préfère tout de même le Case #G1,#G2,#G3
C'est dans ce cas là le plus simple et le moins redondant.

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 15:09
par Micheao
c'est nouveau ce BindGadgetEvent

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 15:19
par falsam
Micheao a écrit :c'est nouveau ce BindGadgetEvent
C'est une question ? une affirmation ?

Dans tous les cas Non ce n'est pas nouveau. La version 5.31 de PureBasic intégrée déja cette fonctionnalité.

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 15:48
par Micheao
falsam a écrit :
Micheao a écrit :c'est nouveau ce BindGadgetEvent
C'est une question ? une affirmation ?

Dans tous les cas Non ce n'est pas nouveau. La version 5.31 de PureBasic intégrée déja cette fonctionnalité.
j'ai été pas au courant désoler

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 18:12
par Fred
Ar-S a écrit :Mouais pour des actions similaires sur différents gadgets je préfère tout de même le Case #G1,#G2,#G3
C'est dans ce cas là le plus simple et le moins redondant.
Dans ce cas BindEvent() fera l'affaire:

Code : Tout sélectionner

 Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #First
  #Second
  #Third
  #Fourth
  #Fifth
EndEnumeration

y=10

Procedure OnGenericClick()
  Select EventGadget()
    Case 1,2,3
      Debug EventGadget()
  EndSelect
  
EndProcedure

If OpenWindow(#MainForm, 0, 0, 500, 400, "BindGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)   
  For Gadget = #First To #Fifth
    ButtonGadget(Gadget, 400, y, 80, 22, "Button" + Str(Gadget))
    y + 30
  Next
  
  BindEvent(#PB_Event_Gadget, @OnGenericClick())

   
  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : lun. 14/déc./2015 18:27
par Ar-S
C'est juste nikel :P
Merci !

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : mer. 23/déc./2015 16:47
par Ar-S
Je rouvre ce topic car j'ai un nouveau soucis de BindEvent.
#WM_LBUTTONDOWN est bien un event ?
Si je fais

Code : Tout sélectionner

Procedure BougeFenetre()
   SendMessage_(WindowID(#MAFENETRE), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
EndProcedure

Openwindows (etc...)
BindEvent(#WM_LBUTTONDOWN, @BougeFenetre())
Dans une boucle classique de Repeat Until la procedure marche bien.

Une idée de pourquoi ça ne fonctionne pas ?


----EDIT----

En 5.31 ça fonctionne, en 5.41 ça ne fonctionne pas

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : mer. 23/déc./2015 17:07
par Micheao
BOnsoir Ar-S

si j'ai bien compris tu veux pas passer par une boucle Repeat Until

Re: [OK] BindGadgetEvent pour la même proce sur N gadgets ?

Publié : mer. 23/déc./2015 17:53
par Fred
#WM_LBUTTONDOWN n'est pas evenement purebasic, donc ca ne marchera pas BindEvent().