Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 04.08.03 |
MouseIn/Out für die Standard-Controls von VB Grundsätzlich haben alle Standard Controls in VB eins gemeinsam. Ihnen fehlt ein wichtiges Ereignis! Das MouseIn und MouseOut Ereignis. | ||
Autor: Roland Wutzke | Bewertung: | Views: 14.515 |
www.vb-power.net | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
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:
Wir wollen einen CommandButton ein wenig aufpeppen, wenn die Maus darüber bewegt wird. Hierbei soll die Beschriftung des Buttons dann "fett" und "unterstrichen" dargestellt werden. Natürlich soll der Text wieder zurückgesetzt werden, wenn die Maus den Button verlässt.
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.