Ver Mensaje Individual
  #9  
Antiguo 30-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita