Page 1 sur 2
Clic & Double clic
Publié : mer. 04/janv./2006 21:07
par Droopy
Quand je double clique le code suivant m'indique que l'on a cliqué du gauche puis double cliqué du gauche !
Je souhaiterai que lorsque je double clic, uniquement un évènement de type double clic me soit renvoyé .
Code : Tout sélectionner
#List = 0
OpenWindow(0,100,100,300,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Test")
CreateGadgetList(WindowID())
ListIconGadget(#List,5,5,290,90,"Name",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#List,1,"Address",250)
AddGadgetItem(#List,-1,"Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(#List,-1,"Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
Repeat
EventID = WaitWindowEvent()
If EventID=#PB_Event_Gadget And EventGadgetID()=#List
Select EventType()
Case #PB_EventType_LeftClick
Debug "Simple clic"
Case #PB_EventType_LeftDoubleClick
Debug "Double clic"
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
Publié : mer. 04/janv./2006 21:14
par Backup
analyse bien le code suivant , cela devrai t'aider
If OpenWindow (0, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered , "Souris" )
SetClassLong_ ( WindowID (), #GCL_STYLE , GetClassLong_ ( WindowID (), #GCL_STYLE ) | #CS_DBLCLKS ) ; Active la gestion du double clic
Repeat
Event = WaitWindowEvent ()
If Event = #WM_LBUTTONDOWN
Debug "Bouton gauche appuyé"
ElseIf Event = #WM_LBUTTONUP
Debug "Bouton gauche relaché"
ElseIf Event = #WM_LBUTTONDBLCLK
Debug "Double clic gauche"
ElseIf Event = #WM_RBUTTONDOWN
Debug "Bouton droit appuyé"
ElseIf Event = #WM_RBUTTONUP
Debug "Bouton droit relaché"
ElseIf Event = #WM_RBUTTONDBLCLK
Debug "Double clic droit"
EndIf
Until Event = #WM_CLOSE
EndIf
Publié : mer. 04/janv./2006 22:17
par Droopy
Merci dobro, mais ça ne me convient pas.
Je précise mon besoin :
J'ai deux procédures disont A et B.
A est lancé sur un simple clic.
B est lancé sur un double clic.
Avec la procédure actuelle, un double clic lance la procédure A et la procédure B !
J'ai fouillé sur les forums, et trouvé une piste sur l'ajout d'un timer suite au premier clic, et après il faut gérer à la fin du timer si on a intercepté d'autres évènements entre temps.
Bref c'est pas simple tout ça

Publié : mer. 04/janv./2006 22:52
par nico
Essayes en subclassant la listicon!
Publié : mer. 04/janv./2006 22:54
par Backup
ceci est bisard , mais lorsqu'on utilise le bouton de gauche
c'est la procedure "simple click"
alors que le bouton de droit c'est "double click"*
je sais pas si ça peut te depaner en attendant
#List = 0
OpenWindow (0,100,100,300,100, #PB_Window_SystemMenu|#PB_Window_ScreenCentered , "Test" )
CreateGadgetList ( WindowID ())
ListIconGadget ( #List ,5,5,290,90, "Name" ,100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection )
AddGadgetColumn ( #List ,1, "Address" ,250)
AddGadgetItem ( #List ,-1, "Harry Rannit" + Chr (10)+ "12 Parliament Way, Battle Street, By the Bay" )
AddGadgetItem ( #List ,-1, "Ginger Brokeit" + Chr (10)+ "130 PureBasic Road, BigTown, CodeCity" )
Repeat
EventID = WaitWindowEvent ()
If EventID= #PB_Event_Gadget And EventGadgetID ()= #List
Select EventType ()
Case #PB_EventType_LeftDoubleClick
compt=compt+1
Case #PB_EventType_LeftClick
compt=compt+1
EndSelect
If compt=1
Debug "simple clic"
Else
Debug "Double clic"
EndIf
compt=0
EndIf
Until EventID = #PB_Event_CloseWindow
Publié : mer. 04/janv./2006 23:05
par Backup
aaarg !
Publié : mer. 04/janv./2006 23:05
par CameleonTH
Euh Dobro c'est normal que sa mettent un double clic avec le clic droit car tu a mis un select eventtype() avec comme choix #PB_EventType_LeftDoubleClick et #PB_EventType_LeftClick et retourne 1 si l'un des 2 est appeler, et juste aprés tu met "si compt=1 afficher simple clic sinon double clic" et il affiche double clic parce que le résultat donner par un clic droit et de 0 car tu n'a pas mis #PB_EventType_RightClick dans la séléction et comme compt=0 et différent de compt=1 alor il marque double clic.
Désoler si c'est pas claire mais c'est une erreur assez simple.
Non, je ne dis pas que Dobro est nul.

C'est juste qu'il est tard et qu'il doit etre fatiguer.

Publié : mer. 04/janv./2006 23:07
par CameleonTH
Mon message concerner le code précédant de Dobro

Publié : mer. 04/janv./2006 23:07
par Backup
et comme ça ?
#List = 0
OpenWindow (0,100,100,300,100, #PB_Window_SystemMenu|#PB_Window_ScreenCentered , "Test" )
CreateGadgetList ( WindowID ())
SetClassLong_ ( WindowID (), #GCL_STYLE , GetClassLong_ ( WindowID (), #GCL_STYLE ) | #CS_DBLCLKS ) ; Active la gestion du double clic
ListIconGadget ( #List ,5,5,290,90, "Name" ,100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection )
AddGadgetColumn ( #List ,1, "Address" ,250)
AddGadgetItem ( #List ,-1, "Harry Rannit" + Chr (10)+ "12 Parliament Way, Battle Street, By the Bay" )
AddGadgetItem ( #List ,-1, "Ginger Brokeit" + Chr (10)+ "130 PureBasic Road, BigTown, CodeCity" )
Repeat
EventID = WaitWindowEvent ()
If EventID= #PB_Event_Gadget And EventGadgetID ()= #List
Select EventType ()
Case #PB_EventType_LeftDoubleClick
compt=compt+1
Debug "Double clic"
Goto sortie
Case #PB_EventType_LeftClick
compt=compt+1
EndSelect
If compt=1
Debug "simple clic"
Goto sortie
Else
compt=0
EndIf
EndIf
sortie:
Until EventID = #PB_Event_CloseWindow
Publié : mer. 04/janv./2006 23:11
par Backup
bon je laisse tomber !

Publié : mer. 04/janv./2006 23:15
par CameleonTH
Moi je dit comme Droopy, c'est une histoire de timer.
mais le dernier code de dobro peut faire office de remplassant en attendant.
Bravo

Publié : mer. 04/janv./2006 23:24
par Le Soldat Inconnu
Il y a une API pour avoir le laps de temps du double clic, je cherche
Publié : mer. 04/janv./2006 23:29
par Le Soldat Inconnu
ah voilà, c'est GetDoubleClickTime_()
Publié : mer. 04/janv./2006 23:39
par CameleonTH
Maintenant reste à savoir comment l'utiliser pour réussir a savoir si on a fait un clic simple ou un double clic.
Publié : mer. 04/janv./2006 23:50
par Droopy
GetDoubleClickTime_() renvoie chez moi 500ms. ! ( Temps max entre deux clics pour qu'ils soient considérés comme un double clic )
Si j'arrive à distinguer les deux évènements avec un timer, un simple clic sera pris en compte 500ms après l'évènement
Donc je pense qu'il faille utiliser une tempo plus courte que GetDoubleClickTime afin de rendre le programme plus réactif.