# Zwischen Links- und Rechtsklick unterscheiden



## Xervek (11. Mai 2006)

Hallo,

ich habe mal wieder eine Frage. Und zwar wollte ich fragen, ob es möglich ist, mit VB zu unterscheiden, ob ich die linke oder rechte Maustaste geklickt habe. Ich bräuchte dieses Vorgehen aber in einem Menü, welches oberhalb des Programms angezeigt wird. Wenn ich also auf die linke Maustaste drücke soll beispielweise eine MSG-Box "Hallo!" ausgeben, wenn ich rechts klicke "Tschüss!".

Wäre nett wenn mir da jemand helfen könnte.

Liebe Grüße und vielen Dank im Voraus!


----------



## WaGutSo (17. Mai 2006)

Hallo Xervek,
was verstehst Du unter "in einem Menü, welches oberhalb des Programms angezeigt wird"?

Mit den MouseDown- und MouseUp- Ereignissen wird die Maustaste in der Variablen "button" übergeben.

Vieleicht hilft's, sonst bitte genauare Angaben.

Grüße

Walter Gutermann


----------



## Xervek (17. Mai 2006)

Hallo,

eine Antwort, damit habe ich ja schon gar nicht mehr gerechnet  Vielen Dank das du geantwortet hast.

Soweit bin ich auch schon gekommen, mit normalen Button funktioniert es auch excellent. Ich brauche die funktion allerdings in einem Menü. Nimm deinen Browser, oben steht "Datei; Bearbeiten; Ansicht; Gehe; Lesezeichen; Extras; Hilfe" zumindest ist es bei meinem Firefox so. Wenn ich nun das Menü mit der linken Maustaste öffne, nehmen wir einfach "Datei" steht direkt oben "Neues Fenster". Ich möchte nun bei einem Linksklick, dass ausgegeben wird "Ich habe die linke Maustaste gedrückt." Bei einem Rechtsklick dementsprechend "Ich habe die rechte Maustaste gedrückt."

Ein solches Menü meine ich, jedoch habe ich bisher keinen Weg gefunden, zwischen den beiden Maustasten zu unterscheiden. Das ganze wäre mir extrem wichtig, nur wie gesagt, bisher habe ich keinen Weg gefunden.

Liebe Grüße und vielen Dank!


----------



## WaGutSo (18. Mai 2006)

Hallo Xervek,
ich muß leider passen. Bis eben war mir nicht bekannt, daß bei einem Menü (erzeugt mid dem Menü-Editor) die Mausereignisse Up und Down nicht weitergegeben werden. Ob es überhaupt eine Lösung für diese Menüs gibt?
Vieleicht kann ein "API-Experte" weiterhelfen, aber die Menüs haben scheinbar auch keinen Zugriff auf ihre Windows-Handle.

Viele Grüße

Walter Gutermann


----------



## Xervek (18. Mai 2006)

Hallo,

trotzdem danke für die Antwort. Ist ja nicht schlimm wenn du nicht weißt wies geht, ich bin damit ja auch schon an meine Grenzen gestoßen. Leider bringt es mir gar nichts, das Ganze per Button zu realisieren, da sich das Programm im Systray befindet und ich von dort aus eben per Menü darauf zugreifen muss. Linksklick absolut kein Problem, Rechtsklick bisher unlösbar, muss ich weiterschauen und gucken ob hier jemand helfen kann oder ob ich das irgendwie anders lösen kann...

Vielen Dank und liebe Grüße!


----------



## dignsag (18. Mai 2006)

Hi,

ich habe leider keine Exakte Lösung für dein Problem. Aber wenn du sagst das das Programm im Tray liegt, dann kannst du das was du tun willst ja über den Tray steuern! Das heißt, beim Trayicon lässt sich 100% abfangen ob links oder rechtsklick darauf ausgeführt wurde. Ich weiß selbst zwar nicht wie, aber es funktioniert auf jeden Fall da die meisten Programme mit Trayicon je nach Klick 2 verschiedene Tray-Menüs öffnen.

Hoffe damit zu helfen, wie gesagt ist halt ein anderes Vorgehen.

Gruß

Dignsag


----------



## RamonR (30. Mai 2006)

Hallo,



> Das heißt, beim Trayicon lässt sich 100% abfangen ob links oder rechtsklick darauf ausgeführt wurde



Richtig, aber leider nur bei einem Klick auf das Icon selbst, im erscheinenden Popup-Menü kann man nicht mehr zwischen Links- und Rechtsklick unterscheiden.

Ich hänge mal ein Beispiel-Projekt (XP-Tray.zip) an, bei dem beim Anklicken des Trayicons zwischen den verschiedenen Klickvarianten an folgender Stelle unterschieden wird:


```
Private Sub Form_MouseMove(Button As Integer, _
  Shift As Integer, X As Single, Y As Single)
  
    ' Das MouseMove Ereignis wird ausgelöst, wenn die
    ' Maus über das Symbol im Systray geführt wird

    Dim lMsg As Long
    Dim sFilter As String
  
    lMsg = X / Screen.TwipsPerPixelX
    Select Case lMsg
        Case WM_LBUTTONDOWN
            ' linke Maustaste wird gedrückt
      
        Case WM_LBUTTONUP
            ' linke Maustaste wird losgelassen
      
        Case WM_LBUTTONDBLCLK
            ' linke Maustaste - Doppelklick
            ' Symbol aus dem Systray entfernen
            Call Loesche_TrayIcon
            ' Form wiederherstellen
            Me.WindowState = vbNormal
            Me.Show
        Case WM_RBUTTONDOWN
            ' rechte Maustaste wird gedrückt
      
        Case WM_RBUTTONUP
            ' rechte Maustaste wird losgelassen
            ' Popup-Menü öffnen
            SetForegroundWindow Me.hWnd     ' Setze Focus auf Anwendung (damit PopupMenu gelöscht werden kann)
            PopupMenu MenuPopUp             ' Zeige PopupMenu
       
        Case WM_RBUTTONDBLCLK
            ' rechte Maustaste - Doppeklick
  End Select
End Sub
```

Für ein Menü gibt es meines Wissens nach keine Möglichkeit zwischen einem Links- oder Rechtsklick zu unterscheiden


----------



## Shakie (30. Mai 2006)

Ich kenne auch keine Möglichkeit bei einem Menü zu unterscheiden, mit welcher Maustaste da drauf geklickt worden ist.
Warum benötigst du diese Abfrage denn unbedingt? Ich würde dir empfehlen, dein Programm so umzugestalten, dass man alle Menüs mit der linken Maustaste bedienen kann. Außerdem sollte man Menüs auch mit der Tastatur bedienen können, die linke Maustaste entspricht der Enter-Taste. Für die rechte Maustaste hättest du dann aber keine Taste um das Menü entsprechend zu verwenden.

Sonst würde mir noch einfallen, dass du dir dein eigenes Menü-Control bastelst anstatt den Menüeditor von VB zu verwenden.


----------

