Titel eines Formulars ausblenden
Veröffentlicht am 04.05.2005
Manchmal soll ein Formular angezeigt werden, das keinen Titel besitzt. Mit den Formulareigenschaften „Rahmenart“, „Systemmenüfeld“ und „MinMaxSchaltflächen“ können Sie ja ein Formular so gestalten, dass es keinen Titelbalken hat. Mit dieser Methode verschwindet jedoch der Fensterrahmen, so dass sich das Formular von anderen geöffneten Fenstern nur schwer abgrenzt. Mit einigen API-Funktionen können Sie den Titel des Fensters ausblenden und dabei den Rahmen beibehalten.
Folgende Prozedur setzt die nötigen Funktionen ein, um den Titel des Fensters ausblenden und dabei den Rahmen beizubehalten:
Option Compare Database
Option Explicit
Public Const LOGPIXELSX = 88 ' Logical pixels/inch in X
Public Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Public Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000
Public Const WS_BORDER = &H800000
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_FRAMECHANGED = &H20
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
ByVal hdc As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetDesktopWindow Lib "user32" () As Long
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
Public Sub TitelEntfernen(F As Form)
Dim OldStyle As Long, NewStyle As Long
Dim Breite As Long, Höhe As Long
Dim TwipsPerPixelX As Long, TwipsPerPixelY As Long
Dim hdc As Long
' Handle des Desktop-GerätKontextes ermitteln
hdc = GetDC(GetDesktopWindow())
' Auflösung in Twips umrechnen und Handle wieder freigeben
TwipsPerPixelX = 1440 / GetDeviceCaps(hdc, LOGPIXELSX)
TwipsPerPixelY = 1440 / GetDeviceCaps(hdc, LOGPIXELSY)
ReleaseDC GetDesktopWindow(), hdc
' aktuellen Fensterstil ermitteln
OldStyle = GetWindowLong&(F.hwnd, GWL_STYLE)
' neuen Fensterstil definieren und setzen
NewStyle = (OldStyle And Not WS_CAPTION) Or WS_BORDER
SetWindowLong F.hwnd, GWL_STYLE%, NewStyle&
' Fenstergröße anpassen
Breite = F.Width \ TwipsPerPixelX
Höhe = F.Section(acDetail).Height \ TwipsPerPixelY
' Fenster mit neuen Eigenschaften anzeigen
SetWindowPos F.hwnd, 0, 0, 0, Breite, Höhe, _
SWP_NOMOVE Or SWP_NOZORDER _
Or SWP_FRAMECHANGED
End Sub
Zunächst ermittelt diese Prozedur die Maße des Bildschirms, die für die spätere Anpassung der neuen Fenstergröße wichtig sind. Mit GetWindowLong und SetWindowLong werden die Attribute des Fensters abgefragt bzw. ohne den Titel neu gesetzt, wobei der Fensterrahmen erhalten bleibt. Zuletzt wird die Fenstergröße neu angepaßt und angezeigt.