Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0640: X- und Y-Achse der Maus invertieren

 von 

Beschreibung 

Wer schon immer einmal erfahren wollte, wie z.B. in Spielen die Mausachsen verdreht werden, erfährt dies hier.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

GetCursorPos, SetCursorPos

Download:

Download des Beispielprojektes [2,13 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Timersteuerelement "tmr_mouseinvert"

Option Explicit

'Benötigte API-Funktionen und Typen
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private x As Long
Private y As Long
Private Tx As Long, Ty As Long

Private Sub Invert()
    Dim pT As POINTAPI
    
    'Auslesen der Mauszeigerkoordinaten
    GetCursorPos pT
    
    'Abstand zwischen momentaner Position und letzter Position bestimmen
    Tx = (pT.x - x)
    Ty = (pT.y - y)
    
    'Sicherheitsabfrage
    'Wenn der Mauszeiger am Rande des Bildschirms ist, ist die
    'Koordinate eine "komische Zahl" ;-) Ausserdem würde der
    'Benutzer nicht mehr vom Rand wegkommen, da Windows die Maus
    'dann blockt...
    
    If Tx > 1500 Then Tx = -10
    If Ty > 1500 Then Ty = -10
    If Tx < -1500 Then Tx = 10
    If Ty < -1500 Then Ty = 10
    
    'Den Mauszeiger an die gewünschte Position setzen
    '(die neue Position minus zweimal den Abstand zwischen
    'der momentanen Position und der letzten Position)
    
    SetCursorPos pT.x - 2 * Tx, pT.y - 2 * Ty
    
    'Den (nun) momentanen Wert zwischenspeichern
    x = pT.x - 2 * Tx
    y = pT.y - 2 * Ty
End Sub

Private Sub Form_Load()
    Dim pT As POINTAPI
    
    'Zwischenspeichern beim Laden, damit der Mauszeiger von dort startet,
    'wo er momentan ist
    
    GetCursorPos pT
    x = pT.x
    y = pT.y
End Sub

Private Sub tmr_mouseinvert_Timer()
    Invert
End Sub

'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Kriechi am 04.06.2006 um 10:37

tipp funktioniert zwar win xp + sp2 mit vb6

aber:
er ruckelt ziemlich ist das normal?

mfg

Kommentar von Andreas Konz am 03.11.2004 um 10:47

Muss in dem Form_load dieses Beispieles nicht noch der Timer aktiviert werden, bzw. ein Intervall angegeben werden?
Ich habe den Code so übernommen, und das Programm lief nicht. Es lief erst, als ich den Timer ein Intervall zugewiesen habe.

Gruß Andi

Kommentar von FanatiX am 24.09.2004 um 13:18

ich glaub dieser tipp iss auch nur gut dazu um arbeitskollegen in den wahnsinn zu treiben :D
...nur son gedanke :D

Kommentar von MichaelG. am 26.02.2004 um 20:47

Damit das aber gut aussieht muss der Timer schnell und somit Resourceungünstig laufen.
In Games wird das Mauszeiger versteckt und es wird ein eigener gezeichnet. Hier kann man bei der Position des eigenen einfach die umgekehrte zur eigentlichen nehmen, dazu ist dann kein Timer erforderlich.

Nur so ein Gedanke :-)
Gruß
Michael