Page 2 sur 2

Publié : jeu. 05/janv./2006 0:34
par Backup
@Droopy : t'a quand meme essayé mon dernier code ? 8O :)

Publié : jeu. 05/janv./2006 1:01
par Droopy
J'ai regardé ton code Dobro mais il buggue. :?
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é.
Merci quand même Dobro pour ton aide. :D

J'ai implémenté l'idée du Timer et ça fonctionne nickel :

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 

Publié : jeu. 05/janv./2006 1:18
par Backup
Droopy a écrit :Merci quand même Dobro pour ton aide. :D
bah ! meme la plus jolie fille ne peut offrir que ce qu'elle a :lol:
J'ai implémenté l'idée du Timer et ça fonctionne nickel :
c'est vrais que ça marche , mais cela reste bien compliqué quand meme :?
en esperant que la version 4 nous apportera un plus grand control des Events
.... :D

Publié : jeu. 05/janv./2006 6:26
par cederavic
Une mini recherche sur le musée et j'ai trouvé ça de Régis : http://cederavic.serveurperso.com/forum ... c.php?t=36

Publié : jeu. 05/janv./2006 7:09
par Droopy
Merci cederavic son code fonctionne et est beaucoup plus simple que le mien :D

Publié : jeu. 05/janv./2006 9:59
par Droopy
Après un test plus approfondi, le code de régis déconne quand on ajoute la modification d'un gadget lors de la détection d'évènements de type clic / double clic.

Cela doit ajouter des évènements ( interceptés par windowevent ) et poser problème avec la gestion des clic :(

Publié : jeu. 05/janv./2006 10:56
par Le Soldat Inconnu
Et comme ça ?

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

Publié : jeu. 05/janv./2006 13:01
par brossden
Solution du soldat améliorée je pense avec un retour sur double clic plus rapide et une remise à 0 que si nécessaire et journal des evènements integré dans la fenêtre:

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 

Publié : jeu. 05/janv./2006 21:05
par Droopy
Nickel. Merci les Gars :D

Publié : mer. 11/oct./2006 12:32
par Kwai chang caine
Super le code a BROSSDEN. 8)

Par contre j'ai essayé de le convertir en 4.0 et apparement FRED a supprimé la fonction AdvancedGadgetEvents().

Evidement le code ne marche plus sans elle. :(

Que faudrait il mettre à la place ??

Merci
Bonne journée

Publié : mer. 11/oct./2006 13:19
par Backup
tiens comme ça ça a l'air de marcher :D


; 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

Publié : mer. 11/oct./2006 16:49
par Kwai chang caine
Merci DOBRO

Comme dab tu es génial. :wink:

Que serais ce monde sans toi ...... :(

Je te remercie beaucoup, ainsi évidement que le soldat inconnu pour ce génial code.

A bientot (Malheureusement pour toi :lol: :lol: )
Excelente soirée

Petit scarabé

Publié : mer. 11/oct./2006 17:23
par nico
Mais y a pas comme un problème, on récupère plus les évènements sur le deuxième bouton.

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 

Publié : mer. 11/oct./2006 18:41
par Backup
nico a écrit :Mais y a pas comme un problème, on récupère plus les évènements sur le deuxième bouton.
ça n'etais pas la question :D

Publié : mer. 11/oct./2006 19:44
par nico
:lol: