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

Da Gambas-it.org - Wikipedia.
Riga 7: Riga 7:
 
E', invece, risultato possibile ''chiudere'' con il codice Gambas una finestra di un ''MessageBox'' comunque generato.
 
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''.
+
Prenderemo in considerazione, dunque, solo il caso di ''MessageBox'' che possono essere spostati e/o ridimensionati. Essi solitamente sono ''MessageBox'' generati da programmi esterni.
  
==Uso delle sole funzioni di Gambas==
+
Faremo uso delle risorse dei Componenti "gb.desktop" e "gb.desktop.x11".
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:
+
<BR>In modo particolare si potrà spostare e/o ridimensionare oppure chiudere la finestra del ''MessageBox'', appartenente ad un altro programma.
 +
 
 +
In questo esempio si farà in modo da filtrare le finestre eventualmente aperte, prendendo in considerazione soltanto quella del "MessageBox", purché tale finestra abbia un nome visibile (solitamente sul bordo in alto). Ciò significa che bisognerà nel seguente codice bisognerà impostare il nome visibile della finestrina del "MessageBox" da gestire.
 +
<BR>Tale codice dovrà essere lanciato soltanto "dopo" l'apertura del "MessageBox" dell'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
 
<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>
 
    i = .Windows[Desktop.Windows.Count - 1].Id
 
  End With 
 
 
  dw = New DesktopWindow(i) 
 
 
  With dw 
 
    .Move(''x'', ''y'', ''w'', ''h'')
 
<FONT color=gray>' ''...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, 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 
 
<FONT color=gray>' ''Individua il valore decimale della finestra del "MessageBox":''</font>
 
    If Eof(pr) Then i = CInt(s) 
 
  Wend 
 
 
'''End'''
 
 
   
 
   
  '''Public''' Sub Button1_Click() 
+
  For Each dw In Desktop.Windows
 
+
  <FONT color=gray>' ''Individua la finestra del "MessageBox" dal suo "nome visibile":''</font>
  Dim dw As DesktopWindow 
+
    If dw.VisibleName = "<FONT color=gray>'''''nome_visibile_della_finestra_del_MessageBox'''''</font>" Then
 
+
  <FONT color=gray>' ''Quindi gestisce la finestra del "MessageBox":''</font>
  dw = New DesktopWindow(i) 
+
      .Move('''''x''''', '''''y''''', ''w'', ''h'')
 
+
  <FONT color=gray>' ''...ma si potranno ovviamente anche usare:''
  With dw  
+
    ' .Resize(''w'', ''h'')   
    .Move(''x'', ''y'', ''w'', ''h'')
+
    ' .Close</font>
  <FONT color=gray>' ''...ma si potranno anche usare:''
+
    Endif
  ' .Resize(''w'', ''h'')   
+
   Next
  ' .Close</font>
 
   End With
 
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 18:50, 26 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.

Faremo uso delle risorse dei Componenti "gb.desktop" e "gb.desktop.x11".
In modo particolare si potrà spostare e/o ridimensionare oppure chiudere la finestra del MessageBox, appartenente ad un altro programma.

In questo esempio si farà in modo da filtrare le finestre eventualmente aperte, prendendo in considerazione soltanto quella del "MessageBox", purché tale finestra abbia un nome visibile (solitamente sul bordo in alto). Ciò significa che bisognerà nel seguente codice bisognerà impostare il nome visibile della finestrina del "MessageBox" da gestire.
Tale codice dovrà essere lanciato soltanto "dopo" l'apertura del "MessageBox" dell'altro programma.

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

 For Each dw In Desktop.Windows
' Individua la finestra del "MessageBox" dal suo "nome visibile":
   If dw.VisibleName = "nome_visibile_della_finestra_del_MessageBox" Then
' Quindi gestisce la finestra del "MessageBox":
     .Move(x, y, w, h)
' ...ma si potranno ovviamente anche usare:
   ' .Resize(w, h)  
   ' .Close
   Endif
 Next
 
End