In einigen Anwendungen wird das "Hilfe"-Menü nicht direkt hinter dem letzten Menü angezeigt, sondern immer ganz rechts in der Menüleiste. Unter VB3 / VB4-16Bit konnte man ein Menü ebenfalls rechts ausrichten, indem man der Beschriftung einfach ein Tabulator-Zeichen voranstellte: MenuHelp.Caption = Chr$(9) & "&Hilfe" Leider funktioniert dieser Code seit VB5 nicht mehr. Der VB-Menüeditor selbst bietet auch keine entsprechende Funktion Wie so oft, hilft uns in diesem Fall das Windows-API weiter. Zunächst ermitteln wir das Handle der Menüleiste. Danach wird per GetMenuItemInfo-Aufruf die Menüstruktur des Menüs ausgelesen. Durch Setzen des Flags MFT_RIGHTJUSTIFY und Zurückschreiben der geänderten Struktur lässt sich das Menü dann rechtsbündig anzeigen. Fügen Sie nachfolgenden Code in ein Modul ein: Option Explicit ' benötigte API-Deklarationen Private Declare Function GetMenu Lib "user32" ( _ ByVal hWnd As Long) As Long Private Declare Function GetMenuItemCount Lib "user32" ( _ ByVal hMenu As Long) As Long Private Declare Function GetMenuItemInfo Lib "user32" _ Alias "GetMenuItemInfoA" ( _ ByVal hMenu As Long, _ ByVal un As Long, _ ByVal b As Long, _ lpMenuItemInfo As MENUITEMINFO) As Long Private Declare Function SetMenuItemInfo Lib "user32" _ Alias "SetMenuItemInfoA" ( _ ByVal hMenu As Long, _ ByVal un As Long, _ ByVal bool As Boolean, _ lpcMenuItemInfo As MENUITEMINFO) As Long Private Declare Function DrawMenuBar Lib "user32" ( _ ByVal hWnd As Long) As Long Private Const MIIM_SUBMENU = &H4 Private Const MIIM_TYPE = &H10 Private Const MFT_RIGHTJUSTIFY = &H4000& Private Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hSubMenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End Type ' Menü(folge) rechts anzeigen Public Sub ShowMenuItemOnRight(ByVal hWnd As Long, _ Optional ByVal nMenuItem As Long = -1) Dim hMenu As Long Dim tMenuInfo As MENUITEMINFO ' Handle der Menüleiste der Form hMenu = GetMenu(hWnd) If hMenu <> 0 Then ' Falls das Menü nicht angegegen wurde, jetzt ' das letzte Menü der Menüleiste ermitteln If nMenuItem = -1 Then nMenuItem = GetMenuItemCount(hMenu) End If ' MenuInfo-Struktur lesen With tMenuInfo .cbSize = Len(tMenuInfo) .fMask = MIIM_SUBMENU Or MIIM_TYPE .cch = 256 .dwTypeData = Space(.cch) Call GetMenuItemInfo(hMenu, nMenuItem - 1, True, tMenuInfo) ' Jetzt Flag für rechtsbündig setzen .fType = .fType Or MFT_RIGHTJUSTIFY End With ' MenuInfo-Struktur zurückschreiben Call SetMenuItemInfo(hMenu, nMenuItem - 1, 1, tMenuInfo) ' Menüleiste neu zeichnen DrawMenuBar hWnd End If End Sub Beispiele für den Aufruf: Private Sub Form_Load() ' letztes Menü der Menuleiste rechts anzeigen ShowMenuItemOnRight Me.hWnd End Sub Private Sub Form_Load() ' ab 3. Menü - alles rechts anzeigen ShowMenuItemOnRight Me.hWnd, 3 End Sub Private Sub Form_Load() ' alle Menüs rechts anzeigen :-) ShowMenuItemOnRight Me.hWnd, 1 End Sub Dieser Tipp wurde bereits 13.054 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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 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. |
||||||||||||||||
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. |