Manchmal möchte man, dass der Clientbereich eines Fenster den gesamten Bildschirm ausfüllt, also ganz so wie in Powerpoint oder Excel. WindowState ist dafür ungeeignet, es kann zwar das Fenster maximieren, aber die Titel- und die Taskleiste bleiben nach wie vor sichtbar. Also bleibt uns nichts weiter übrig, uns ein weiteres Mal mit den API's herumzuschlagen. Folgender Code muss in ein Standardmodul: Option Explicit ' Fenstertext ändern Public Declare Function SetWindowText Lib "user32" _ Alias "SetWindowTextA" ( _ ByVal hwnd As Long, _ ByVal lpString As String) As Long ' automatische Aktualisierung eines Fensters sperren/setzen Public Declare Function LockWindowUpdate Lib "user32.dll" ( _ ByVal hwnd As Long) As Long ' ermittelt das Fensterhandle des Desktop's Public Declare Function GetDesktopWindow Lib "user32" () As Long ' ändert die Position eines Fensters oder Controls Public 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 Const HWND_NOTOPMOST = -2 Public Const SWP_FRAMECHANGED = &H20 ' Fensterstil ermitteln Public Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long Public Const GWL_STYLE = (-16) ' Fensterstil ändern Public Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Const WS_CAPTION = &HC00000 Public Const WS_THICKFRAME As Long = &H40000 ' ermittelt die Fenstergröße Public Declare Function GetWindowRect Lib "user32" ( _ ByVal hwnd As Long, _ lpRect As RECT) As Long Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' ermittelt das Handle des SystemMenüs Public Declare Function GetSystemMenu Lib "user32" ( _ ByVal hwnd As Long, _ ByVal bRevert As Long) As Long ' löscht ein Menü oder Menüpunkt Public Declare Function DeleteMenu Lib "user32" ( _ ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long ' zeichnet ein Menü neu Public Declare Function DrawMenuBar Lib "user32" ( _ ByVal hwnd As Long) As Long Public Const SC_MINIMIZE As Long = &HF020 Public Const SC_MOVE As Long = &HF010 Public Const SC_RESTORE As Long = &HF120 Public Const SC_SIZE As Long = &HF000 Public Const SC_MAXIMIZE As Long = &HF030 Public Const SC_SYSSEPERATOR As Long = &H0 Public Const SC_CLOSE As Long = &HF060 Public Const MF_BYCOMMAND = &H0 Private Type FullViewStateType ' 0=None, 1=Normal(Min/Max/Normal), 2=Vollansicht bytState As Byte tWinRect As RECT lWinStyle As Long End Type Private tWinState As FullViewStateType ' Schaltet den Vollbild-Modus ein/aus ' bState: True=Vollbild-Modus / False=Normalmodus ' bMenuClose: False=löscht den Schließen-Befehl des ' Systemmenüs im Vollbildmodus Public Sub FullView(Form As Form, _ ByVal bState As Boolean, _ Optional ByVal bMenuClose As Boolean = True) Dim lStyle As Long Dim hMenu As Long ' - Vollansicht nur dann aktivieren, wenn Vollansicht ' noch nicht aktiv ist ' - Normalansicht nur aktivieren, wenn Vollansicht ' aktiv ist If (tWinState.bytState = 2) = bState Then Exit Sub ' Aktualisierung des Desktops unterbinden LockWindowUpdate GetDesktopWindow With Form ' Vollansicht aktivieren If bState Then ' Status auf Vollansicht setzen tWinState.bytState = 2 ' aktuelle Fensterposition & -größe ermitteln ' wird beim Beenden des Vollbildmodus zum ' Wiederherstellen des Fensters benötigt GetWindowRect .hwnd, tWinState.tWinRect ' Fensterstil ermitteln tWinState.lWinStyle = GetWindowLong(.hwnd, GWL_STYLE) ' Titelleiste und (Größenänderungs-)Rahmen entfernen lStyle = tWinState.lWinStyle And _ Not (WS_CAPTION Or WS_THICKFRAME) SetWindowLong .hwnd, GWL_STYLE, lStyle ' Fenstergröße auf Bildschirm-Größe setzen SetWindowPos .hwnd, HWND_NOTOPMOST, 0, 0, _ Screen.Width \ Screen.TwipsPerPixelX, _ Screen.Height \ Screen.TwipsPerPixelY, _ SWP_FRAMECHANGED ' Handle des SystemMenüs ermitteln hMenu = GetSystemMenu(.hwnd, 0&) ' Einträge aus dem SystemMenü entfernen If hMenu Then ' Wiederherstellen Call DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND) ' Verschieben Call DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND) ' Größe ändern Call DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND) ' Minimieren Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND) ' Maxminieren Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND) ' Trennlinie Call DeleteMenu(hMenu, SC_SYSSEPERATOR, MF_BYCOMMAND) If bMenuClose = False Then ' Schließen Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) End If End If Else ' Status auf Normalansicht setzen tWinState.bytState = 1 ' Fenstergröße wiederherstellen With tWinState.tWinRect SetWindowPos Form.hwnd, HWND_NOTOPMOST, _ .Left, .Top, .Right - .Left, .Bottom - .Top, _ SWP_FRAMECHANGED End With ' Fensterstil wiederherstellen SetWindowLong .hwnd, GWL_STYLE, tWinState.lWinStyle ' Systemmenü wiederherstellen GetSystemMenu .hwnd, True End If ' Systemmenü neu zeichnen DrawMenuBar .hwnd End With ' Desktop kann wieder aktualisiert werden LockWindowUpdate 0& End Sub ' Vollansicht-Status ermitteln Public Function FullViewState() As Boolean FullViewState = (tWinState.bytState = 2) End Function Ändern Sie während des Vollbild-Modus den Fenstertitel, stellt VB die Titelleiste wieder her. Wenn Sie den Fenstertitel denoch ändern möchten/müssen, müssen Sie das auch per API tun. Folgender Code muss dazu auch noch in's Standardmodul: ' Fenstertitel ermitteln Public Property Get WinCaption(Form As Form) As String WinCaption = Form.Caption End Property ' Fenstertitel festlegen Public Property Let WinCaption(Form As Form, _ ByVal sWinCaption As String) SetWindowText Form.hwnd, sWinCaption End Property Aufrufbeispiel: ' aktiviert den Vollbildmodus ' der Systemmenü-Eintrag <Schließen> ' wird außerdem entfernt FullView Me, True, False ' deaktiviert den Vollbild-Modus FullView Me, False ' Fenstertitel ändern WinCaption(Me) = "Neuer Fenstertitel" Dieser Tipp wurde bereits 29.278 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |