

Merci quand même Dobro pour ton aide.Le premier double clic génère un clic / puis un double clic.
Ensuite on détecte bien les double clic, mais un simple clic sur deux est détecté.
Code : Tout sélectionner
#Delay=150 ; Delay max for double clic
#Bouton=0
#Edit=1
OpenWindow(0,0,0,200,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Clic & Double-Clic")
CreateGadgetList(WindowID())
AdvancedGadgetEvents(1)
ButtonGadget(#Bouton,10,10,180,80,"Clic ou double clic")
EditorGadget(#Edit,10,100,180,290)
ActivateGadget(#Bouton)
Procedure Monostable(AdresseSimpleClic)
Delay(#Delay)
;/ Lancement de la procédure par Simple Clic
CallFunctionFast(AdresseSimpleClic)
EndProcedure
Procedure A() ; Procédure lancée sur Simple Clic
AddGadgetItem(#Edit,-1,"Clic")
EndProcedure
Procedure B() ; Procédure lancée sur Double Clic
AddGadgetItem(#Edit,-1,"Double Clic")
EndProcedure
Procedure IsThreadRunning2(ThreadId) ; Author : Freak
GetExitCodeThread_(ThreadId, @ExitCode.l)
If ExitCode = #STATUS_PENDING
retour=1 ; Le thread tourne encore
EndIf
ProcedureReturn retour
EndProcedure
Repeat
EventID = WaitWindowEvent()
If EventID=#PB_Event_Gadget And EventGadgetID()=#Bouton
Select EventType()
Case #PB_EventType_LeftClick
If IsThreadRunning2(ThreadId)=0 Or ThreadId=0
ThreadId=CreateThread(@Monostable(),@A())
EndIf
Case #PB_EventType_LeftDoubleClick
If IsThreadRunning2(ThreadId)
KillThread(ThreadId)
B() ;/ Lancement de la procédure par Double Clic
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
bah ! meme la plus jolie fille ne peut offrir que ce qu'elle aDroopy a écrit :Merci quand même Dobro pour ton aide.![]()
c'est vrais que ça marche , mais cela reste bien compliqué quand memeJ'ai implémenté l'idée du Timer et ça fonctionne nickel :
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
AdvancedGadgetEvents(1)
ButtonGadget(0,10,10,180,80,"Clic ou double clic")
Temps_DoubleClic = GetDoubleClickTime_()
Repeat
Event = WaitWindowEvent()
Select Event
Case#PB_EventGadget
Select EventGadgetID() ; Gadgets
Case 0
If EventType() = #PB_EventType_LeftClick
; On attends un double clic
Temps = GetTickCount_()
Repeat
Delay(1)
Until GetTickCount_() - Temps >= Temps_DoubleClic
; on regarde si double clic
Repeat
Event = WindowEvent()
If EventType() = #PB_EventType_LeftDoubleClick
DoubleClic = 1
EndIf
Until Event = 0
; On agit
If DoubleClic
Debug "Double clic"
Else
Debug "Clic simple"
EndIf
; Remise à 0 du double clic
DoubleClic = 0
EndIf
EndSelect
EndSelect
Until Event = #PB_EventCloseWindow
End
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
; Création de la fenêtre et de la GadgetList
Temps_DoubleClic = GetDoubleClickTime_()
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Double de clic de moins de :"+Str(Temps_DoubleClic)) = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
AdvancedGadgetEvents(1)
ButtonGadget(0,10,10,100,30,"Clic ou double clic")
ListViewGadget(1,60,70,180,180)
Repeat
Event = WaitWindowEvent()
Select Event
Case#PB_EventGadget
Select EventGadgetID() ; Gadgets
Case 0
If EventType() = #PB_EventType_LeftClick
; On attends un double clic et on regarde si double clic
Temps = GetTickCount_()
Repeat
Event = WindowEvent()
If EventType() = #PB_EventType_LeftDoubleClick
DoubleClic = 1
EndIf
Until GetTickCount_() - Temps >= Temps_DoubleClic Or DoubleClic = 1
; On agit
If DoubleClic
AddGadgetItem(1,-1,"Double clic")
; Remise à 0 du double clic
DoubleClic = 0
Else
AddGadgetItem(1,-1,"Clic simple")
EndIf
EndIf
EndSelect
EndSelect
Until Event = #PB_EventCloseWindow
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
; Création de la fenêtre et de la GadgetList
; Variante Purebasic 4.00 par Dobro
Temps_DoubleClic = GetDoubleClickTime_ ()
If OpenWindow (0, 0, 0, 300, 300, "Double de clic de moins de :" + Str (Temps_DoubleClic), #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget ) = 0 Or CreateGadgetList ( WindowID (0)) = 0
End
EndIf
ButtonGadget (0,10,10,100,30, "Clic ou double clic" )
ListViewGadget (1,60,70,180,180)
Repeat
double=-1
Event = WaitWindowEvent ()
Select Event
Case #WM_LBUTTONDOWN
double = 0
Temps = GetTickCount_ ()
Repeat
Event = WindowEvent ()
If Event = #WM_LBUTTONDBLCLK
double = 1
EndIf
Until GetTickCount_ () - Temps >= Temps_DoubleClic Or DoubleClic = 1
EndSelect
If double=1
AddGadgetItem (1,-1, "Double clic" )
ElseIf double=0
AddGadgetItem (1,-1, "Clic simple" )
EndIf
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
Temps_DoubleClic = GetDoubleClickTime_ ()
If OpenWindow (0, 0, 0, 300, 300, "Double de clic de moins de :" + Str (Temps_DoubleClic), #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget ) = 0 Or CreateGadgetList ( WindowID (0)) = 0
End
EndIf
ButtonGadget (0,10,10,100,30, "Clic ou double clic" )
ButtonGadget (2,120,10,100,30, "test" )
ListViewGadget (1,60,70,180,180)
Repeat
double=-1
Event = WaitWindowEvent ()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 2
Select EventType()
Case #PB_EventType_LeftClick
Debug "Click2"
EndSelect
EndSelect
Case #WM_LBUTTONDOWN
double = 0
Temps = GetTickCount_ ()
Repeat
Event = WindowEvent ()
If Event = #WM_LBUTTONDBLCLK
double = 1
EndIf
Until GetTickCount_ () - Temps >= Temps_DoubleClic Or DoubleClic = 1
If double=1
AddGadgetItem (1,-1, "Double clic" )
ElseIf double=0
AddGadgetItem (1,-1, "Clic simple" )
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow