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

Da Gambas-it.org - Wikipedia.
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.
+
Solitamente la finestra del ''MessageBox'' si mostra centrata rispetto alla scrivania.
 +
<BR>E' possibile decidere in quale punto della Scrivania far apparire la finestra del ''MessageBox'', impostando le sue coordinate.
 +
<BR>Per fare ciò, bisognerà individuare il numero identificativo della sua finestra attraverso la Proprietà ".ActiveWindow" della Classe statica ''Desktop'', e successivamente utilizzare il Metodo ".Move()" della Classe "DesktopWindow".
 +
<BR>A tal fine è necessario che il ''MessageBox'' abbia un titolo della propria finestra (e ciò si imposterà con la Proprietà ".Title"), e che siano attivati anche i Componenti "gb.desktop" e "gb.desktop.x11".
  
Bisogna premettere che anche le finestrine di un qualunque ''MessageBox'' sono normali finestre, e che, pertanto, anch'esse posseggono un proprio ID.
+
Mostriamo un esempio pratico:
 
+
Private Timer1 As Timer
Dagli esperimenti attualmente compiuti, è risultato che un ''MessageBox'' <SPAN style="text-decoration:underline">in talune circostanze</span> - 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.
+
'''Public''' Sub Button1_Click()>
 
+
Prenderemo in considerazione, dunque, solo il caso di ''MessageBox'' che possono essere spostati e/o ridimensionati. Essi solitamente sono ''MessageBox'' generati da programmi esterni.
+
  With Timer1 = New Timer As "Timer1"
 
+
    .Delay = 100
Faremo uso delle risorse dei Componenti "gb.desktop" e "gb.desktop.x11".
+
    .Start
<BR>In modo particolare si potrà spostare e/o ridimensionare oppure chiudere la finestra del ''MessageBox'', appartenente ad un altro programma.
+
  End With
 
+
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.
+
  With Message
<BR>Tale codice dovrà essere lanciato soltanto "dopo" l'apertura del "MessageBox" dell'altro programma.
+
    .Title = "Titolo del MessageBox"
  '''Public''' Sub Button1_Click() 
+
    .Info("Testo qualsiasi")
 
+
  End With
 +
 +
'''End'''
 +
 +
'''Public''' Sub Timer1_Timer()
 +
 +
<FONT Color=gray>' ''Il "Timer" consente di verificare l'attuale finestra "attiva" e posta al di sopra delle altre.''
 +
  ' ''Quando sarà stato aperto il "MessageBox", il Metodo "Desktop.ActiveWindow" ne individuerà la finestra e quindi il suo ID:''</font>
 
   Dim dw As DesktopWindow
 
   Dim dw As DesktopWindow
  Dim i As Integer
 
 
   
 
   
   For Each dw In Desktop.Windows
+
   With dw = New DesktopWindow(Desktop.ActiveWindow)
  <FONT color=gray>' ''Individua la finestra del "MessageBox" dal suo "nome visibile":''</font>
+
  <FONT Color=gray>' ''Evita che il successivo Metodo ".Move()" venga applicato anche alle altre finestre:''</font>  
     If dw.VisibleName = "<FONT color=gray>'''''nome_visibile_della_finestra_del_MessageBox'''''</font>" Then
+
     If .VisibleName <> "Titolo del MessageBox" Then Return
  <FONT color=gray>' ''Quindi gestisce la finestra del "MessageBox":''</font>
+
  <FONT Color=gray>' ''Applica dunque il Metodo ".Move()" alla sola finestra del "MessageBox":''</font>  
      .Move('''''x''''', '''''y''''', ''w'', ''h'')
+
    <FONT Color=#B22222>.Move</font>(Screen.AvailableWidth * 0.8, Screen.AvailableHeight * 0.2)
<FONT color=gray>' ''...ma si potranno ovviamente anche usare:''
+
     Timer1.Stop
    ' .Resize(''w'', ''h'')
+
   End With
     ' .Close</font>
+
    Endif
 
   Next
 
 
 
 
  '''End'''
 
  '''End'''

Versione delle 20:37, 29 dic 2021

Solitamente la finestra del MessageBox si mostra centrata rispetto alla scrivania.
E' possibile decidere in quale punto della Scrivania far apparire la finestra del MessageBox, impostando le sue coordinate.
Per fare ciò, bisognerà individuare il numero identificativo della sua finestra attraverso la Proprietà ".ActiveWindow" della Classe statica Desktop, e successivamente utilizzare il Metodo ".Move()" della Classe "DesktopWindow".
A tal fine è necessario che il MessageBox abbia un titolo della propria finestra (e ciò si imposterà con la Proprietà ".Title"), e che siano attivati anche i Componenti "gb.desktop" e "gb.desktop.x11".

Mostriamo un esempio pratico:

Private Timer1 As Timer


Public Sub Button1_Click()> 

 With Timer1 = New Timer As "Timer1"
   .Delay = 100
   .Start
 End With

 With Message
   .Title = "Titolo del MessageBox"
   .Info("Testo qualsiasi")
 End With

End

Public Sub Timer1_Timer()

' Il "Timer" consente di verificare l'attuale finestra "attiva" e posta al di sopra delle altre.
' Quando sarà stato aperto il "MessageBox", il Metodo "Desktop.ActiveWindow" ne individuerà la finestra e quindi il suo ID:
 Dim dw As DesktopWindow

 With dw = New DesktopWindow(Desktop.ActiveWindow)
' Evita che il successivo Metodo ".Move()" venga applicato anche alle altre finestre: 
   If .VisibleName <> "Titolo del MessageBox" Then Return
' Applica dunque il Metodo ".Move()" alla sola finestra del "MessageBox": 
   .Move(Screen.AvailableWidth * 0.8, Screen.AvailableHeight * 0.2)
   Timer1.Stop
 End With

End