Un clique sur un bouton réalise plusieurs évènements
Publié : dim. 18/nov./2012 23:18
Bonsoir,
J'ai écrit un programme assez simple contenant quelques gadgets dont un bouton auquel est associé une fonction. Lorsque je clique UNE fois sur le bouton (ou même que je l'active avec la barre d'espace par exemple), j'ai l'impression que le programme détecte l'équivalent de 3 cliques (3 évènements).
Le problème que je rencontre peut être illustré avec ce petit morceau de code (c'est une partie de mon programme mais même en enlevant une grande partie le problème est toujours présent, c'est pour cette raison que je ne mets pas tout le code) :
Quand je clique sur le bouton Hasher, le debug me donne trois fois "Dupe". Dans mon programme complet, j'associe ce clique à une fonction qui contient différentes instruction dont la création d'un thread et cela créer des problèmes. Pour palier à ce comportement non voulu j'ai eu recours à DisableGadget() que l'on peut voir ici :
Cette bidouille me donne une seule fois "Dupe" avec le debug ce qui est ce que j'attends.
Sauriez-vous me dire d'où vient ce comportement, s'il est normal et comment le gérer ?
Je vous remercie d'avance,
TitraxX
J'ai écrit un programme assez simple contenant quelques gadgets dont un bouton auquel est associé une fonction. Lorsque je clique UNE fois sur le bouton (ou même que je l'active avec la barre d'espace par exemple), j'ai l'impression que le programme détecte l'équivalent de 3 cliques (3 évènements).
Le problème que je rencontre peut être illustré avec ce petit morceau de code (c'est une partie de mon programme mais même en enlevant une grande partie le problème est toujours présent, c'est pour cette raison que je ne mets pas tout le code) :
Code : Tout sélectionner
;-constantes
Enumeration
#main_window
#frame
#bouton_parcourir
#string_path
#text_path
#editeur
#bouton_hasher
#bouton_copier
#text_info
EndEnumeration
#HEIGHT = 350
#WIDTH = 415
#FLAGS = #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
;-Main
If OpenWindow(#main_window, 0,0, #WIDTH, #HEIGHT, "", #FLAGS)
Frame3DGadget(#frame, 5, 5, #WIDTH-10, #HEIGHT-10, "")
TextGadget(#text_path, 15, 30, #WIDTH*0.2, 20, "Fichier :")
StringGadget(#string_path, 55, 30, #WIDTH*0.74, 20, "", #PB_String_ReadOnly)
ButtonGadget(#bouton_parcourir, 370, 30, 30, 20, "...")
ButtonGadget(#bouton_copier, 295, 60, 50, 20,"Copier")
ButtonGadget(#bouton_hasher, 350, 60, 50,20, "Hasher")
EditorGadget(#editeur, 15, 90, #WIDTH*0.93, #HEIGHT*0.65, #PB_Editor_ReadOnly)
TextGadget(#text_info, 15, #HEIGHT-25, #WIDTH-20, 20, "")
EndIf
Repeat ;début de la boucle principale du programme.
Event = WaitWindowEvent()
Select EventGadget()
Case #bouton_hasher
Debug "Dupe"
EndSelect
Until Event = #PB_Event_CloseWindow ;fin de la boucle principale du programme.
Code : Tout sélectionner
;-constantes
Enumeration
#main_window
#frame
#bouton_parcourir
#string_path
#text_path
#editeur
#bouton_hasher
#bouton_copier
#text_info
EndEnumeration
#HEIGHT = 350
#WIDTH = 415
#FLAGS = #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
;-Main
If OpenWindow(#main_window, 0,0, #WIDTH, #HEIGHT, "", #FLAGS)
Frame3DGadget(#frame, 5, 5, #WIDTH-10, #HEIGHT-10, "")
TextGadget(#text_path, 15, 30, #WIDTH*0.2, 20, "Fichier :")
StringGadget(#string_path, 55, 30, #WIDTH*0.74, 20, "", #PB_String_ReadOnly)
ButtonGadget(#bouton_parcourir, 370, 30, 30, 20, "...")
ButtonGadget(#bouton_copier, 295, 60, 50, 20,"Copier")
ButtonGadget(#bouton_hasher, 350, 60, 50,20, "Hasher")
EditorGadget(#editeur, 15, 90, #WIDTH*0.93, #HEIGHT*0.65, #PB_Editor_ReadOnly)
TextGadget(#text_info, 15, #HEIGHT-25, #WIDTH-20, 20, "")
EndIf
Repeat ;début de la boucle principale du programme.
Event = WaitWindowEvent()
Select EventGadget()
Case #bouton_hasher
DisableGadget(#bouton_hasher, 1)
Debug "Dupe"
DisableGadget(#bouton_hasher, 0)
EndSelect
Until Event = #PB_Event_CloseWindow ;fin de la boucle principale du programme.
Sauriez-vous me dire d'où vient ce comportement, s'il est normal et comment le gérer ?
Je vous remercie d'avance,
TitraxX