RSS
StartseiteKnowledge LibraryTop 10Impressum

5.3 Gibt es ein MouseOut Ereignis für Controls?

VB4-VB6

Von:  [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.

Links zum Thema