![]() |
Mouse Move to (x,y) Bewegung sehen
Hallo ich möchte das sich mein Cursor von a nach b Bewegt. Ich versuche es mit einer Schleife
Delphi-Quellcode:
Das Problem ist er läuft bis zum linken rand durch und das Programm hängt
procedure TForm1.Button3Click(Sender: TObject);
var p:TPoint; begin m:=0; repeat getcursorPos(p); SetCursorPos(p.x+m, p.y); m:=m-1; sleep(10); getcursorPos(p); until p.x=100; end; Setze ich
Delphi-Quellcode:
auf
until p.x=100;
Delphi-Quellcode:
dann klappt es.
until p.x<100;
Aber er bleibt nie genau bei p.x=100 stehen. Mal bei 98 mal bei 74.... Was kann ich Hier Ändern ???? |
AW: Mouse Move to (x,y) Bewegung sehen
Einfach mal im Debugger die Werte kontrollieren, dann siehst Du es schon, was Du da doppelt gemoppelt hast.
|
AW: Mouse Move to (x,y) Bewegung sehen
Delphi-Quellcode:
Das war es
m:=m-1;
habe es geändert auf
Delphi-Quellcode:
m:=-1;
|
AW: Mouse Move to (x,y) Bewegung sehen
:thumb:
[edit] Die Alternative wäre gewesen, den GetCursorPos-Aufruf einmalig vor der Schleife, aber nicht mehr innherhalb derer auszuführen. [/edit] |
AW: Mouse Move to (x,y) Bewegung sehen
so nun habe ich sleep auf (10) gesetz der mauszeiger brauch aber zu lange.
nunmehr würde ich m:=-10 setzen dann bekommt er aber nicht die 100 wenn ich until p.x=100 setze. wie kriege ich das am besten gelöst. eine möglichkeit wäre sicherlich until p.x <200 zusetzen und dann mit einer weitere schleife mit m=-1 auf 100 runterlaufen zu lassen. aber es hängt ja auch immer davon ab an welcher pos. ich den Button anklicke. Die andere möglichkeit wäre die getcursorPos(p); beim klick zu bestimmen und je nach dem was dichter liegt eine setcursor position zu setzten Beispiel Mausklick der Cursor befindet sich bei p.x = 657 dann setcursorpos (660,600) wenn er sich bei p.x = 653 dann setcursorpos (650,600). Wie kriege ich das am besten umgesetzt. |
AW: Mouse Move to (x,y) Bewegung sehen
Habe es jetzt so gelöst
Delphi-Quellcode:
hat noch jemand einen Vorschlag ???
procedure TForm1.Button3Click(Sender: TObject);
var p:TPoint; begin edit1.Text:=''; //zur Kontrolle edit1.Repaint; m:=0; repeat getcursorPos(p); SetCursorPos(p.x+m, p.y); m:=-10; sleep(10); until p.x<120; if p.x<120 then getcursorPos(p); m:=0; repeat getcursorPos(p); SetCursorPos(p.x+m, p.y); m:=-1; sleep(10); until p.x=100; edit1.Text:=inttostr(p.X); //Zur Kontrolle end; |
AW: Mouse Move to (x,y) Bewegung sehen
Ja, 2: rücke mal vernünftig ein, damit wir das hier auch nachvollziehen können, und teste den Code mal mit der initialen Maus-Koordinate von z.B. X: 90 und Y:50.
|
AW: Mouse Move to (x,y) Bewegung sehen
Man kann das auch dynamisch machen:
Delphi-Quellcode:
procedure TForm1.Button12Click(Sender: TObject);
var p:TPoint; i, d:Integer; begin Memo1.clear; d:=800 div 20; //800 Wegpunkte - nur Beispiel, kann man auch berechnen... for i := 1 to d do BEGIN getcursorPos(p); Memo1.lines.add(inttostr(p.X)); SetCursorPos(p.x-(i div 2), p.y); sleep(20); END; for i := d downto 1 do BEGIN getcursorPos(p); Memo1.lines.add(inttostr(p.X)); SetCursorPos(p.x-(i div 2), p.y); sleep(20); END; edit1.Text:=inttostr(p.X); //Zur Kontrolle end; |
AW: Mouse Move to (x,y) Bewegung sehen
Nicht, wenn es eine globale Variable ist.
|
AW: Mouse Move to (x,y) Bewegung sehen
Eine globale Varable m wird in dieser Procedure nicht gebraucht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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