Das Archiv des Excel-Forums

Listboxeintrag unter Mauszeiger

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Label ListBox UserForm
Bild

Betrifft: Listboxeintrag unter Mauszeiger
von: Maria von Kageneck

Geschrieben am: 02.07.2008 17:11:51

Hallo zusammen,
ich möchte im MouseMove-Ereignis einer Listbox Zugriff auf den Eintrag unter dem Mauszeiger (also den zugehörigen Index) bekommen.
Alles, was ich im Netz gefunden habe, arbeitet in irgendeiner Form mit der SendMessage-Funktion, die aber ein Handle zu der Listbox benötigt.
Dieses Handle wird in dem von mir gefundenen Code zum Teil einfach über Listbox1.hwnd geholt, das funktioniert bei mir aber leider nicht :-(
Weiß irgendjemand Rat??
Für Hilfe sehr dankbar
Maria

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: ChristophM
Geschrieben am: 02.07.2008 17:46:43
Hallo Maria,
Um den SendMessage kommst du wohl nicht drum rum. Aber das ist auch kein Problem, du musst eben die API's im Code benennen.
Hier ein Bsp. aus meinem Fundus.
https://www.herber.de/bbs/user/53538.xls
Gib mir Bescheid, wie du damit parat kommst.
Grüße
ChristophM

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: Maria von Kageneck

Geschrieben am: 02.07.2008 19:36:57
Hei Christoph,
erst eimal vielen Dank!! Es scheint zu funktionieren.
aus Deinem Code habe ich nur den einen Teil:
intIndex = Round((Y - 5) / 10)
übernehmen müssen, um an den Index zu kommen. (gar keine SendMessage und nix...)
Nun frage ich mich, wie das mit so fixen Werten ("5" und "10") funktionieren kann und ob das bei allen Auflösungen dann auch läuft.
Weißt Du das??
Vielen Dank auf jeden Fall,
Gruß von
Maria

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: ChristophM
Geschrieben am: 03.07.2008 07:19:58
Hallo Maria,
die Berechnung hängt von der Schriftgröße ab. In meinem Beispiel ist die Schrift 'Verdarna 9'.
Nepumuks Lösung ist hie eleganter. Auf meinen Code übersetzt wäre dann:
statt:
Me.lstKat.ListIndex = Round((Y - 5) / 10)
dieses einzusetzen:
Me.lstKat.ListIndex = Int(Y / (Me.lstKat.Font.Size + 2))
Grüße
Christoph

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: Maria von Kageneck

Geschrieben am: 03.07.2008 17:46:26
Hei Christoph,
noch einmal vielen Dank!
Aaaber, meine Liste ist zum Scrollen und das wird ja gar nicht verarbeitet.... Es werden quasi immer einfach die sichtbaren Einträge gezählt... :-((
Naja, ich schau mal, Du hast mir auf jeden Fall sehr geholfen,
Gruß von
Maria

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: Nepumuk
Geschrieben am: 02.07.2008 17:49:47
Hallo Maria,
na wenn das alles ist, dann hab ich was für dich.

' **********************************************************************
' Modul: UserForm2 Typ: Userform
' **********************************************************************

Option Explicit

Dim lintFontSize As Integer

Private Sub ListBox1_MouseMove(ByVal Button As Integer, _
        ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Dim intListIndex As Integer
    intListIndex = ListBox1.TopIndex + Int(Y / lintFontSize)
    If intListIndex <= ListBox1.ListCount - 1 Then _
        Label1.Caption = ListBox1.List(intListIndex, 0)
End Sub

Private Sub UserForm_Activate()
    lintFontSize = ListBox1.Font.Size + 2
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, _
        ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Label1.Caption = ""
End Sub

Kommst du klar damit?
Gruß
Nepumuk

Bild

Betrifft: ... funktioniert leider nicht :-(
von: Maria von Kageneck

Geschrieben am: 02.07.2008 19:27:38
Hallo Nepumuk,
vielen Dank für Deine Antwort.
Ich habe es mit Deinem Code probiert, aber, da bei mir ListBox1.TopIndex immer eine 0 zurückgibt, funktioniert es leider nicht...
Weißt Du Rat??
Vielen Dank
Maria

Bild

Betrifft: AW: ... funktioniert leider nicht :-(
von: Nepumuk
Geschrieben am: 02.07.2008 20:18:53
Hallo Maria,
das ist auch gut so, denn wenn er nicht Null wäre, dann wird das Formular nicht angezeigt, oder die Liste ist leer. Versuch es mal mit der Beispielmappe:
https://www.herber.de/bbs/user/53543.xls
Gruß
Nepumuk

Bild

Betrifft: hast Recht, jetzt läuft's
von: Maria von Kageneck

Geschrieben am: 03.07.2008 17:57:08
Hei Nepumuk,
ja, stimmt es läuft!
Super, vielen Dank!
Gruß von
Maria

Bild

Betrifft: AW: Listboxeintrag unter Mauszeiger
von: Herbert
Geschrieben am: 06.07.2008 16:33:36
Hi,
interessante Lösung, leider geklaut!
mfg Herbert

 Bild

Excel-Beispiele zum Thema "Listboxeintrag unter Mauszeiger"

Sanduhr als Mauszeiger download