Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Listenfeldinhalte bei Mouseover auslesen

Mit 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.

Beispieldatenbank

Eine Beispieldatenbank finden Sie unter folgendem Link:

Dynamischer Tiptext

Fr die Anzeige des Listenfeldeintrags, ber dem sich gerade die Maus befindet, brauchen Sie zunchst 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 zurck:

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 ausgelst wird: Sie ermittelt zunchst die Position des Mauszeigers und verwendet dann die versteckte Funktion accHitTest des Listenfeld-Steuerelements. Dies liefert wiederum den Indexwert des Eintrags zurck, auf den sich die bergebenen Koordinaten beziehen.

Die folgende If-Bedingung prft, ob die Maus sich berhaupt auf einem Eintrag befindet und ob es sich um den gleichen Eintrag wie zuvor handelt. Dann legt sie fr 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 knnte etwa wie in folgender Abbildung aussehen:

Abbildung 1: Listenfeld mit elementabhngigem ControlTipText

[Idee aus dem Usenet von Jrg Ostendorp]

© 2003-2015 André Minhorst Alle Rechte vorbehalten.