vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Oberfläche · Menüs   |   VB-Versionen: VB4, VB5, VB612.01.04
Menü in der Menüleiste rechts ausrichten

Rechts ausgerichtete Menüs werden vom VB-Menüeditor nicht unterstützt. Mit Hilfe des Windows-APIs ist es aber ein Leichtes, ein oder mehrere Menüs in der Menüleiste rechts anzuzeigen.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  11.197 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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 11.197 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel