Evènements souris

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lush
Messages : 7
Inscription : mar. 15/févr./2011 16:27

Evènements souris

Message par lush »

Bonjour,

Ça fait quelques jours que je fais mumuse avec PB, et j'ai une petite question.

J'ai créé un ImageGadget sur lequel je teste si l'utilisateur clique.
A ce que je vois, l'évènement "clic" (#PB_EventType_LeftClick) reçu par WaitWindowEvent() est en réalité un "mousedown" et non un "clic" (l'évènement se déclenche avant que je relâche le bouton de la souris).

J'ai bien vu ce sujet : Mouse Event et j'ai bien peur que la réponse à ma question soit négative...

Ma question est donc la suivante : est-il possible, avec les fonctions PB, de gérer un clic et un dragstart sur le même ImageGadget ?

Merci ;)
Lush
Vista FP, XP SP3, OS X 10.4
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Evènements souris

Message par Backup »

.............
Dernière modification par Backup le dim. 20/mars/2011 12:54, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Evènements souris

Message par falsam »

Ce que tu souhaites c'est faire un drop d'une image à une autre ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
lush
Messages : 7
Inscription : mar. 15/févr./2011 16:27

Re: Evènements souris

Message par lush »

Dobro a écrit :voir Tuto numero 9 section "Débutant"
Merci. Mais les appels à GetSystemMetrics_ et compagnie, ça ne doit pas trop marcher ailleurs que sous Windows, non ? J'aurais peut-être dû m'exprimer différemment mais par "les fonctions PB", j'entendais des instructions qui soient cross-platform (encore que Linux ne soit pas ma priorité)
falsam a écrit :Ce que tu souhaites c'est faire un drop d'une image à une autre ?
En fait non. Ça serait plutôt un genre de splashscreen (une fenêtre borderless avec un ImageGadget qui prend toute la surface).
Le but serait de pouvoir la déplacer quand elle me gêne (Drag) et la fermer/réduire (clic) quand je n'en veux plus.

C'est un projet que j'avais commencé il y a quelques années sous RealBasic, et j'essaie d'en porter certaines parties pour découvrir PureBasic. Ça change un peu de l'event driven, mais je commence à m'habituer à la boucle WaitWindowEvent() :)
(Je fais la même chose avec Lazarus, mais là c'est mes années Pascal qui sont bien loin...)

La finalité de la démarche, c'est de trouver un outil de dev qui me permette de faire quelque chose qui fonctionne sous Win et sous OS X sans avoir à coder trop de parties spécifiques à chaque OS.
Lush
Vista FP, XP SP3, OS X 10.4
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Evènements souris

Message par Le Soldat Inconnu »

en multiplateforme, aucune idée.

Je ne sais le faire qu'avec des fonctions windows.
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)]
lush
Messages : 7
Inscription : mar. 15/févr./2011 16:27

Re: Evènements souris

Message par lush »

Merci pour ta réponse en tout cas :)

Ça répond à mes interrogations, à savoir qu'il n'y a pas de moyen d'y parvenir directement via les évènements de type #PB_Event_Gadget.

J'ai quand même réussi à faire ce que je voulais. A coups de Debug WaitWindowEvent() j'ai pu trouver que le bouton relâché déclenche un évènement de valeur 514, et je le gère en dehors de la partie qui gère les #PB_Event_Gadget.

C'est quand même un peu dommage que le clic soit assimilé à l'évènement "bouton enfoncé" et non pas à "bouton enfoncé - bouton relâché". C'est assez déroutant du point de vue utilisateur de voir une action se déclencher alors qu'on n'a pas relâché le bouton, je trouve.

Ceci dit, entre le tuto indiqué par Dobro et des bouts de fonction Mac trouvés sur le forum anglais, je pense qu'il y a moyen de faire quelque chose d'utilisable sur les deux plateformes. En attendant que Fred implémente un jour la gestion des mouseup et mousedown dans les évènements Gadget ;)
Lush
Vista FP, XP SP3, OS X 10.4
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Evènements souris

Message par PAPIPP »

Bonjour lush

Je ne sais si le prg suivant peut te convenir il fonctionne sous Windows en PB451
Et il permet le déplacement d’un imagegadget

Code : Tout sélectionner

Procedure.q nbcycl()
  !RDTSC
  ProcedureReturn
EndProcedure

Macro q_t
  "
EndMacro
Macro ff_n(n)
  q_t#n#=q_t+Str(n)+" "
EndMacro

Macro ff_s(S)
  q_t#S#=q_t+S+" "
EndMacro

Macro ff_f(F,nv=8)
  q_t#F#=q_t+StrF(f,nv)+" "
EndMacro

Macro ff_d(D,nv=8)
  q_t#D#=q_t+StrD(D,nv)+" "
EndMacro

Macro ff_Q(Q)
  q_t#Q#=q_t+StrQ(Q)+" "
EndMacro

Macro ff_H(H)
  q_t#H#=q_t+Hex(H)+" "
EndMacro

Macro ff_U(U,typ=4)
  q_t#U#=q_t+StrU(U,typ)+" "
EndMacro

