vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Oberfläche · Menüs   |   VB-Versionen: VB5, VB626.01.04
Status-Infos für Menü-Einträge

Wie man zusätzliche Informationen zu Menü-Einträgen beispielsweise in der Statusbar anzeigt, das erfahren Sie in diesem Tipp.

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

In vielen Anwendungen werden zusätzliche Informationen zu Menü-Einträgen in einer Statusbar angezeigt. Diese Infos erscheinen immer dann, wenn ein Menü geöffnet ist und ein Menü-Eintrag mit der Maus oder per Tastatur selektiert wird.

Wie auch Sie das in Ihrer Anwendung realisieren können, das zeigen wir Ihnen heute. Hierzu muss die Form "gesubclassed" werden, d.h. wir fangen alle Windows-Nachrichten ab und prüfen, ob sich darunter "zufällig" die Nachricht "WM_MENUSELECT" befindet.

Erstellen Sie ein neues Projekt und fügen nachfolgenden Code in ein Modul ein.

Option Explicit
 
' Benötigte API-Deklarationen
Private Declare Function CallWindowProc Lib "user32" _
  Alias "CallWindowProcA" ( _
  ByVal lpPrevWndFunc As Long, _
  ByVal hwnd As Long, _
  ByVal Msg As Long, _
  ByVal wParam As Long, _
  ByVal lparam As Long) As Long
 
Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" ( _
  ByVal hwnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
 
Private Const GWL_WNDPROC = (-4)
Private Const WM_MENUSELECT = &H11F
 
Private OldWndProc As Long
' Subclassing starten
Public Sub StartSubclass(ByVal hwnd As Long)
  OldWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub
' Subclassing beenden
Sub EndSubclass(ByVal hwnd As Long)
  SetWindowLong hwnd, GWL_WNDPROC, OldWndProc
End Sub
' Windows-Message abfangen
Public Function NewWindowProc(ByVal hwnd As Long, _
  ByVal uMsg As Long, _
  ByVal wParam As Long, _
  ByVal lparam As Long) As Long
 
  Dim sInfo As String
  Dim LoWord As Long
 
  If uMsg = WM_MENUSELECT Then
    ' Balken wird auf Menü bewegt
    LoWord = CLng("&H" & Right$(Right$("00000000" & Hex$(wParam), 8), 4))
    Select Case LoWord
      Case 2
        sInfo = "Neues Dokument erstellen..."
      Case 3
        sInfo = "Bestehenden Dokument öffnen..."
      Case 4
        sInfo = "Aktuelles Dokument speichern..."
      Case 6
        sInfo = "Anwendung beenden..."
    End Select
 
    ' Statustext anzeigen
    Form1.StatusBar1.SimpleText = sInfo
    Exit Function
  End If
 
  ' Nachricht an die ursprüngliche 
  ' Fensterprozedur weiterleiten
  NewWindowProc = CallWindowProc(OldWndProc, hwnd, uMsg, _
    wParam, ByVal lparam)
End Function

Platzieren Sie eine StatusBar auf die Form1 und erstellen mit Hilfe des VB-Menüeditors ein Menu wie nachfolgend dargestellt:

Fügen Sie jetzt noch nachfolgenden Code in den Codeteil der Form ein und starten Sie das Projekt:

' Subclassing starten
Private Sub Form_Load()
  StartSubclass Me.hwnd
End Sub
' Subclassing korrekt beenden
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  EndSubclass Me.hwnd
End Sub

Dieser Tipp wurde bereits 12.239 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-2024 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