Differenze tra le versioni di "Conoscere le coordinate correnti del mouse sullo schermo"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "==Uso delle sole risorse di Gambas== Per conoscere le coordinate correnti del puntatore del mouse sullo schermo anche al di fuori di un ''Form''/finestra di un programma Gamba...")
 
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
==Uso delle sole risorse di Gambas==
 
==Uso delle sole risorse di Gambas==
Per conoscere le coordinate correnti del puntatore del mouse sullo schermo anche al di fuori di un ''Form''/finestra di un programma Gambas, è possibile utilizzare le Proprietà ".ScreenX" e ".ScreenY" della Classe ''Mouse''.
+
Per conoscere le coordinate correnti del puntatore del mouse sullo schermo anche al di fuori di un ''Form''/finestra di un programma Gambas, è possibile utilizzare le Proprietà ".ScreenX" e ".ScreenY" della Classe ''Mouse''. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
 
===Usando l'Oggetto ''Timer''===
 
===Usando l'Oggetto ''Timer''===
Riga 40: Riga 40:
  
  
==Intercettando i dati grezzi letti dal file-device del mouse==
+
==Ponendo in osservazione il file-device del Mouse==
Un'altra modalità può essere intercettando i dati grezzi letti dal file-device del mouse "''/dev/input/mouse0'' " (al quale andrà eliminata preliminarmente la protezione per poter essere utilizzato).
+
Per porre in "osservazione" un file-device del Mouse, è necessario eliminare la protezione di sistema impostata.
<BR>Si rinvia a questo paragrafo della Wiki:
+
<BR>Esempio pratico, ponendo in osservazione il file-device "/dev/input/mouse0":
<BR>https://www.gambas-it.org/wiki/index.php/Intercettare_i_dati_del_mouse_dai_file-device_mouse,_mice,_event#...un.27applicazione_pratica
+
Private fl As File
 +
 +
 +
Public Sub Form_Open()
 +
 +
<FONT Color=gray>' ''Provvede a eliminare la protezione del file-device del mouse prescelto:''</font>
 +
  Dim pw As String
 +
  pw = InputBox("Immettere la propria password di sistema...")
 +
  Shell "echo " & pw & " | sudo -S chmod 444 /dev/input/mouse0" Wait
 +
 +
  <FONT Color=gray>' ''Apre il file-device "/dev/input/mouse0" e lo pone in "osservazione":''</font>
 +
  fl = Open "/dev/input/mouse0" For Read Watch
 +
 +
End
 +
 +
 +
Public Sub File_Read()
 +
 +
  Label1.Text = Mouse.ScreenX & "  " & Mouse.ScreenY
 +
 +
End
  
  
Riga 118: Riga 138:
 
    
 
    
 
  End
 
  End
 +
 +
 +
 +
=Note=
 +
[1] Vedere anche le seguenti pagine:
 +
* [[Conoscere le coordinate correnti del mouse sul Form senza tenere premuto un tasto del mouse]]
 +
