Como yo llego primero, pues yo mismo
ScreenToClient y su homologo ClientToScreen vienen con cualquier objeto derivado de la clase Tcontrol, por tanto lo podemos usar en formularios y otros especimenes
.
Descripción: ScreenToClient Segun una coordenada pasada por parametro, la interpreta como que pertenece a la pantalla, y te devuelve la coordenada según el control que se llame, Ejemplo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var PuntoCliente, Punto:TPoint;
begin
Punto.X := 100;
Punto.Y := 40;
PuntoCliente := Form1.ScreenToClient(Punto);
Memo1.Lines.Add(' y '+IntToStr(PuntoCliente.Y)+ ' x '+ IntToStr(puntocliente.X));
Button1.Top:= PuntoCliente.Y;
Button1.left:= PuntoCliente.x;
end;
Punto está en coordenadas de la pantalla.
PuntoCliente es
esa misma coordenada pero dentro del Formulario Form1.
Aclaraciones:
La pantalla empieza en 0,0 en la esquina superior izquierda.
Un Form, tiene la coordenada 0,0 igualmente en su esquina superior izquierda.
Si la ventana no tiene bordes, ni titulo, y está maximizada, las coordenadas Punto y PuntoCliente coinciden.
Dicho en plan "Lepero" : Coge un rotulador y pinta en tu Monitor un punto, digamos el 100,40 (100 pixels a la derecha, 40 pixels hacia abajo de la pantalla), Ahora PuntoCliente, te dice ese punto rotulado, qué coordenada es esa, respecto a Form1. OJO, puede dar coordenadas negativas, recuerda que el origen ahora, es la esquina superior izquierda de Form1 !!!
Ejecutas el programa:
Maximizas el programa y pulsas sobre el boton, El boton se mueve a las nuevas coordenas.
Si la ventana Form1 no está maximizada, el boton desaparece, ya que toma coordenadas negativas.
ClientToScreen:
Código Delphi
[-]
procedure TForm1.Button7Click(Sender: TObject);
var PuntoCliente, Punto:TPoint;
begin
PuntoCliente.X := 100;
PuntoCliente.Y := 40;
Punto := Form1.ClienttoScreen(PuntoCliente);
Memo1.Lines.Add(' y '+IntToStr(Punto.Y)+ ' x '+IntToStr(punto.X));
end;
En este caso, depende de donde tengas la ventana, para que ese punto se traduzca a coordenadas de la pantalla.
Un saludo y espero se entienda.