Mauszeiger positionieren

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von socomjoy.

    Mauszeiger positionieren

    wie im Titel kurz erwähnt geht es darum den Cursor neu zu positionieren - jedoch nicht an einer festen Stelle (x, y) bzw. (600, 670), sondern am liebsten auf die Position, an der ein bestimmtes Label befindlich ist.

    Mein Vorhaben:Ich progge ein kleines Spielchen, welches im großen und ganzen auf MouseOver basiert.
    Ziel ist es mit der Maus bzw. mit dem Cursor von einem Anfangslabel (lblStart) über weitere Labels (lbl1, lbl2, ...) zum Ziel (lblStop) zu gelangen, ohne dabei von einem der genannten Labels "abzurutschen" - rutscht man ab, so entlädt sich die Form (unload) und lädt sich neu.

    Funktioniert auch soweit, bloß ist dies natürlich nicht elegant gelöst: Schöner fände ich es, wenn der Cursor abrutscht, also im Spiel verliert, dieser zurück zur Anfangsposition gesetzt wird (also zu lblStart).

    Nun kann man zwar stumpf hingehen und im Script programmieren, dass im Falle des Verlierens der Cursor auf (x, y) (wobei x und y die Positionen sind, an denen sich lblStart befindet) gesetzt wird. Doch spielt man dieses Spiel auf einem anderen PC mit anderer Auflösung, wird Position (x, y) dann bei demjenigen natürlich ein ganz anderer Bereich sein und eben nicht der Bereich von lblStart - oder?!

    Deshalb mein Lösungsansatz:Im Falle des Verlierens soll überprüft werden, wo lblStart sich befindet (ist ja von Level zu Level und vor allem PC zu PC unterschiedlich) und genau dahin soll dann auch der Cursor platziert werden.


    Ansonsten:Ist all dies so realisierbar? Was wird alles benötigt? Kann man besser anders vorgehen/denke ich zu kompliziert? Anregungen? Ideen? Kritik? ...? - Raus damit!

    Vielen Dank schon jetzt und mit freundlichen Grüßen,

    socomjoy
    Hallo socomjoy,
    folgender Code platziert den Mauszeiger mittig über dem angegebenem
    Control (Container des Controls muss die Form sein):

    Visual Basic-Quellcode

    1. Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    2. Private Sub Command1_Click()
    3. Call SetCursorToCtrl(Label1) ' Mauszeiger über Label1
    4. End Sub
    5. Private Sub SetCursorToCtrl(Dest As Control)
    6. Dim OldMode&, Rand!, XPos&, YPos&
    7. With Me
    8. OldMode = .ScaleMode
    9. .ScaleMode = vbTwips
    10. Rand = (.Width - .ScaleWidth) / 2
    11. XPos = (.Left + Rand + Dest.Left + Dest.Width / 2) / Screen.TwipsPerPixelX
    12. YPos = (.Top + .Height - .ScaleHeight - Rand + Dest.Top + Dest.Height / 2) / Screen.TwipsPerPixelY
    13. .ScaleMode = OldMode
    14. End With
    15. Call SetCursorPos(XPos, YPos)
    16. End Sub

    Für ein Control mit hwnd-Eigenschaft (z.B. Picturebox) wäre es einfacher.

    @skyscater: Die Frage bezog sich auf VB6.
    Gruss,

    Neptun

    skyscater schrieb:

    hallo,
    So setzt du den Mauscursor bei jedem pc und bei allen Auflösungen immer auf dein lblStart:

    Visual Basic-Quellcode

    1. Windows.Forms.Cursor.Position = Me.PointToScreen(lblStart.Position)

    mfg.skyscater



    Hallo, es ist lange her, ich weiß, doch nun, wo ich auf VB.net umgestiegen bin, brauche ich es tatsächlich für VB.net und nicht mehr für VB6...

    Mit den Zeilen von skyscater klappt es leider nicht, folgende Fehlermeldung erscheint:

    >> "Position" ist kein Member von "System.Windows.Forms.Label". <<
    Versuche mal anstatt von Position

    Visual Basic-Quellcode

    1. .Location
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.