Spostare o ridimensionare una finestra di un MessageBox
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