RSS
StartseiteKnowledge LibraryTop 10Impressum

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.