ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 26.02.2002

Diese Seite wurde zuletzt aktualisiert am 26.02.2002
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Kontextmenü-Tasten

Zurück...


Anzeige

(-hg) mailto:hg_popupmenukey@aboutvb.de

Üblicherweise wird ein Kontextmenü (sofern eines im aktuellen Kontext vorhanden) beim Loslassen des rechten Mausknopfes angezeigt. Die entsprechende Code-Stelle in Visual Basic ist das MouseUp-Ereignis eines Forms oder Steuerelements:

Private Sub XYZControl_MouseUp(Button As Integer, _
 Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    PopupMenu ...
  End If
End Sub

Auch zum Anzeigen eines Kontextmenüs per Tastatur gibt es eine Konvention. Seit Etablierung der Kontextmenü-Idee seinerzeit mit Windows 95 dient die Tastenkombination Umschalt-F10 zur Anzeige. Auf der später eingeführten "Windows"-Tastatur kann ein Kontextmenü auch über die Anwendungstaste geöffnet werden. Bezüglich der Positionierung herrscht keine Eindeutigkeit vor. Mangels einer Positionsvorgabe durch den Mauszeiger entscheiden sich einige für eine neutrale Positionierung in der linken, oberen Ecke des betreffenden Kontexts bzw. Steuerelements, andere für ein zentriertes Öffnen über dieser Fläche. "Zentriert" bedeutet hier allerdings nichts anderes als die Zentrierung der linken, oberen Ecke des Menüs. Ein Mechanismus, der die tatsächliche Größe des sich öffnenden Menüs ermitteln sollte, um es flächig zentrieren zu können, müsste ungeheuer flexibel sein - und genau so ungeheuer aufwändig.

Die folgende Prozedur PopupMenuKey können Sie aus einer KeyDown-Ereignisprozedur heraus aufrufen. Am besten rufen Sie sie dort als erstes auf, da sie im Falle eines "Treffers" den KeyCode-Wert "schluckt" und Sie somit weitere Tasten erst gar nicht zu prüfen brauchen. Sie übergeben ihr das Objekt (Steuerelement, Form usw.), über dem das Kontextmenü erscheinen soll, den in KeyDown übergebenen KeyCode und den Shift-Status, und das anzuzeigende Kontextmenü. Optional können Sie zusätzlich noch das Menü-Element, das als Vorgabekennzeichnung mit fetter Beschriftung erscheinen soll, übergeben. Und im letzten Parameter legen Sie fest, ob das Kontextmenü wie oben beschrieben zentriert werden soll. Die Prozedur arbeitet mit Steuerelementen (Objekttyp Control), Forms und PropertyPages. Bei Verwendung mit einem UserControl sollten Sie entweder dessen Extender übergeben, oder eine spezialisierte Variante innerhalb des Code-Moduls des UserControls anlegen (ein UserControl lässt sich nämlich nicht so einfach als Parameter übergeben).

Public Sub PopupMenuKey(Control As Object, KeyCode As Integer, _
 ByVal Shift As Integer, Menu As Menu, _
 Optional DefaultMenu As Menu, Optional ByVal Centered As Boolean)

  Const vbKeyApps = &H5D
  
  Select Case KeyCode
    Case vbKeyF10
      If Shift = vbShiftMask Then
        KeyCode = 0
      Else
        Exit Sub
      End If
    Case vbKeyApps
      Select Case Shift
        Case vbAltMask, vbAltMask Or vbShiftMask
          Exit Sub
        Case Else
          KeyCode = 0
      End Select
    Case Else
      Exit Sub
  End Select
  Select Case True
    Case TypeOf Control Is Form, TypeOf Control Is PropertyPage
      If Centered Then
        With Control
          If DefaultMenu Is Nothing Then
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .ScaleWidth \ 2, .ScaleHeight \ 2
          Else
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .ScaleWidth \ 2, .ScaleHeight \ 2, DefaultMenu
          End If
        End With
      Else
        If DefaultMenu Is Nothing Then
          Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
           0, 0
        Else
          Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
           0, 0, DefaultMenu
        End If
      End If
    Case TypeOf Control Is Control
      With Control
        If Centered Then
          If DefaultMenu Is Nothing Then
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .Left + (.Width \ 2), .Top + (.Height \ 2)
          Else
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .Left + (.Width \ 2), .Top + (.Height \ 2), _
             DefaultMenu
          End If
        Else
          If DefaultMenu Is Nothing Then
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .Left, .Top
          Else
            Menu.Parent.PopupMenu Menu, vbPopupMenuRightButton, _
             .Left, .Top, DefaultMenu
          End If
        End If
      End With
  End Select
End Sub

Beispiel-Projekt und Modul modPopupMenuKey (popupmenukey.zip - ca. 3,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer