Differenze tra le versioni di "Spostare la finestra di un programma all'interno dello schermo"

Da Gambas-it.org - Wikipedia.
Riga 32: Riga 32:
 
  Dim ss, x As New String[]   
 
  Dim ss, x As New String[]   
 
  Dim s, y As String   
 
  Dim s, y As String   
Dim j As Byte 
 
 
    
 
    
  pr = Shell "xprop | grep -i window" For Read   
+
  pr = Shell "xprop | grep '(WINDOW):'" For Read   
 
    
 
    
 
    
 
    
 
   While Not Eof(pr)   
 
   While Not Eof(pr)   
 
     Input #pr, s   
 
     Input #pr, s   
    If s < Chr(40) Then Continue 
 
 
     ss.Add(s)   
 
     ss.Add(s)   
 
   Wend   
 
   Wend   
 
    
 
    
 
+
    
For j = 0 To ss.Max 
+
  <FONT color=#006400>' ''Dividiamo la stringa contenente il primo valore esadecimale,''
   
+
' ''in modo tale da ottenere la seconda parte utile, priva di “0x”:''</font>
   If ss[j] = "_NET_WM_USER_TIME_WINDOW(WINDOW):" Then 
+
     x = Split(ss[4], "x")
  <FONT color=#006400>' ''Dividiamo la stringa in modo tale da ottenere la seconda parte priva della “x”:''</font>
+
  <FONT color=#006400>' ''Dividiamo la stringa contenente il secondo valore esadecimale,''
     x = Split(ss[j + 3], "x")   
+
' ''in modo tale da ottenere le ultime due cifre più a destra:''</font>
     y = Right(ss[j + 7], 2)   
+
     y = Right(ss[9], 2)   
 
  <FONT color=#006400>' ''Individua il valore esadecimale preciso della finestra, lo trasforma in decimale:''</font>
 
  <FONT color=#006400>' ''Individua il valore esadecimale preciso della finestra, lo trasforma in decimale:''</font>
 
     i = Val("&" & x[1]) - Val("&" & y)   
 
     i = Val("&" & x[1]) - Val("&" & y)   
 
   Endif   
 
   Endif   
 
      
 
      
  Next
+
  Next
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 17:21, 5 ott 2012

E' possibile spostare la finestra di un programma qualsiasi all'interno di uno schermo qualsiasi mediante due modalità.


Uso della Classe DesktopWindow

La classe DesktopWindow ci consente di agire con le sole funzioni Gambas. Per poter attivare questa Classe si dovrà innanzitutto impostare nel progetto anche il componente gb.desktop, che ci consentirà l'uso pure di altre funzioni. Si userà in particolare la funzione .Move:

Public Sub Button1_Click()

 Dim dw As DesktopWindow
 Dim a As Integer[]

' Individuiamo il PID della "finestra" del programma:
  a = Desktop.FindWindow("nome_della_finestra_del_programma_da_spostare")

  dw = New DesktopWindow(a[0])

' Impostiamo i valori dello spostamento, ed eventualmente anche il ridimensionamento della finestra:
  dw.Move(valoreX, valoreY, valoreW, valoreY)

End

I due parametri relativi al ridimensionamento della finestra sortiscono il loro effetto soltanto se la finestra del programma è ridimensionabile.


Uso del comando xprop e di DesktopWindow.Move

Vedremo un possibile uso combinato del comando xprop e del metodo .Move della classe DesktopWindow DesktopWindow.Resize:

Private i As Integer


Public Sub Form_Open()  
 
Dim pr As Process  
Dim ss, x As New String[]  
Dim s, y As String  
 
  pr = Shell "xprop | grep '(WINDOW):'" For Read  
  
 
 While Not Eof(pr)  
   Input #pr, s  
   ss.Add(s)  
 Wend  
 
  
' Dividiamo la stringa contenente il primo valore esadecimale,
' in modo tale da ottenere la seconda parte utile, priva di “0x”:
    x = Split(ss[4], "x")
' Dividiamo la stringa contenente il secondo valore esadecimale,
' in modo tale da ottenere le ultime due cifre più a destra:
    y = Right(ss[9], 2)  
' Individua il valore esadecimale preciso della finestra, lo trasforma in decimale:
    i = Val("&" & x[1]) - Val("&" & y)  
  Endif  
    
Next
 
End
 
 
Public Sub Button1_Click()  
 
Dim dw As DesktopWindow  
 
 
  dw = New DesktopWindow(i)  
 
' Effettua lo spostamento della finestra:
   dw.Resize(10, 10) 
 
End

Il puntatore del mouse muterà a forma di crocetta. Si dovrà cliccare una volta sulla finestra interessata. Quindi cliccando successivamente sul Button1, la finestra si sposta alle coordinate X ed Y stabilite. Potrà anche essere previsto il ridimensionamento della finestra ponendo anche i valori relativi a Weigth e Width: .Move(x, y, w, h).


Uso del programma wmctrl con Shell

Si potrà fare anche uso del comando wmctrl lanciato con Shell:

Public Sub Button1_Click()  
     
' La finestra del programma, in questo esempio, viene posta in basso al centro dello schermo:
  Shell "wmctrl -r nome_della_finestra_del_programma -e 0,500,800,600,300"
     
End

riguardo ai valori inseriti dell'esempio precedente:

  • 500 = coordinate x;
  • 800 = coordinate y;
  • 600 = lunghezza della finestra;
  • 300 = altezza della finestra.

Quindi, volendo, è possibile anche far modificare la grandezza della finestra; altrimenti i due ultimi parametri dovrebbero essere posti a -1.