Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Posicion del mouse (https://www.clubdelphi.com/foros/showthread.php?t=29034)

Luciano M. 10-01-2006 21:59:26

Posicion del mouse
 
:confused: Hola, me gustaria saber si alguien sabe como conseguir las coordenadas del mouse fuera de la aplicacion de delphi, es decir sobre el escritorio. Gracias!!

roman 10-01-2006 22:07:37

Casi juraría que con Mouse.CursorPos

// Saludos

marcoszorrilla 10-01-2006 22:39:09

He estado buscando un código que no recuerdo de dónde descargue y finalmente lo he encontrado, puesto que viene a proposito.

Código Delphi [-]

implementation

{$R *.dfm}

function PointToPointDist(Ax, Ay, Bx, By: double): double;
begin
  Result := sqrt(sqr(Bx - Ax) + sqr(By - Ay));
end;


function MinDistPointLine(Px, Py, Ax, Ay, Bx, By: double): double;
var
  q: double;
begin
  if (Ax = Bx) and (Ay = By) then
  begin
    {Point to point}
    Result := PointToPointDist(Px, Py, Ax, Ay);
  end
  else
  begin
    {Minimum}
    q := ((Px - Ax) * (Bx - Ax) + (Py - Ay) * (By - Ay)) / (sqr(Bx - Ax) + sqr(By - Ay));
    {Limit q to 0 <= q <= 1}
    if q < 0 then
      q := 0;
    if q > 1 then
      q := 1;
    {Distance}
    Result := PointToPointDist(Px, Py, (1 - q) * Ax + q * Bx, (1 - q) * Ay + q * By);
  end;
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var  a:double;
begin
 Label1.Caption:=inttostr(x)+'  '+inttostr(y);
 a:=MinDistPointLine(x, y, 100, 100, 200, 200);

 //Here you choice the width of line - if single use 0 .
 //In my case I use <2 ( mean 0 and 1 ) because I have a 3 pixels width .
 //This mean 1-0-1 . 0 is the line center .

 if a<2  then Label2.Caption:='The mouse is over the line' else
 Label2.Caption:='The mouse isn''t over the line';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Width:=3;
  Canvas.MoveTo(100, 100);
  Canvas.LineTo(200, 200);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 {x1:=100;
 y2:=100;
 x2:=200;
 y2:=200; }
end;

end.

Un Saludo.

marcoszorrilla 10-01-2006 22:45:41

He estado probando la opción que cita Román y no hay comparación me quedo con ella.

Código Delphi [-]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Label1.Caption:=IntToStr(Mouse.CursorPos.y)+','+IntToStr(Mouse.CursorPos.x);
end;

Un Saludo.

CHiCoLiTa 11-01-2006 14:33:45

Creo que se refiere fuera de la propia aplicacion
Para eso tendrias que capturar el hook del raton
Pasate por Trucomania y mira en el numero 414, que creo que es lo que buscas

roman 11-01-2006 17:34:35

Bueno pero, Luciano no habló de movimiento del ratón, sólo saber las coordenadas del cursor, y ésas en todo momento, esté donde esté el ratón, están dadas por Mouse.CursorPos.

// Saludos

delphi.com.ar 11-01-2006 17:45:12

Cita:

Empezado por roman
Bueno pero, Luciano no habló de movimiento del ratón, sólo saber las coordenadas del cursor, y ésas en todo momento, esté donde esté el ratón, están dadas por Mouse.CursorPos.

Tal cual, el método Mouse.CursorPos utiliza la winapi GetCursorPos (No se porque siempre utilicé la api en lugar del objeto mouse :p), que obtiene la posición del mouse sin importar si el puntero esta sobre una ventana del mismo proceso

Cita:

The GetCursorPos function retrieves the cursor's position, in screen coordinates.

Saludos!

roman 11-01-2006 17:59:51

Cita:

Empezado por delphi.com.ar
(No se porque siempre utilicé la api en lugar del objeto mouse :p)

La verdad es que yo también usé GetCursorPos y sí sé porqué: pasó mucho tiempo antes de que me enterase de la existencia del objeto Mouse :o

// Saludos

delphi.com.ar 11-01-2006 19:05:16

Cita:

Empezado por roman
La verdad es que yo también usé GetCursorPos y sí sé porqué: pasó mucho tiempo antes de que me enterase de la existencia del objeto Mouse

es lo que sospecho :D


La franja horaria es GMT +2. Ahora son las 04:49:55.

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