Listenfeldinhalte bei Mouseover auslesenMit einem Trick kann man beim MouseOver-Ereignis auf den Inhalt der betroffenen Zeile eines Listenfeldes zugreifen. Sowas braucht man nicht? Doch! Zum Beispiel, um Inhalte, die breiter als das Listenfeld sind, per ControlTipText sichtbar zu machen.
BeispieldatenbankEine Beispieldatenbank finden Sie unter folgendem Link:

Dynamischer TiptextFür die Anzeige des Listenfeldeintrags, über dem sich gerade die Maus befindet, brauchen Sie zunächst die Koordinaten des Mauszeigers zum gegebenen Zeitpunkt. Diese ermittelt die API-Funktion GetCursorPos und gibt den x- und den y-Wert in einer Variablen des Typs POINTAPI zurück:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
Den Rest erledigt die folgende Routine, die beim Überfahren des Listenfeldes mit der Maus ausgelöst wird: Sie ermittelt zunächst die Position des Mauszeigers und verwendet dann die versteckte Funktion accHitTest des Listenfeld-Steuerelements. Dies liefert wiederum den Indexwert des Eintrags zurück, auf den sich die übergebenen Koordinaten beziehen.
Die folgende If-Bedingung prüft, ob die Maus sich überhaupt auf einem Eintrag befindet und ob es sich um den gleichen Eintrag wie zuvor handelt. Dann legt sie für die Eigenschaft ControlTipText den angezeigten Wert des betroffenen Listenfeldeintrags fest und speichert den Index dieses Eintrags in der Variablen lngPrevItem.
Private Sub lstDynamisch_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim pt As POINTAPI
Dim lngCurItem As Long
Static lngPrevItem As Long
GetCursorPos pt
lngCurItem = Me!lstDynamisch.accHitTest(pt.x, pt.y) - 1
If lngCurItem > -1 And Not lngPrevItem = lngCurItem Then
Me!lstDynamisch.ControlTipText = Me!lstDynamisch.ItemData(lngCurItem)
lngPrevItem = lngCurItem
End If
End Sub
Ein solches Kombinationsfeld könnte etwa wie in folgender Abbildung aussehen:
Abbildung 1: Listenfeld mit elementabhängigem ControlTipText
[Idee aus dem Usenet von Jörg Ostendorp] |