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  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Oberfläche · Menüs   |   VB-Versionen: VB4, VB5, VB617.01.01
PopUp-Menü im Listenfeld

Selektieren eines Listeneintrags und Anzeigen eines PopUp-Menüs per rechter Maustaste...

Autor:   Heinz PrelleBewertung:     [ Jetzt bewerten ]Views:  15.114 
www.visual-basic5.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Haben Sie sich auch schon oft darüber geärgert, daß in Listenfelder beim Drücken der rechten Maustaste nicht automatisch der Eintrag unter dem Mauszeiger selektiert wird? Vor allem dann, wenn beim Drücken der rechten Maustaste ein PopUp-Menü mit bestimmten Befehlen angezeigt wird. So muß man immer den entsprechenden Eintrag zunächst durch Klicken mit der linken Maustaste selektieren, um dann über die rechte Maustaste das PopUp-Menü zu öffnen.

Es geht aber auch einfacher. Der nachfolgende Tipp zeigt, wie beim Klicken der rechten Maustaste automatisch der Eintrag, auf welchem sich der Mauszeiger gerade befindet, selektiert wird.

' zunächst die benötigten Deklarationen
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
 
Private Const LB_GETITEMRECT = &H198
Private Const LB_ERR = (-1)
 
' Die nachfolgende Routine ermittelt den Index
' des Listen-Eintrags, anhand der Mauskoordinaten X und Y
Public Function PopUpListBox(objListBox As Control, _
  X As Single, Y As Single) As Long
 
  Dim lngClick_X As Long
  Dim lngClick_Y As Long
  Dim lngAnt As Long
  Dim aktRect As RECT
  Dim lngCount As Long
 
  ' Das Steuerelement muss eine Listbox sein...
  If Not TypeOf objListBox Is ListBox Then
    PopUpListBox = LB_ERR
    Exit Function
  End If
 
  ' X und Y Pixel lesen
  lngCount = 0
  lngClick_X = X \ Screen.TwipsPerPixelX
  lngClick_Y = Y \ Screen.TwipsPerPixelY
  Do While True
    ' Aktuelle Auswahl als Rectangle lesen
    lngAnt = SendMessage(objListBox.hwnd, _
      LB_GETITEMRECT, lngCount, aktRect)
 
    ' Wenn Fehler oder keine Markierung Exit Function
    If lngAnt < 1 Then
      PopUpListBox = LB_ERR
      Exit Function
    End If
    If (lngClick_X >= aktRect.Left) And _
     (lngClick_X <= aktRect.Right) And _
     (lngClick_Y >= aktRect.Top) And _
     (lngClick_Y <= aktRect.Bottom) Then
      PopUpListBox = lngCount
      Exit Function
    End If
    lngCount = lngCount + 1
  Loop
End Function
 
' Im MouseDown-Ereignis der Listbox wird die
' rechte Maustaste abgefragt und ggf. das 
' PopUp-Menü angezeigt
Private Sub List1_MouseDown(Button As Integer, _
  Shift As Integer, X As Single, Y As Single)
 
  Dim lngItem As Long
 
  If Button = vbRightButton Then
    lngItem = PopUpListBox(List1, X, Y)
    If lngItem <> -1 Then
      List1.ListIndex = lngItem
      PopupMenu mnuTest
    End If
  End If
End Sub

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