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.809 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte Neu! sevPopUp 2.0 ![]() Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |