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)