vb-Zentrum
Maus & Tastatur
http://www.vb-zentrum.de/tip_maus.html

© 2017 vb-Zentrum

0001 Die Reihenfolge der Mausereignisse

Die meist benutzten Ereignisse bei der Programmierung von Steuerelementen sind mit Sicherheit die Mausereignisse. Da es hiervon einige gibt, kann es durchaus wichtig sein zu wissen, in welcher Reihenfolge sie auftreten. Wird ein Steuerelement mit der Maus angeklickt, so treten nacheinander folgende Ereignisse auf:
  1. MouseDown
  2. MouseUp
  3. Click
Noch interessanter wird es bei einem Doppelklick:
  1. MouseDown
  2. MouseUp
  3. Click
  4. DblClick
  5. MouseUp
Beachten Sie also, dass bei einem Doppelklick das MouseUp-Ereignis zweimal auftritt und auch das normale Click-Ereignis abgearbeitet wird!
 
Autor: ralf schlegel
Stand: 01/2005

0002 Mauszeiger absolut aus- / einschalten

Bei der Programmierung von Bildschirmschonern oder Multimedia-Anwendungen, wie zum Beispiel Dia-Shows, kann es nützlich sein den Mauszeiger unsichtbar zu machen. Hierfür ist der API-Aufruf ShowCursor aus der "User32.dll" zuständig: bei Parameterübergabe von "False" wird der Zeiger ausgeschaltet, mit "True" wieder sichtbar. Doch Vorsicht: dummerweise zählt die Funktion intern die Anzahl der Aufrufe und zwar unabhängig von der Applikation, die sie benutzt. Wird ein Mauszeiger durch zwei Aufrufe der Funktion zweimal versteckt, so muss er auch zweimal aufgerufen werden, um wieder auf dem Bildschirm zu erscheinen! Mit der benutzerdefinierte Routine ShowMouseCursor können Sie den Mauszeiger sicher aus bzw. wieder einschalten.

Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As long) As Long

Sub ShowMouseCursor (ByVal mode As Boolean)
  If mode Then
    Do While ShowCursor(True) <= 0
    Loop
  Else
    Do While ShowCursor(False) >= 0
    Loop
  End If
End Sub
Autor: ralf schlegel
Stand: 04/2005

0003 Multimedia-Tastatur nutzen

Sie wollen die Multimedia-Tasten Ihres Keyboards im eigenen Programm nutzen und wissen nicht wie?

Nun, als VB6 entwickelt wurde waren solche erweiterten Tastaturen noch Zukunftsmusik.
Sie können eine Abfrage auf solche Tasten aber sehr einfach und vernünftig dokumentiert nachrüsten.

Fügen Sie dazu folgenden Code in ein Basic-Modul ein:

Public Const vbMMKeyNext As Integer = &HB0 ' Vorwärts
Public Const vbMMKeyPrev As Integer = &HB1 ' Zurück
Public Const vbMMKeyStop As Integer = &HB2 ' Stopp
Public Const vbMMKeyPlay As Integer = &HB3 ' Wiedergabe/Pause

Setzen Sie in der Form, die die Tasten unterstützen soll, die Eigenschaft 'KeyPreview' auf 'True'

Fügen Sie folgenden Code in die KeyUp-Methode Ihrer Form ein:

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
    Case vbMMKeyStop   ' Multimedia: Stopp
           
    Case vbMMKeyPlay   ' Multimedia: Wiedergabe

    Case vbMMKeyNext   ' Multimedia: nächster Titel (vorwärts)
           
    Case vbMMKeyPrev   ' Multimedia: vorheriger Titel (zurück)
 
  End Select
End Sub

Die Leerzeilen nach den Case-Abfragen müssen natürlich mit Ihren eigenen Funktionsaufrufen gefüllt werden! Das muß nicht unbedingt der 1000. CD-Player sein, den keiner mehr braucht! Denkbar wäre auch die Navigation einer Diashow, oder Ähnliches...

Autor: ralf schlegel
Stand: 07/2009

Nach oben

0004 Shiftstatus korrekt abfragen

Manchmal ist es erforderlich den Status der Shifttasten (Shift, Ctrl, Alt) zu kennen, um im Programmablauf fortzufahren. Viele Programmierer nutzen dazu die API Funktion "GetAsyncKeyState" und wundern sich, warum diese nicht immer korrekt arbeitet. Das liegt i.d.R. daran, dass sie falsch aufgerufen wird! Hier ein Beispiel, wie es richtig geht. Fügen Sie folgenden Code in ein Basic-Modul ein:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal nVirtKey As KeyCodeConstants) As Integer

Public Function getShiftState() As ShiftConstants
  getShiftState = (-vbShiftMask * shKeyPressed(vbKeyShift))
  getShiftState = getShiftState Or (-vbAltMask * shKeyPressed(vbKeyMenu))
  getShiftState = getShiftState Or (-vbCtrlMask * shKeyPressed(vbKeyControl))
End Function
 
Private Function shKeyPressed(ByVal nVirtKeyCode As KeyCodeConstants) As Boolean
  shKeyPressed = (GetAsyncKeyState(nVirtKeyCode) And &H8000& = &H8000&)
End Function

Nun können Sie den Status folgendermaßen abfragen:

If getShiftState = vbCtrlMask Then
  ' mache irgendwas
Else
  ' abbrechen
End If

Autor: ralf schlegel
Stand: 01/2011

Nach oben