Differenze tra le versioni di "Spostare o ridimensionare una finestra di un MessageBox"

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Prenderemo in considerazione sia il caso di un ''MessageBox'' generato dal codice di un programma Gambas (come ad esempio un ''Message.Info()'' ), sia il caso di quello generato da un programma esterno.
+
#REDIRECT [[Spostare_la_finestra_di_un_MessageBox]]
 
 
Bisogna premettere che anche le finestrine di un qualunque ''MessageBox'' sono normali finestre, e che, pertanto, anch'esse posseggono un proprio PID.
 
 
 
Dagli esperimenti attualmente compiuti, è risultato che un ''MessageBox'' in talune circostanze - probabilmente legate al tipo di ambiente desktop grafico e/o al tema - <SPAN style="text-decoration:underline">non</span> può essere spostato. In altri casi, quando il ''MessageBox'' viene generato dal codice Gambas, esso può essere spostato solo insieme con la finestra del programma ''padre''.
 
 
 
E', invece, risultato possibile ''chiudere'' con il codice Gambas una finestra di un ''MessageBox'' comunque generato.
 
 
 
Prenderemo in considerazione, dunque, solo il caso di ''MessageBox'' generati da programmi esterni. Per ridimensionare e spostare tali finestrine, si potranno adoperare sia funzioni di Gambas, sia comandi ''bash''.
 
 
 
==Uso delle sole funzioni di Gambas==
 
Faremo uso della Classe ''DesktopWindow'' e dei suoi metodi: potremo in modo particolare spostare e/o ridimensionare oppure chiudere la finestra del ''MessageBox''.
 
 
 
 
 
'''Public''' Sub Button1_Click() 
 
 
 
  Dim dw As DesktopWindow 
 
  Dim i As Integer 
 
 
 
  With Desktop
 
<FONT color=#006400>' ''Si porrà il numero di "indice" della finestra del "MessageBox",''
 
' ''per poter individuare il suo PID:''</font>
 
    i = .Windows[''num_index''].Id 
 
  End With 
 
 
 
  dw = New DesktopWindow(i) 
 
 
 
  With dw 
 
    .Move(''x'', ''y'', ''w'', ''h'')
 
<FONT color=#006400>' ''...ma si potranno anche usare:''
 
  ' .Resize(''w'', ''h'') 
 
  ' .Close</font>
 
  End With 
 
 
 
'''End'''
 
 
 
 
 
 
 
==Uso del comando ''xprop''==
 
Si potrà anche usare il comando bash "''xprop''" per individuare, in particolare, il PID della finestra del "MessageBox":
 
'''Private''' i As Integer
 
 
 
'''Public''' Sub Form_Open()   
 
 
 
  Dim pr As Process   
 
  Dim s As String 
 
 
 
  pr = Shell "xprop | grep XKLAVIER_STATE" For Read 
 
 
 
  While Not Eof(pr)     
 
    Input #pr, s 
 
<FONT color=#006400>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
 
    If Eof(pr) Then i = CInt(s) 
 
  Wend 
 
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click() 
 
 
 
  Dim dw As DesktopWindow 
 
 
 
 
 
  dw = New DesktopWindow(i) 
 
 
 
  With dw 
 
    .Move(''x'', ''y'', ''w'', ''h'')
 
<FONT color=#006400>' ''...ma si potranno anche usare:''
 
  ' .Resize(''w'', ''h'') 
 
  ' .Close</font>
 
  End With
 
 
 
'''End'''
 
 
 
 
 
 
 
==Spostare il MessageBox mediante ''Embedder''==
 
Un ''MessageBox'', come qualsiasi altra finestra, potrà essere inglobato nell'oggetto ''Embedder''.
 
 
 
Questa soluzione, dalle prove effettuate, consente, fra l'altro, di rinchiudere altrove un ''MessageBox'', qualora non sia possibile spostarlo (come si è detto all'inizio).
 
 
 
In buona sostanza, dunque, otterremo lo spostamento del ''MessageBox'' inglobandolo all'interno dell'oggetto ''Embedder'', che sarà stato posto nel Form del nostro programma.
 
 
 
===Uso della Classe ''Desktop''===
 
Si potrà usare la Classe ''Desktop'', attivando il componente ''gb.desktop''. Ovviamente, si inserirà un oggetto ''Embedder'' sul Form dell'applicativo:
 
'''Public''' Sub Button1_Click() 
 
     
 
  Dim i As Integer 
 
     
 
    With Desktop 
 
<FONT color=#006400>' ''Qui va inserito il numero dell'indice della finestra del "MessageBox":''</font>
 
      i = .Windows[''num_index''].Id 
 
    End With 
 
     
 
      <FONT color=#B22222>Embedder1.Embed(i)</font> 
 
     
 
'''End  '''
 
 
 
 
 
===Uso del comando ''xprop''===
 
Se si intende individuare ''manualmente'' la finestra del ''MessageBox'' da inglobare, si utilizzerà il comando ''xprop''. Anche in questo caso, ovviamente, si inserirà un oggetto ''Embedder'' sul Form dell'applicativo:
 
'''Private''' i As Integer     
 
   
 
   
 
'''Public''' Sub Form_Open()     
 
   
 
  Dim pr As Process     
 
  Dim s As String   
 
   
 
  pr = Shell "xprop | grep XKLAVIER_STATE" For Read   
 
 
 
  While Not Eof(pr)       
 
    Input #pr, s   
 
<FONT color=#006400>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
 
    If Eof(pr) Then i = CInt(s)   
 
  Wend   
 
 
 
'''End'''
 
 
 
 
 
'''Public''' Sub Button1_Click() 
 
 
 
    <FONT color=#B22222>Embedder1.Embed(i)</font>
 
 
 
'''End'''
 

Versione attuale delle 20:41, 29 dic 2021