Clic & Double clic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Clic & Double clic

Message 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 
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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 :?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Essayes en subclassant la listicon!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

aaarg !
Dernière modification par Backup le mer. 04/janv./2006 23:06, modifié 1 fois.
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message 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
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message par CameleonTH »

Mon message concerner le code précédant de Dobro :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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

Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon je laisse tomber ! :lol:
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Il y a une API pour avoir le laps de temps du double clic, je cherche
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ah voilà, c'est GetDoubleClickTime_()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message par CameleonTH »

Maintenant reste à savoir comment l'utiliser pour réussir a savoir si on a fait un clic simple ou un double clic.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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.
Répondre