![]() |
Maus Position ändern??
Hallo,
ich möchte ein kleines Programm schreiben, das beim druck auf W, A, S oder D die Maus verschiebt. Ich habe mit der Taste W angefangen. Um die Maus zu verschiebe habe ich die aktuelle Maus Position abgespeichert, 5 dazu addiert und mit setCursorPos die Position neu gesetzt. Das klappt auch denn wenn ich die Position abfrage ändert diese sich doch auf dem Bildschirm ändert sich nichts wieso??
Delphi-Quellcode:
m.X:= Mouse.cursorPos.X;
m.y:= Mouse.cursorpos.Y; m.Y:= m.y+100; Windows.SetCursorPos(m.X, m.Y); |
AW: Maus Position ändern??
Bei mir klappt das einwandfrei.
Was für ein System hast du? |
AW: Maus Position ändern??
das Programm läuft zurzeit auf
win 2000 |
AW: Maus Position ändern??
Mhm, wenns auf XP geht, müsste es auf W2000 auch gehen.
Wie hast du denn den Keypress eingebunden? Das hier funktioniert z.B. bei mir im FormKeyDown:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var m: TPoint ; begin m.X:= Mouse.cursorPos.X; m.y:= Mouse.cursorpos.Y; case Key of Ord('W') : m.Y:= m.Y-5; Ord('A') : m.X:= m.X-5; Ord('S') : m.Y:= m.Y+5; Ord('D') : m.X:= m.X+5; end; Windows.SetCursorPos(m.X, m.Y); end; |
AW: Maus Position ändern??
ich habe es auch in Form.KeyDown!!
Delphi-Quellcode:
procedure TForm1.keyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin //showmessage(IntToStr(Mouse.cursorpos.x)); if (char(key) = 'W') then begin m.X:= Mouse.cursorPos.X; m.y:= Mouse.cursorpos.Y; up.Enabled:= true; end else begin end; end; procedure TForm1.UpTimer(Sender: TObject); begin //Mouse.CursorPos:= Point(Mouse.CursorPos.X, Mouse.CursorPos.Y+100); m.Y:= m.y+5; Windows.SetCursorPos(m.X, m.Y); end; |
AW: Maus Position ändern??
Ähm, so kann das irgendwie nicht richtig funktionieren....
FormKeyDown wird immer wieder aufgerufen, während du die Taste drückst, und in der Routine setzt du m.Y dauernd auf die aktuelle Position der Maus. Wenn dein Timer dann zuschlägt, kann es sein, dass die Routine bereits inzwischen wieder auf Mouse.cursorPos.Y zurückgesetzt hat. Ausserdem wird der Timer gar nicht abgeschaltet, so dass die Maus dauernd nach oben fliegt. Das ist nicht unbedingt ein guter Ansatz :) Wenn du es unbedingt mit einem Timer machen willst, lass das FormKeyDown ganz weg und schreib deinen UpTimer so:
Delphi-Quellcode:
Das hat den Vorteil, dass du auch gleichzeitiges Drücken von mehreren Tasten handelst.
procedure TForm1.UpTimer(Sender: TObject);
var m: TPoint ; begin m.X := Mouse.cursorPos.X; m.Y := Mouse.cursorpos.Y; if self.Active then begin if (GetAsyncKeyState(Ord('W')) <> 0) then m.Y := m.Y-5; if (GetAsyncKeyState(Ord('A')) <> 0) then m.X := m.X-5; if (GetAsyncKeyState(Ord('S')) <> 0) then m.Y := m.Y+5; if (GetAsyncKeyState(Ord('D')) <> 0) then m.X := m.X+5; Windows.SetCursorPos(m.X, m.Y); end; end; |
AW: Maus Position ändern??
nein, es muss nicht unbedingt ein Timer sein ich wusste nur nicht dass es auch ohne geht.
|
AW: Maus Position ändern??
Wenn der Timer nur eine Verlegenheitslösung war, würde ich das ähnlich wie blackfin weiter oben machen. Evtl. musst Du aber noch die KeyPreview-Eigenschaft der Form auf true stellen.
Delphi-Quellcode:
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); const Offset = 5; var OldPos: TPoint; begin OldPos := Mouse.CursorPos; case Key of Ord('W'): OldPos.Y := OldPos.Y - Offset; Ord('S'): OldPos.Y := OldPos.Y + Offset; Ord('A'): OldPos.X := OldPos.X - Offset; Ord('D'): OldPos.X := OldPos.X + Offset; end; SetCursorPos(OldPos.X,OldPos.Y); end; |
AW: Maus Position ändern??
so ich habe jetzt folgenden Code:
Delphi-Quellcode:
Doch bewegen tut die Maus sich immer noch nicht.
procedure TForm1.keyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if start then begin m.X:= Mouse.cursorPos.X; m.y:= Mouse.cursorpos.Y; case Key of Ord('W') : m.Y:= m.Y-5; Ord('A') : m.X:= m.X-5; Ord('S') : m.Y:= m.Y+5; Ord('D') : m.X:= m.X+5; end; Windows.SetCursorPos(m.X, m.Y); end else begin if char(key) = 'J' then begin start:= true;; showmessage('Steureung gestartet!!'); end; end; end; |
AW: Maus Position ändern??
Bist Du mal durchgesteppt? Wird der Code überhaupt ausgeführt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz