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)