|
|
(16 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, un ''MessageBox'' può essere spostato individualmente solo se <SPAN style="text-decoration:underline">non</span> è generato dal codice del nostro applicativo Gambas. Se per esempio creiamo un programmino che compie un errore - ad esempio una divisione per zero -, quando la procedura incontra tale richiesta di divisione, essa solleverà un errore facendo apparire un ''MessageBox''. In questo caso sarà possibile effettuare lo spostamento.
| |
− | | |
− | Se un programma Gambas prevede che venga mostrato ad esempio un ''Message.Info'', sarà impossibile spostare tale ''MessageBox'' o modificarne le dimensioni.
| |
− | | |
− | Sarà, invece, possibile ''chiudere'' con il codice Gambas anche una finestra di un ''MessageBox'', sia se generato dal codice da un applicativo Gambas, sia
| |
− | | |
− | | |
− | 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, che se non è possibile spostare un particolare ''MessageBox'' (come abbiamo visto nei paragrafi precedenti), allora lo si può rinchiudere.
| |
− | | |
− | In buona sostanza, dunque, otterremo lo spostamento del ''MessageBox'' inglobandolo all'interno dell'oggetto ''Embedder'', che sarà stato posto all'interno del nostro programmino.
| |
− | | |
− | ===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'''
| |