EventMouse (Tentative d'une solution Cross Platform)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

EventMouse (Tentative d'une solution Cross Platform)

Message par falsam »

Je ne pense pas me tromper en disant qu'il n'y a pas encore de solution simple pour détecter la souris dans le cadre d'une application Cross-Platform (Windows, Linux, Mac). En attendant une vrai fonction EventMouse intégrée à Pure Basic, vous trouverez le code d'une procédure qui fonctionne pour le moment sous Windows et Linux (Unbutu).

J'ai besoin de vous pour pour tester cette procédure dans les différentes distributions de Linux et j'aimerais aussi que ceux qui connaissent l'APIs Mac complètent cette procédure et pourquoi pas aussi d'autres environnements.

Merci d'avance à tous ceux qui participeront à l'élaboration de cette procédure :)

Code : Tout sélectionner

Procedure EventMouse()
  Protected wnd.i
  If GetActiveWindow()<>-1
    Wnd=WindowID(GetActiveWindow())
  
    CompilerIf #PB_Compiler_OS = #PB_OS_Linux
      Protected gdkWnd.l, x.l, y.l, mask.l
      *Window.GTKWindow = Wnd
      gdkWnd = *Window\bin\child\window
      gdk_window_get_pointer_(gdkWnd, @x, @y, @mask)
      
      If (mask & #GDK_BUTTON1_MASK)
        ProcedureReturn 1   
      ElseIf (mask & #GDK_BUTTON3_MASK)
       ProcedureReturn 3
      ElseIf (mask & #GDK_BUTTON2_MASK)
        ProcedureReturn 2
      EndIf  
    CompilerEndIf
      
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
          ProcedureReturn Abs(GetAsyncKeyState_(#VK_LBUTTON) + GetAsyncKeyState_(#VK_RBUTTON)*2 + GetAsyncKeyState_(#VK_MBUTTON)*3)/$8000   
    CompilerEndIf
    
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
     ;
     ;
    CompilerEndIf  
  EndIf
  Delay(500)
EndProcedure


;----- Test---------------
OpenWindow(0, 100, 100, 300, 300, "EventMouse")
TextGadget(1,20,10,200,20,"Teste Mouse Event")
Repeat
  Event = WaitWindowEvent()
  EventMouse=EventMouse() 
  
  Select EventMouse()
    Case 0 : SetGadgetText(1,"Bouton relaché")
    Case 1 : SetGadgetText(1,"Bouton Gauche de la souris")
    Case 2 : SetGadgetText(1,"Bouton Droit de la souris")
    Case 3 : SetGadgetText(1,"Bouton Milieu de la souris")
  EndSelect
  
  Select Event
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
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: EventMouse (Tentative d'une solution Cross Platform)

Message par lush »

Cool !

J'avais bookmarké ce post pour Mac.

Si je comprends bien, c'est fait avec un callback, donc pas de polling comme ta procédure, mais il y a au moins les constantes (pas tous les boutons, hélas) et la librairie (enfin, la fonction dans Carbon) à récupérer. Je ne peux pas faire de tests dans l'immédiat sur Mac malheureusement...

Par contre j'ai vu un post de GallyHC qui cherchait la même chose sur Mac en 2009, je crois... peut-être qu'il a trouvé depuis ? :)
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: EventMouse (Tentative d'une solution Cross Platform)

Message par falsam »

Ca ne se fait pas de relancer un post (Désolé Dobro) mais j'aimerais bien qu'un spécialiste des API Mac complète ce code de manière a avoir un système EventMouse fonctionnel sur 3 des principales plateformes (Linux, Mac, Windows)

De même si certains d'entres vous, pouvez faire des tests. MerciiiiIIIII Beaucoup :)
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%
Répondre