Grundsätzlich haben alle Standard Controls in VB eins gemeinsam. Ihnen fehlt ein wichtiges Ereignis! Das MouseIn- und MouseOut- Ereignis. Also wenn es das nicht gibt, dann bauen wir uns diese Ereignisse nach. Voraussetzung: Das Control, welches über diese neuen Ereignisse verfügen soll, muss eine Zugriffsnummer/ein Fensterhandle (hWnd) und das Ereignis "MouseMove" besitzen. Aber das haben ja (fast) alle Controls. Was brauchen wir jetzt alles? Da wir die fehlenden Events nachbauen, benötigen wir (wie so oft...) ein Klassenmodul. Legen Sie in einem neuen Projekt ein neues Klassenmodul an und benennen Sie es cMouseInOut. Fügen Sie folgenden Code in das Klassenmodul ein: ' *************************************************************** ' * ' * Klassenmodul cMouseInOut ' * ' * MouseIn/Out Event für die Standard Steuerelemente. ' * Für folgende Steuerelemente werden in diesem Klassenmodul ' * die Events MouseIn und MouseOut zur Verfügung gestellt: ' * ' * CheckBox, CommandButton, Frame, Form, ListBox ' * OptionButton, PictureBox und TextBox ' * ' * Die Events geben an die aufrufende Form jeweils das Objekt ' * zurück. Grundsätzlich kann jedes Steuerelement verwendet ' * werden, es muss lediglich über eine "hwnd" Eigenschaft und ' * über ein "MouseMove" Ereignis verfügen. ' * ' * Juni 2003, Roland Wutzke (Snoopy) rwutzke@t-online.de ' * ' *************************************************************** Option Explicit Private Declare Function SetCapture Lib "user32" ( _ ByVal hWnd As Long) As Long Private Declare Function ReleaseCapture Lib "user32" () As Long Public Event MouseIn(ByVal ObjectName As Object) Public Event MouseOut(ByVal ObjectName As Object) Public WithEvents chkMouseInOut As CheckBox Public WithEvents cmdMouseInOut As CommandButton Public WithEvents fraMouseInOut As Frame Public WithEvents frmMouseInOut As Form Public WithEvents lstMouseInOut As ListBox Public WithEvents optMouseInOut As OptionButton Public WithEvents picMouseInOut As PictureBox Public WithEvents txtMouseInOut As TextBox Private Sub chkMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse chkMouseInOut, X, Y End Sub Private Sub cmdMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse cmdMouseInOut, X, Y End Sub Private Sub fraMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse fraMouseInOut, X, Y End Sub Private Sub frmMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse frmMouseInOut, X, Y End Sub Private Sub lstMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse lstMouseInOut, X, Y End Sub Private Sub optMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse optMouseInOut, X, Y End Sub Private Sub picMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse picMouseInOut, X, Y End Sub Private Sub txtMouseInOut_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) CheckMouse txtMouseInOut, X, Y End Sub Private Sub CheckMouse(oObject As Object, _ ByVal X As Single, Y As Single) Dim l As Long Static isMouseOver As Boolean With oObject If X >= 0 And X <= .Width And Y >= 0 And Y <= .Height Then l = SetCapture(.hWnd) If Not isMouseOver Then RaiseEvent MouseIn(oObject) isMouseOver = True DoEvents End If Else l = ReleaseCapture() RaiseEvent MouseOut(oObject) isMouseOver = False DoEvents End If End With End Sub Ein Beispiel: Fügen Sie in dem neuen Projekt der Form1 einen CommandButton (Command1) hinzu. Folgender Code muss nun in das Codefenster der Form1 eingetragen werden: Option Explicit ' Klasse mit Events Private WithEvents cmd1InOut As cMouseInOut Private Sub Form_Load() ' Klasse instanzieren Set cmd1InOut = New cMouseInOut Set cmd1InOut.cmdMouseInOut = Command1 End Sub Private Sub cmd1InOut_MouseIn(ByVal ObjectName As Object) ' Maus betritt den Button With ObjectName .FontBold = True .FontUnderline = True End With End Sub Private Sub cmd1InOut_MouseOut(ByVal ObjectName As Object) ' Mouse verlässt den Button With ObjectName .FontBold = False .FontUnderline = False End With End Sub Wie die weiteren Controls aufgepeppt werden können, zeigt unser Demoprojekt. Dieser Tipp wurde bereits 14.483 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |