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.434 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |