Comment empecher les clics de la souris ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
ElwoOOod
Messages : 15
Inscription : lun. 28/juil./2014 13:15

Comment empecher les clics de la souris ?

Message par ElwoOOod »

re-Bonjour,

Je reviens vers vous pour une info.
J'ai quasi terminé mon premier projet, tout est clean est sans bug d'affichage, ouf.

Cependant, j'ai un soucis avec la souris. (a noter que je ne passe pas par DirectX).

Ma routine d'"attente" se presente comme suit :

Code : Tout sélectionner

;Boucle principale
Repeat
  DisplayIntroFX()
  Select WaitWindowEvent(5)
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget

      If EventGadget() = #MainCanvas
        If EventType() = #PB_EventType_LeftClick
          MouseDown()
        EndIf
      EndIf
      
  EndSelect
ForEver
Dans ma procedure MouseDown() se déroule des animations et autres choses diverses qui prennent environ 4 a 5 secondes.

Le soucis est que si je clique à nouveau durant ce laps de temps, les clics sont comme enregistrés et dès que MouseDown() est finie, elle est aussitot rappellé. (a noter que les WindowMouseX et Y sont ceux au moment de l'appel de MouseDown() et non au moment du clic).

Peut-on empecher la gestion du clic pendant l'execution d'une procedure ? (j'ai essayé de mettre un flag mais ca ne marche pas)
Ou faut-il passer obligatoirement par les fonctions de DirectX ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Comment empecher les clics de la souris ?

Message par Backup »

ElwoOOod a écrit : (j'ai essayé de mettre un flag mais ca ne marche pas)
ben t'as surement mal essayé

Code : Tout sélectionner

 If EventType() = #PB_EventType_LeftClick and Flag=0
          MouseDown()
Flag=0
EndIf
dans ton MouseDown() tu met Flag =1

et tu met au debut de ton code

Code : Tout sélectionner

Global  Flag=0 
ElwoOOod
Messages : 15
Inscription : lun. 28/juil./2014 13:15

Re: Comment empecher les clics de la souris ?

Message par ElwoOOod »

Ben non ca marche pas.

Code : Tout sélectionner

;Canvas Clic Test

Enumeration
  #MainForm : #MainCanvas
  #sndCarillon
EndEnumeration

Global MouseClicAvailable.b = 1

Procedure MouseDown()
  MouseClicAvailable = 0
  PlaySound(#sndCarillon)
  Delay(5000)
EndProcedure

OpenWindow(#MainForm, 0, 0, 720, 408, "Clic test", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
CanvasGadget(#MainCanvas, 0, 0, 720, 408, #PB_Canvas_Keyboard)

InitSound()
CatchSound (#sndCarillon, ?sndCarillonWAV)

;Boucle principale
Repeat
;  DisplayIntroFX()
  Select WaitWindowEvent(5)
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget

      If EventGadget() = #MainCanvas
        If EventType() = #PB_EventType_LeftClick And MouseClicAvailable
          MouseDown()
          MouseClicAvailable = 1
        EndIf
      EndIf
      
  EndSelect
ForEver

DataSection
  sndCarillonWAV:
    IncludeBinary "snd/Carillon1.wav"
EndDataSection
(remplacez le wave par un de votre choix)
Dans cet exemple, le son est joué quand on clic sur le canvas.
Si on reclic avant le delay des 5s et qu'on attend, MouseDown() sera rappellé apres le delay
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Comment empecher les clics de la souris ?

Message par Fred »

Tu peux mettre un "While WindowEvent() : Wend" a la fin de ta procedure si t'as pas envie de processer les evenements qui se sont passé pendant.
ElwoOOod
Messages : 15
Inscription : lun. 28/juil./2014 13:15

Re: Comment empecher les clics de la souris ?

Message par ElwoOOod »

Wouahou, et ca marche. J'avoue ne pas comprendre pourquoi mais je vais noter ça comme une astuce ;)
merci,
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Comment empecher les clics de la souris ?

Message par Fred »

Les évènements s'empilent dans une liste quand ils ne sont pas gérés, donc il faut vider cette liste si tu n'en as pas besoin.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Comment empecher les clics de la souris ?

Message par Fig »

A quand un ClearWindowEvent() ? :wink:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre