|
Leider ist die Eigenschaft ShowInTaskbar
eines Forms zur Laufzeit schreibgeschützt. Sie müssten sich also
bereits beim Entwurf des Forms endgültig dafür entscheiden, ob es
in der Taskbar erscheinen soll oder nicht. Eigentlich? Richtig. Wie
so oft bietet nämlich das API einen Ausweg.
Ob ein Form in der Taskbar erscheint, hängt davon ab, ob der
Fenster-Stil WS_EX_APPWINDOW gesetzt ist. Die Stil-Einstellungen
können Sie mit der API-Funktion GetWindowLong
auslesen und den Stil nachträglich mit der API-Funktion SetWindowLong
setzen oder löschen. Wirksam wird das Setzen des Stils allerdings
nur, wenn das Form nicht sichtbar ist. Es muss also, zumindest
kurzzeitig, unsichtbar und nach der Änderung wieder sichtbar
gemacht werden. Falls Sie das Flackern beim Verbergen und wieder
Anzeigen des Forms stören sollte, können Sie mit der API-Funktion LockWindowUpdate
die Bildschirmaktualisierung unterbinden. Da aber danach der gesamte
Bildschirm wieder aufgefrischt wird, kann es sein, dass nun andere
gleichzeitig sichtbare Programme, die ihren Darstellungsbereich vor
dem Neuzeichnen löschen, diesen langwierig wieder aufzubauen
beginnen.
Die Prozedur FormInTaskbar erledigt das Setzen des Taskbar-Stils
in einem Aufruf. Sie übergeben ihr im ersten Parameter das
betreffende Form und im zweiten Parameter die Angabe über die
Sichtbarkeit des Forms in der Taskbar. Setzen Sie den weiteren
optionalen Parameter NoFlicker auf True, wird die
Bildschirmaktualisierung (wie oben beschrieben) unterbunden.
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) _
As Long
Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hwndLock 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
Public Sub FormInTaskbar(Form As Form, _
ByVal ShowInTaskBar As Boolean, Optional ByVal NoFlicker As Boolean)
Dim nStyle As Long
Dim nVisible As Boolean
Const GWL_EXSTYLE = (-20)
Const WS_EX_APPWINDOW = &H40000
With Form
nVisible = .Visible
If NoFlicker And nVisible Then
LockWindowUpdate GetDesktopWindow()
End If
.Visible = False
nStyle = GetWindowLong(.hwnd, GWL_EXSTYLE)
Select Case ShowInTaskBar
Case True
nStyle = nStyle Or WS_EX_APPWINDOW
Case False
nStyle = nStyle And Not WS_EX_APPWINDOW
End Select
SetWindowLong .hwnd, GWL_EXSTYLE, nStyle
.Refresh
.Visible = nVisible
If NoFlicker And nVisible Then
LockWindowUpdate 0&
End If
End With
End Sub
|