Macro nl
  "**"+Str(#PB_Compiler_Line)+"** "
EndMacro
Enumeration
  #f1
  #GadgetImage
EndEnumeration
#WM_MOUSEWHEEL=$20A
#WHEEL_DELTA=120
#text=1
If OpenWindow(#f1,10,10,400,400,"Test sur Souris",#PB_Window_SystemMenu)
  ImageGadget(#GadgetImage,125,125,150,150,0,#PB_Image_Border)
EndIf
Repeat
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  WWE=WaitWindowEvent(0)
  ;WE = WindowEvent(); ne pas mettre cette fonction en service sous risque de dysfonctionnement
  EF=EventWindow()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  EG=EventGadget()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  ET=EventType()
  EM=EventMenu()
  EWP=EventwParam()
  ELP=EventlParam()
  
  Select WWE
    Case #PB_Event_CloseWindow
      End
    Case #WM_LBUTTONDOWN ;"Bouton gauche appuyé")
      ;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
      Gosub SEL_GAD_ENFONCE
    Case #WM_LBUTTONUP ;"Bouton gauche relaché")
      ;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
      Gosub SEL_GAD_RELACHE
    Case #WM_LBUTTONDBLCLK ;"Double clic gauche")
    Case #WM_RBUTTONDOWN ;"Bouton droit appuyé")
    Case #WM_RBUTTONUP ;"Bouton droit relaché")
    Case #WM_RBUTTONDBLCLK ;"Double clic droit")
    Case #WM_MBUTTONDOWN ;"Bouton du milieu appuyé"
    Case #WM_MBUTTONUP ;"Bouton du milieu relaché")
    Case #WM_MBUTTONDBLCLK ;"Double clic du milieu")
    Case #WM_MOUSEMOVE
      M_X=WindowMouseX(#f1)
      M_Y=WindowMouseY(#f1)
      If EG_CLIK>0 And click_g=1
        NG_X=M_X-D_X0
        NG_Y=M_Y-D_Y0
        ImageGadget(EG_CLIK,(NG_X),(NG_Y),150,150,0,#PB_Image_Border) ; permet de déplacer imagegadget
        ;         UpdateWindow_(WindowID(#f1))
      EndIf
    Case #WM_MOUSEWHEEL
      Molette.l=-(EWP>>16)/#WHEEL_DELTA
      If Molette>0 ;"Molette en avant de
      ElseIf Molette<0 ;"Molette en arrière de
      EndIf
    Case #PB_Event_Gadget
      Select ET
        Case #PB_EventType_LeftClick ;"Image : Bouton gauche appuyé"
          Gosub SEL_GAD_ENFONCE
        Case #PB_EventType_LeftDoubleClick ;"Image : Double clic gauche")
        Case #PB_EventType_RightClick ;"Image : Bouton Droit appuyé"
        Case #PB_EventType_RightDoubleClick ;"Image : Double clic droit")
      EndSelect
    Case #PB_Event_Repaint
    Case #PB_Event_CloseWindow:End
  EndSelect
  MWWE=WWE
  ;MWE = WE
  MEF=EF
  MEG=EG
  MET=ET
  MEM=EM
  MEWP=EWP
ForEver

; routine qui s'execute seulement a l'appuis du bouton gauche sur le gadget !!
SEL_GAD_ENFONCE:
Debug "***************** Routine  sur l'appuis du bouton gauche ******************"
G_X=GadgetX(#GadgetImage)
G_Y=GadgetY(#GadgetImage)
M_X=WindowMouseX(#f1)
M_Y=WindowMouseY(#f1)
D_X0=M_X-G_X
D_Y0=M_Y-G_Y
G_larg=GadgetWidth(#GadgetImage)
G_haut=GadgetHeight(#GadgetImage)
click_g=1
EG_CLIK=EG
Return
SEL_GAD_RELACHE:
Debug "***************** routine sur le relachement du bouton gauche ******************"

click_g=0
EG_CLIK=0


Return


Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Evènements souris

Message par falsam »

@papipp : je crois que Lush cherche une solution Cross Platform pour la gestion de la souris.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
lush
Messages : 7
Inscription : mar. 15/févr./2011 16:27

Re: Evènements souris

Message par lush »

@falsam :

Oui, c'est exact. Mais comme certains évènements ne sont pas rapportés via les "gadget events", je pense qu'il va falloir que je me débrouille avec des moyens spécifiques à chaque OS.

@PAPIPP :

Merci, j'ai eu un petit frisson en voyant les GOSUB, mais il y a plein de constantes intéressantes là-dedans (en plus de la méthode de déplacement à la souris).

Y a-t-il un endroit où toutes ces constantes (#WM_*) sont répertoriées ?
Je ne les trouve pas dans le fichier d'aide, et phpBB après avoir viré le # et l'underscore, ne prend pas en compte "WM", ce qui est assez gênant.
Lush
Vista FP, XP SP3, OS X 10.4
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Evènements souris

Message par falsam »

Regarde ce lien que je viens de poster http://www.purebasic.fr/french/viewtopi ... =6&t=11510
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Evènements souris

Message par PAPIPP »

Bonjour lush
Y a-t-il un endroit où toutes ces constantes (#WM_*) sont répertoriées ?
Je ne les trouve pas dans le fichier d'aide, et phpBB après avoir viré le # et l'underscore, ne prend pas en compte "WM", ce qui est assez gênant.
oui SOUS IDE classique de PB en tapant simultanément les touches alt et S ensuite constantes et W
pour les constantes commençant par #W...
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
lush
Messages : 7
Inscription : mar. 15/févr./2011 16:27

Re: Evènements souris

Message par lush »

Merci PAPIPP !

J'avais déjà ouvert le visualisateur de structures, mais j'avais complètement zappé l'onglet Constantes...

D'un coup tout devient un peu plus facile :)
Lush
Vista FP, XP SP3, OS X 10.4
Répondre