Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Mover el Cursor hasta llegar a X,Y (https://www.clubdelphi.com/foros/showthread.php?t=70708)

Alejo15x 06-11-2010 07:37:42

Mover el Cursor hasta llegar a X,Y
 
Hola!

Estoy jugando con la API de windows, para una aplicación en creación.
Necesito mover el cursor (no finjir el click y ya), no. Moverlo hasta llegar a unas pocisiones TPoint.X y TPoint.Y

Esto es algo que cree, pero no funcióna es más, me paraliza la aplicación.
Ya que no estoy muy claro del algoritmo correcto para está acción.

Código Delphi [-]
procedure MoveMouse(X,Y:integer);
var FMousePos:TPoint;
begin
  GetCursorPos(FMousePos);
  repeat
    SetCursorPos( FMousePos.X + 1 , FMousePos.Y + 1);
  until (FMousePos.X = X) and (FMousePos.Y = Y);
end;

Como podría yo mover el mouse, hasta que llege ... ?.

ecfisa 06-11-2010 08:54:10

Hola Alejo15x.

Por lo que veo en tu código, queres un desplazamiento en diagonal, ya que: SetCursorPos( FMousePos.X + 1 , FMousePos.Y + 1); ,
supongo, intenta incrementar la posición X e Y en la misma cantidad.

Una forma de hacerlo podría ser:
Código Delphi [-]
procedure MoveMouse(IniX, IniY, FinX, FinY, Espera: Integer);
begin
  SetCursorPos(IniX, IniY);   // posición inicial
  repeat
    if IniX < FinX then          
      Inc(IniX)               // X hacia abajo
    else                        
      Dec(IniX);              // X hacia arriba
    if IniY < FinY then       
      Inc(iniY)               // Y hacia abajo
    else                       
      Dec(IniY);              // Y hacia arriba 
    SetCursorPos(IniX, IniY); // nueva posición
    Sleep(Espera);            // 0 en parámetro Espera (sin demora)
  until (Mouse.CursorPos.X = FinX) or (Mouse.CursorPos.Y = FinY);
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  MoveMouse(0, 0, Screen.Width-10, Screen.Height-10, 3);
  MoveMouse(Screen.Width-10, Screen.Height-10, 0, 0, 6);
end;

Saludos. :)

Alejo15x 06-11-2010 21:34:51

Muchas Gracias !.


La franja horaria es GMT +2. Ahora son las 06:53:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi