VB4-VB6
Von: Tobias Schikora [Home]
Viele Programmierer benötigen Ereignisse, die beim Betreten und Verlassen eines Objektes mit der Maus eintreten. Jedoch werden Sie diese Möglichkeit vergebens suchen. Solche Ereignisse gibt es leider bis einschließlich VB6 nicht, obwohl sie bei z.B. DHTML schon längst Gang und Gäbe sind.
Aber es geht! Die beiden Ereignisse lassen sich selbst implementieren. Hierzu wird das MouseMove Ereignis genutzt wirkend mit zwei API Funktionen:
Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Im MouseMove Ereignis des Objektes muss folgender Code eingefügt werden:
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Dim l As Long If X >= 0 And X <= Command1.Width And _ Y >= 0 And Y <= Command1.Height Then l = SetCapture(Command1.hwnd) ' Hier den Code für das Event "MouseOver" einfügen... Else l = ReleaseCapture() ' Hier den Code für das Event "MouseOut" einfügen... End If End Sub
Dieses Beispiel funktioniert nur für das Objekt Command1. Bei einer Verwendung mit anderen Objekten müssen lediglich jeweils die vier kursiv geschriebenen Objekte im Code angepasst werden.
Zwei kleine Einschränkung sollte aber nicht verschwiegen werden: Zum einen erscheint kein Tooltip mehr für die Objekte und der Code funktioniert leider nur bei Objekten, die ein Handle haben (also eine hWnd- Eigenschaft aufweisen). Aber auch hier kann man sich schnell helfen: Man setzt das handellose Objekt in das MouseMove Ereignis eines Container-Objekt mit Handle und anschließend denselben Code noch mal in das MouseMove des handellosen Objektes.