Porre la finestra di un programma esterno in primo piano
Per porre in primo piano la finestra di un programma esterno, ossia diverso dal nostro programma Gambas principale, è possibile adottare almeno due soluzioni.
Uso della proprietà .ActiveWindow della Classe Desktop
Di seguito un esempio di codice che utilizza la proprietà .ActiveWindow della Classe Desktop, supponendo che si conosca il numero identificativo della finestra del programma da porre in primo piano.
E' necessario attivare il Componente "gb.desktop".
Public Sub Button1_Click() Desktop.ActiveWindow = numero_identificativo_della_finestra End
Uso del metodo .Activate() della Classe DesktopWindow
Di seguito un esempio di codice che utilizza il metodo .Activate() della Classe DesktopWindow, supponendo anche in questo caso che si conosca il numero identificativo della finestra del programma da porre in primo piano.
In quest'altro caso è necessario attivare il Componente "gb.desktop.x11".
Private dw As DesktopWindow Public Sub Button1_Click() With dw = New DesktopWindow(numero_identificativo_della_finestra) .Activate() End With End
Mantenere la finestra del proprio programma sempre attiva e sopra tutte le altre finestre
Per mantenere la finestra del proprio programma sempre attiva e sopra tutte le finestre di altri eventuali programmi aperti, si può assegnare alla Proprietà ".Stacking" dell'Oggetto "Form" del programma il valore costante 1 ("Window.Above").
Anche usando tale Proprietà, però la finestra del proprio programma perde il focus, se viene aperta la finestra di un altro qualsiasi programma. Pertanto si dovrà provvedere a far riassegnare il focus al "Form" del programma, rilevando la perdita del focus con lo specifico Evento "_LostFocus()".
Mostriamo un esempio:
Public Sub Form_Activate() ' Impone la posizione del proprio "Form" al di sopra di tutte le altre finestre: Me.Stacking = Window.Above End Public Sub Form_LostFocus() ' Se la finestra del programma perde il focus, viene sollevato questo Evento ' Riattiva il proprio "Form" garantendogli anche il focus: Desktop.ActiveWindow = Me.Id End