Minimierbare Dialoge
Dialogfenster mit einer zusätzlichen Schaltfläche zum Minimieren ausstatten
Zwar sorgt das Setzen der MinButton- Eigenschaft bei einem Dialogfenster für einen entsprechenden Minimieren-Menüpunkt im Systemmenü, aber für eine Schaltfläche in der Titelleiste muss man tricksen...
Dialogfenster können eigentlich nicht minimiert werden und auch Visual Basic weigert sich bei einem Formular mit dem BorderStyle = [3 – Fester Dialog] die Schaltfläche zum Minimieren des Fensters anzuzeigen, obwohl das Setzen der MinButton-Eigenschaft zumindest für einen entsprechenden Eintrag im Systemmenü sorgt.
So bleibt nur wieder der Griff zum API, um die noch fehlende Schaltfläche zum Minimieren des Dialogs in die Titelleiste zu bringen. Der Fensterstil WS_MINIMIZEBOX sagt einem Fenster, dass es diese Minimieren-Schaltfläche anzeigen soll. Gesetzt wird er über die API Funktion SetWindowLong, indem er zum vorhandenen Stil, zu ermitteln über die API Funktion GetWindowLong, hinzugefügt wird:
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_REFRESH = SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or _
SWP_NOACTIVATE Or SWP_FRAMECHANGED
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_STYLE = (-16)
Private Const WS_MINIMIZEBOX = &H20000
Public Sub AddMinButton(ByRef Form As Form)
Dim lngStyle As Long
With Form
lngStyle = GetWindowLong(.hwnd, GWL_STYLE)
lngStyle = lngStyle Or WS_MINIMIZEBOX
SetWindowLong .hwnd, GWL_STYLE, lngStyle
SetWindowPos .hwnd, 0, 0, 0, 0, 0, SWP_REFRESH
End With
End Sub
Die Eigenschaften MinButton und ShowInTaskbar sollten schon in der IDE gesetzt werden.
Download
- Modul modMinButton und Beispielprojekt (dlgminbutton.zip - 2 KB)