Titel eines Formulars ausblenden

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.

Dienstleistungen

Als starker Partner an Ihrer Seite unterstützen wir Sie in folgenden Breichen:

Access-Programmierung

Benötigen Sie Unterstützung bei der Programmierung von Access-Anwendungen? Wir bieten die gesamte Bandbreite von der Access-Programmierung auf Stundenbasis bis zur Durchführung eines Software-Projektes als Auftragsarbeit an. Kontaktieren Sie uns für ein kostenloses Erstgespräch.

Software-Beratung

Haben Sie ein Software-Projekt und Sie wissen nicht, ob Access die richtige Plattform ist? Wir haben über 20 Jahre Erfahrung beim Erstellen von Windows-, Web und mobilen Anwendungen. Kontaktieren Sie uns für eine kostenlose Erstberatung.