Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mouse Move to (x,y) Bewegung sehen (https://www.delphipraxis.net/177827-mouse-move-x-y-bewegung-sehen.html)

Natcree 29. Nov 2013 12:17

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:
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;
Das Problem ist er läuft bis zum linken rand durch und das Programm hängt

Setze ich
Delphi-Quellcode:
until p.x=100;
auf
Delphi-Quellcode:
until p.x<100;
dann klappt es.

Aber er bleibt nie genau bei p.x=100 stehen. Mal bei 98 mal bei 74....

Was kann ich Hier Ändern ????

DeddyH 29. Nov 2013 12:19

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.

Natcree 29. Nov 2013 12:27

AW: Mouse Move to (x,y) Bewegung sehen
 
Delphi-Quellcode:
m:=m-1;
Das war es

habe es geändert auf
Delphi-Quellcode:
m:=-1;

DeddyH 29. Nov 2013 12:27

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]

Natcree 29. Nov 2013 12:54

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.

Natcree 29. Nov 2013 13:18

AW: Mouse Move to (x,y) Bewegung sehen
 
Habe es jetzt so gelöst

Delphi-Quellcode:
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;
hat noch jemand einen Vorschlag ???

DeddyH 29. Nov 2013 13:50

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.

hathor 29. Nov 2013 14:23

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;

DeddyH 29. Nov 2013 14:28

AW: Mouse Move to (x,y) Bewegung sehen
 
Nicht, wenn es eine globale Variable ist.

hathor 29. Nov 2013 15:17

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 00:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz