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

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
  
 
==Uso delle sole funzioni di Gambas==
 
==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''.
+
Faremo uso della Classe ''DesktopWindow'' e dei suoi metodi: potremo in modo particolare spostare e/o ridimensionare oppure chiudere la finestra del ''MessageBox'', appartenente ad un altro programma:
 
  '''Public''' Sub Button1_Click()   
 
  '''Public''' Sub Button1_Click()   
 
    
 
    
 
   Dim dw As DesktopWindow   
 
   Dim dw As DesktopWindow   
 
   Dim i As Integer   
 
   Dim i As Integer   
    
+
  With Desktop
+
   With Desktop
  <FONT color=#006400>' ''Per individuare l'ID della finestra del "MessageBox",''
+
  <FONT color=gray>' ''Per individuare l'ID della finestra del "MessageBox", si farà riferimento al fatto che essa è stata l'ultima finestra apparsa sul desktop:''</font>
' ''si farà riferimeno al fatto che essa è stata l'ultima finestra apparsa sul desktop:''</font>
+
    i = .Windows[Desktop.Windows.Count - 1].Id
    i = .Windows[Desktop.Windows.Count - 1].Id
+
  End With
  End With   
+
   
    
+
   dw = New DesktopWindow(i)
  dw = New DesktopWindow(i)   
+
   
    
+
   With dw   
  With dw   
+
    .Move(''x'', ''y'', ''w'', ''h'')
    .Move(''x'', ''y'', ''w'', ''h'')
+
  <FONT color=gray>' ''...ma si potranno anche usare:''
  <FONT color=#006400>' ''...ma si potranno anche usare:''
+
  ' .Resize(''w'', ''h'')   
  ' .Resize(''w'', ''h'')   
+
  ' .Close</font>
  ' .Close</font>
+
  End With   
  End With   
 
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  
 
==Uso del comando ''xprop''==
 
==Uso del comando ''xprop''==
 
Si potrà anche usare il comando bash "''xprop''" per individuare, in particolare, l'ID della finestra del "MessageBox":
 
Si potrà anche usare il comando bash "''xprop''" per individuare, in particolare, l'ID della finestra del "MessageBox":
  '''Private''' i As Integer
+
  Private i As Integer
 
   
 
   
 
   
 
   
Riga 49: Riga 47:
 
   While Not Eof(pr)       
 
   While Not Eof(pr)       
 
     Input #pr, s   
 
     Input #pr, s   
  <FONT color=#006400>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
+
  <FONT color=gray>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
 
     If Eof(pr) Then i = CInt(s)   
 
     If Eof(pr) Then i = CInt(s)   
 
   Wend   
 
   Wend   
 
+
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button1_Click()   
 
  '''Public''' Sub Button1_Click()   
 
    
 
    
 
   Dim dw As DesktopWindow   
 
   Dim dw As DesktopWindow   
 
 
 
    
 
    
 
   dw = New DesktopWindow(i)   
 
   dw = New DesktopWindow(i)   
 
    
 
    
  With dw   
+
  With dw   
    .Move(''x'', ''y'', ''w'', ''h'')
+
    .Move(''x'', ''y'', ''w'', ''h'')
  <FONT color=#006400>' ''...ma si potranno anche usare:''
+
  <FONT color=gray>' ''...ma si potranno anche usare:''
  ' .Resize(''w'', ''h'')   
+
  ' .Resize(''w'', ''h'')   
  ' .Close</font>
+
  ' .Close</font>
  End With
+
   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>' ''Si individua l'ID della finestra del "MessageBox":''</font>
 
      i = .Windows[Desktop.Windows.Count - 1].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'''
 
  '''End'''

Versione delle 23:33, 25 dic 2021

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.

Bisogna premettere che anche le finestrine di un qualunque MessageBox sono normali finestre, e che, pertanto, anch'esse posseggono un proprio ID.

Dagli esperimenti attualmente compiuti, è risultato che un MessageBox in talune circostanze - probabilmente legate al tipo di ambiente desktop grafico e/o al tema - non può essere spostato né ridimensionato. 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 che possono essere spostati e/o ridimensionati. Essi solitamente sono MessageBox generati da programmi esterni. Per ridimensionare e spostare le finestre di tali MessageBox, si potranno adoperare sia funzioni di Gambas che 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, appartenente ad un altro programma:

Public Sub Button1_Click()  
 
 Dim dw As DesktopWindow  
 Dim i As Integer  

 With Desktop
' Per individuare l'ID della finestra del "MessageBox", si farà riferimento al fatto che essa è stata l'ultima finestra apparsa sul desktop:
   i = .Windows[Desktop.Windows.Count - 1].Id
 End With  

 dw = New DesktopWindow(i)  

 With dw  
   .Move(x, y, w, h)
' ...ma si potranno anche usare:
 ' .Resize(w, h)  
 ' .Close
 End With  
 
End


Uso del comando xprop

Si potrà anche usare il comando bash "xprop" per individuare, in particolare, l'ID 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  
' Individua il valore decimale della finestra del "MessageBox":
   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)
' ...ma si potranno anche usare:
 ' .Resize(w, h)  
 ' .Close
 End With
 
End