Uso della classe DesktopWindow

Da Gambas-it.org - Wikipedia.

La classe DesktopWindow è usata per rappresentare una finestra di primo livello.

In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.


Mostriamo qualche esempio pratico:

Public Sub Form_Open()

 Dim i As Integer[]

' poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:
 Dim dw As DesktopWindow

 i = Desktop.FindWindow("'Nome_della_finestra")

 With dw = New DesktopWindow(i[0])
' Otteniamo informazioni dalla finestra individuata, e la gestiamo:
   Print Hex(.Id), .VisibleName, .Width, .Height
   .Move(100, 200, 100, 300)
 End With
 
End


Se la finestra è il Form principale dell'applicazione, allora il suo Id si individuerà facilmente:

Public Sub Form_Open()

 Dim dw As DesktopWindow

 Me.Show

 With dw = New DesktopWindow(Me.Id)
   Print Hex(.Id), .VisibleName, .Width, .Height
   .Move(100, 200, 100, 300)
 End With

End


E' possibile individuare tutte le finestre aperte sulla Scrivania:

Public Sub Button1_Click()
 
 Dim dw As DesktopWindow

 For Each dw In Desktop.Windows
   Print "Nome finestra: "; Quote(dw.Name), "X = "; Quote(dw.X), "Y = "; Quote(dw.Y)
 Next 

End


La Classe DesktopWindow può rappresentare anche una finestra creata virtualmente con una variabile di tipo "Window":

Public Sub Form_Open()

 Dim dw As DesktopWindow
 Dim w As New Window
 Dim i As Image
 Dim p As Picture
 
 With w
' Assegna un nome di comodo alla finestra (non è indispensabile, e non modificherà il nome visibile in testa alla finestra):
   .Window.Name = "Nome_finestra"
' Se invece si pone solo: .Name senza assegnazione, allora il nome sarà quello della finestra del programma.

' Carica un'immagine, che sarà poi mostrata appresso in dw:
   .Icon = Picture.Load("percorso_immagine")
' Mostra nella "TextLabel" il nome fittizio precedentemente assegnato alla finestra:
   TextLabel1.Text = .Name
 End With
 
 dw = New DesktopWindow(w.Handle) ' "w.Handle" è il numero identificativo dell'handle della finestra
                                  ' rappresentata dalla variabile "w"
 
' invece:
 With dw = New DesktopWindow(Desktop.ActiveWindow) ' "Desktop.ActiveWindow" è la finestra attiva di un programma in quel momento
   Print .Desktop
   Print .FullScreen
' Assegna alla variabile "i" l'icona precedentemente assegnata alla variabile "w":
   i = .Icon
   Print .Height
   Print .Id
   Print .Maximized
   Print .Name
   Print .SkipTaskbar
   Print .VisibleName
 End With

' andiamo a vedere l'eventuale icona della finestra del programma:
 p = i.Picture
 PictureBox1.Picture = p

End


Per assegnare un Form ad uno specifico schermo si userà la Proprietà ".Desktop":

Public Sub Button1_Click()
 
 Dim dw As DesktopWindow
  
 With dw = New DesktopWindow(Me.Id)
' Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):
   .Desktop = 2
 End With
   
End