* [[Sollevare l'Evento MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]]

Versione attuale delle 23:31, 27 nov 2023

Uso delle sole risorse di Gambas

Per conoscere le coordinate correnti del puntatore del mouse sullo schermo anche al di fuori di un Form/finestra di un programma Gambas, è possibile utilizzare le Proprietà ".ScreenX" e ".ScreenY" della Classe Mouse. [nota 1]

Usando l'Oggetto Timer

Mostriamo un esempio con l'aiuto della Classe Timer:

Private tm As Timer


Public Sub Form_Open()
 
 With tm = New Timer As "Tempus"
   .Delay = 50
   .Start
 End With
  
End

Public Sub Tempus_Timer()

' Mostra i risultati nella parte alta (intestazione) del bordo del "Form" principale:
 Me.Text = "X = " & CStr(Mouse.ScreenX) & "   Y = " & CStr(Mouse.ScreenY)

End

Usando un ciclo

In quest'altro esempio si utilizzerà un ciclo infinito:

Public Sub Form_Open()
 
' Consente l'apertura del "Form":
 Me.Show()

 Do
' Mostra i risultati nella parte alta (intestazione) del bordo del "Form" principale:
   Me.Text = "X = " & CStr(Mouse.ScreenX) & "   Y = " & CStr(Mouse.ScreenY)
' Il "Wait" consente un risparmio delle risorse di sistema e di poter agire su eventuali Oggetti grafici posti sul "Form":
   Wait 0.1
 Loop

End


Ponendo in osservazione il file-device del Mouse

Per porre in "osservazione" un file-device del Mouse, è necessario eliminare la protezione di sistema impostata.
Esempio pratico, ponendo in osservazione il file-device "/dev/input/mouse0":

Private fl As File


Public Sub Form_Open()

' Provvede a eliminare la protezione del file-device del mouse prescelto:
 Dim pw As String
 pw = InputBox("Immettere la propria password di sistema...")
 Shell "echo " & pw & " | sudo -S chmod 444 /dev/input/mouse0" Wait

 ' Apre il file-device "/dev/input/mouse0" e lo pone in "osservazione":
 fl = Open "/dev/input/mouse0" For Read Watch

End


Public Sub File_Read()

 Label1.Text = Mouse.ScreenX & "   " & Mouse.ScreenY

End


Uso delle funzioni esterne del API di X11

E' possibile utilizzare anche alcune funzioni esterne del API del sistema X11.

Mostriamo di seguito un esempio pratico:

Private tempus As Timer
Private dsp As Pointer
Private win As Integer


Library "libX11:6.4.0"

' Display *XOpenDisplay(char *display_name)
' Opens a connection to the X server that controls a display.
Private Extern XOpenDisplay(display_name As Pointer) As Pointer

' int XDefaultScreen (Display *display)
' returns the default screen number referenced by the XOpenDisplay function.
Private Extern XDefaultScreen(display As Pointer) As Integer

' Window XRootWindow(Display *display, int screen_number)
' Returns the root window.
Private Extern XRootWindow(display As Pointer, screen_number As Integer) As Integer

' Bool XQueryPointer(Display *display, Window w, Window *root_return, Window *child_return, int *root_x_return, int *root_y_return, int *win_x_return, int *win_y_return, unsigned int *mask_return)
' Returns the root window the pointer is logically on and the pointer coordinates relative to the root window's origin.
Private Extern XQueryPointer(display As Pointer, w As Integer, root_return As Pointer, child_return As Pointer, root_x_return As Pointer, root_y_return As Pointer, win_x_return As Pointer, win_y_return As Pointer, mask_return As Pointer) As Boolean

' int XUngrabServer(Display *display)
' Restarts processing of requests and close downs on other connections.
Private Extern XUngrabServer(display As Pointer) As Integer

' int XCloseDisplay(Display *display)
' Closes the connection to the X server for the display specified in the Display structure and destroys all windows.
Private Extern XCloseDisplay(display As Pointer) As Integer


Public Sub Main()
 
 Dim scr As Integer
 
 dsp = XOpenDisplay(0)
 If dsp == 0 Then Error.Raise("Impossibile connettersi al server X !")
 
 scr = XDefaultScreen(dsp)
 win = XRootWindow(dsp, scr)
  
 With tempus = New Timer As "Tempus"
   .Delay = 100
   .Start
 End With

End

Public Sub Tempus_Timer()
 
 Dim rr, cr, x, y, xr, yr, mr As Integer
  
 XQueryPointer(dsp, win, VarPtr(rr), VarPtr(cr), VarPtr(x), VarPtr(y), VarPtr(xr), VarPtr(yr), VarPtr(mr))
  
' Mostra le coordinate x, y attuali del puntatore del mouse sullo schermo:
 Print x, y
 
End
 
Public Sub Application_Read()   ' Se si preme il tasto "Invio" della tastiera, viene chiuso il programma

 tempus.Stop
 XUngrabServer(dsp)
 XCloseDisplay(dsp)
 Quit
 
End


Note

[1] Vedere anche le seguenti pagine: