Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mausbewegung(!) simulieren (https://www.delphipraxis.net/90823-mausbewegung-simulieren.html)

himitsu 15. Apr 2012 16:28

AW: Mausbewegung(!) simulieren
 
Relativ zu welchem Punkt sind denn Top und Left?

Und zu welchem Punkt ist die Mausposition relativ?


Tja, da wirst du wohl umrechnen müssen.

(PS: schau mal nach einer Methode des Buttons, welche mit Client anfängt und ein To enthält)

MiKaEr 15. Apr 2012 16:34

AW: Mausbewegung(!) simulieren
 
so habe ich es nun:
Delphi-Quellcode:
var
 P: TPoint;
begin
 P.X := Label2.Left;
 P.Y := Label2.Top;
 P := Label2.ClientToScreen(P);

 MoveMouse(P.X - GetSystemMetrics(SM_CYSIZEFRAME), P.Y - GetSystemMetrics(SM_CYCAPTION) +
   GetSystemMetrics(SM_CYSIZEFRAME), 10);
end;
bei manchen komponenten sind die endpositionen aber noch falsch.

omata 15. Apr 2012 16:39

AW: Mausbewegung(!) simulieren
 
Vielleicht so...

Delphi-Quellcode:
procedure MoveMouse(X, Y, Speed: Cardinal);
var
  Maus: TPoint;
  mx, my, nx, ny, len: double;
begin
  GetCursorPos(Maus);
  mx := Maus.X;
  my := Maus.Y;

  while (mx <> X) or (my <> Y) do begin
    nx := X - mx;
    ny := Y - my;
    len := sqrt(nx * nx + ny * ny);

    if len <= 1 then begin
      mx := X;
      my := Y;
    end
    else begin
      nx := nx / (len * 0.5);
      ny := ny / (len * 0.5);
      mx := mx + nx;
      my := my + ny;
    end;

    SetCursorPos(Round(mx), Round(my));
    Sleep(Speed);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var P:TPoint;
begin
  P:=Self.ClientToScreen(Point(
    Button2.Left + (Button2.Width div 2),
    Button2.Top + (Button2.Height div 2)
  ));
  MoveMouse(P.X, P.Y, 10);
end;

MiKaEr 15. Apr 2012 16:44

AW: Mausbewegung(!) simulieren
 
kann es vielleicht daran liegen dass manche meiner komponenten auf panels liegen und ich die mit align = alleft oder alclient versehen habe?

omata 15. Apr 2012 16:53

AW: Mausbewegung(!) simulieren
 
Ja, und wenn du das so machst...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MouseToControl(Button2);
end;

procedure TForm1.MouseToControl(Control: TWinControl);
var P:TPoint;
begin
  P:=Control.Parent.ClientToScreen(Point(
    Control.Left + (Control.Width div 2),
    Control.Top + (Control.Height div 2)
  ));
  MoveMouse(P.X, P.Y, 10);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.
Seite 2 von 2     12   

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