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 :D


  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 :D


#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. :D

Non, je ne dis pas que Dobro est nul. :D
C'est juste qu'il est tard et qu'il doit etre fatiguer. :D

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

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 ! :lol:

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 :D

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 :x

Donc je pense qu'il faille utiliser une tempo plus courte que GetDoubleClickTime afin de rendre le programme plus réactif.