vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB4, VB5, VB604.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 WutzkeBewertung:     [ Jetzt bewerten ]Views:  14.483 
www.vb-power.netSystem:  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.

Dieser Tipp wurde bereits 14.483 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel