Versteckspiele
Die ShowInTaskbar-Eigenschaft eines Form zur Laufzeit setzen
Die ShowInTaskbar-Eigenschaft zählt zu den Eigenschaften eines Formular, die Sie nur zur Design-Zeit festlegen können. Dennoch können Sie auch zur Laufzeit festlegen, ob ein Formular in der Taskleiste angezeigt werden soll, oder nicht..
Einige Eigenschaften von Formularen können Sie nur zur Design-Zeit in der IDE festlegen. Dazu gehört auch die ShowInTaskbar-Eigenschaft – man kann Sie zur Laufzeit abfragen, aber nicht setzen. Kann man doch! Zumindest wenn man direkt das Windows API bemüht.
In der Taskleiste werden generell alle Fenster angezeigt, die den erweiterten Fensterstil WS_EX_APPWINDOW besitzen. Die gesetzten Fensterstile können über die API Funktion GetWindowLong abgefragt werden. Hier kann man jetzt den Fensterstil WS_EX_APPWINDOW hinzufügen oder entfernen, je nachdem, ob die Anwendung in der Taskleiste angezeigt werden soll, oder nicht. Die neuen Fensterstile werden über die API Funktion SetWindowLong gesetzt. Damit diese Aktualisierung auch bei der Taskleiste ankommt, muss das Formular vor Setzen dieses Stils ausgeblendet werden. Sobald der neue Fensterstil gesetzt ist, kann das Formular wieder eingeblendet werden.
Für eine einfache Anwendung, werden alle API Aufrufe in zwei Property-Prozeduren "ShowInTaskBarRT" verpackt. Beide erwarten das entsprechende Form als Parameter. So kann der aktuelle Taskleisten-Status des Form gelesen und gesetzt werden, fast so als wären es Eigenschaften des Form:
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long _
) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long _
) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_APPWINDOW = &H40000
Private Declare Function ShowWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long _
) As Long
Private Const SW_HIDE = 0
Private Const SW_SHOW = 5
Public Property Get ShowInTaskbarRT(ByRef Form As Form) As Boolean
Dim lExStyle As Long
lExStyle = GetWindowLong(Form.hwnd, GWL_EXSTYLE)
ShowInTaskbarRT = (lExStyle And WS_EX_APPWINDOW) = WS_EX_APPWINDOW
End Property
Public Property Let ShowInTaskbarRT(ByRef Form As Form, _
ByVal New_Value As Boolean)
Dim lExStyle As Long
Dim lVisible As Boolean
With Form
lVisible = .Visible
lExStyle = GetWindowLong(.hwnd, GWL_EXSTYLE)
If New_Value Then
lExStyle = lExStyle Or WS_EX_APPWINDOW
Else
lExStyle = lExStyle And Not WS_EX_APPWINDOW
End If
ShowWindow .hwnd, SW_HIDE
SetWindowLong .hwnd, GWL_EXSTYLE, lExStyle
If lVisible Then
ShowWindow .hwnd, SW_SHOW
End If
End With
End Property
Download
- Modul modShowInTaskbarRT und Beispielprojekt (showintaskbar.zip - 3 KB)