Unter den erweiterten Fensterstilen findet sich auch der Stil WS_EX_CLIENTEDGE
- einer der wenigen Fensterstile, die sich bei Visual Basic-Forms
sinnvoll und ohne größeren Aufwand nutzen lassen. Dieser Stil
sorgt dafür, dass die Arbeitsfläche (Client-Bereich) versenkt
dargestellt wird und erspart den Einsatz eines zusätzlichen, an die
Form-Arbeitsfläche anzupassenden Container-Steuerelements wie einer
PictureBox.
In der Hilfs-Funktion FormSunken wird zunächst mit der
API-Funktion GetWindowLong
und der Index-Angabe GWL_EXSTYLE der Wert der gesetzten erweiterten
Stile ausgelesen. Dann wird der gewünschte Stil (hier:
WS_EX_CLIENTEDGE) gesetzt (mit "Or" verknüpft) oder
gelöscht (mit "And Not" verknüpft), je nach Ihrer Angabe
im optionalen Parameter Sunken (Voreinstellung True). Mit der
API-Funktion SetWindowLong
wird der modifizierte Stile-Wert wieder zurückgeschrieben. Damit
die Stil-Änderung wirksam wird, muss das Form kurzzeitig verborgen
und dabei aktualisiert werden (.Refresh).
Wenn Sie die Funktion bereits im Form_Load-Ereignis aufrufen
möchten, um die Oberfläche gleich von Anfang an versenkt
darzustellen, sollten Sie den optionalen Parameter ShowImmediately
(Voreinstellung True) auf False setzen - anderenfalls würde das
Form bereits beim Aufruf der Funktion und vor dem Ende der
Bearbeitung des Form_Load-Ereignisses angezeigt.
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 Any) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_CLIENTEDGE = &H200&
Public Sub FormSunken(Form As Form, _
Optional ByVal ShowImmediately as Boolean = True, _
Optional ByVal Sunken As Boolean = True)
Dim nWindowLong As Long
With Form
nWindowLong = GetWindowLong(.hwnd, GWL_EXSTYLE)
If Sunken Then
nWindowLong = nWindowLong Or WS_EX_CLIENTEDGE
Else
nWindowLong = nWindowLong And Not WS_EX_CLIENTEDGE
End If
SetWindowLong .hwnd, GWL_EXSTYLE, nWindowLong
If .Visible Then
.Visible = False
End If
.Refresh
.Visible = ShowImmediately
End With
End Sub
|