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

Da Gambas-it.org - Wikipedia.
(Pagina svuotata completamente)
Riga 1: Riga 1:
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[]
 
 
<FONT color=#006400>' ''Individuiamo il PID della "finestra" del programma:''</font>
 
  a = Desktop.FindWindow("''nome_della_finestra_del_programma_da_spostare''")
 
 
  dw = New DesktopWindow(a[0])
 
 
<FONT color=#006400>' ''Impostiamo i valori dello spostamento, ed eventualmente anche il ridimensionamento della finestra:''</font>
 
  dw.<FONT color=#B22222>Move(''valoreX'', ''valoreY'', ''valoreW'', ''valoreY'')</font>
 
 
'''End'''
 
I due parametri relativi al ridimensionamento della finestra sortiscono il loro effetto soltanto se la finestra del programma è ridimensionabile.
 
 
 
===Agire sulla finestra di un programma qualsiasi operando direttamente con il mouse===
 
Poniamo il caso di voler agire sulla finestra di un programma qualsiasi (anche se non quello dell'applicazione.gambas) operando direttamente con il mouse. Bisognerà fare in modo da sollevare con il mouse la finestra, cliccandoci sopra, come attiva principale rispetto a tutte le altre presenti sul desktop; quindi individuarla, ed operare su di essa attraverso una variabile del tipo della Classe ''DesktopWindow''. Utilizzeremo inoltre un ''Timer'' ponendo un ritardo abbastanza basso, e dovremo attivare il componente ''gb.desktop'':
 
'''Public''' Sub Form_Open()
 
 
  Me.Center
 
  Me.show
 
 
  Wait 0.1
 
 
  Timer1.Start
 
 
'''End'''
 
 
 
'''Public''' Sub Timer1_Timer()
 
 
  Dim a As Integer
 
  Dim dw As DesktopWindow
 
 
<FONT color=#006400>' ''Individuiamo l'handle della finestra attiva in primo piano:''</font>
 
  a = Desktop.ActiveWindow
 
 
<FONT color=#006400>' ''Assegnamo la finestra individuata ad una variabile di tipo della Classe "DesktopWindow"...''</font>
 
  dw = Desktop.Windows.FromHandle(a)
 
 
<FONT color=#006400>' ''...quindi la gestiamo:''</font>
 
      With dw
 
<FONT color=#006400>' ''...vedendone il titolo:''</font>
 
    Print  .VisibleName
 
<FONT color=#006400>' ''...e spostandola secondo le coordinate del mouse sullo schermo:''</font>
 
        .Move(Mouse.ScreenX + 10, Mouse.ScreenY)
 
 
<FONT color=#006400>' ''Se cliccheremo su una finestra diversa da quella dell'applicazione principale gambas...''</font>
 
    If  .VisibleName <> Application.Title Then
 
<FONT color=#006400>' ''...allora la nuova finestra cliccata sarà anche chiusa dopo 2 secondi:''</font>
 
    Sleep 2
 
        .Close
 
      End With
 
 
'''End'''
 
 
 
 
==Uso del comando ''xprop'' e di ''DesktopWindow.Move''==
 
Vedremo un possibile uso combinato del comando ''xprop'' e del metodo ''.Move'' della classe ''DesktopWindow'':
 
'''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 
 
 
 
 
 
<FONT color=#006400>' ''Dividiamo la stringa contenente il primo valore esadecimale,''
 
' ''in modo tale da ottenere la seconda parte utile, priva di “0x”:''</font>
 
    x = Split(ss[4], "x")
 
<FONT color=#006400>' ''Dividiamo la stringa contenente il secondo valore esadecimale,''
 
' ''in modo tale da ottenere le ultime due cifre più a destra:''</font>
 
    y = Right(ss[9], 2) 
 
<FONT color=#006400>' ''Individua il valore esadecimale preciso della finestra, lo trasforma in decimale:''</font>
 
    i = Val("&" & x[1]) - Val("&" & y) 
 
 
 
'''End'''
 
 
 
 
 
'''Public''' Sub Button1_Click() 
 
 
 
Dim dw As DesktopWindow 
 
 
 
 
 
  dw = New DesktopWindow(i) 
 
 
 
<FONT color=#006400>' ''Effettua lo spostamento della finestra con il mouse medesimo:''</font>
 
    dw.<FONT color=#B22222>.Move(Mouse.ScreenX + 10, Mouse.ScreenY)</font>
 
 
 
'''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() 
 
     
 
<FONT color=#006400>' ''La finestra del programma, in questo esempio, viene posta in basso al centro dello schermo:''</font>
 
  Shell "wmctrl -r ''nome_della_finestra_del_programma'' -e 0,500,800,600,300"
 
     
 
'''End'''
 
riguardo ai valori inseriti dell'esempio precedente:
 
* 500 = <FONT color=#B22222>coordinate x</font>;
 
* 800 = <FONT color=#B22222>coordinate y</font>;
 
* 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.
 

Versione delle 08:11, 6 gen 2013