Inicio > Delphi, Trucos > Mover controles de un form en Runtime

Mover controles de un form en Runtime

sábado, 2 de febrero de 2008 Dejar un comentario Ir a comentarios
Share Button

Creando tres sencillos procedimientos en un formulario se pueden mover controles visuales en Runtime colocados en un form siempre que deriven de TControl. Basta con definir los siguientes procedimientos y asignarlos a todos los controles que queramos mover; Además se deben definir dos variables en la parte privada del form:

NOTA: Los procedimientos se deben definir no en la parte privada, sino como eventos del form.

En la parte final de artículo se puede descargar un ejemplo compilado con Delphi 6.

  • procedure MouseMove;
  • procedure MouseUp;
  • procedure MouseDown;
// Definirlos como ventos del form
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton; 
                           Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton; 
                               Shift: TShiftState; X, Y: Integer);
 
...
 
// Definir éstas variables en la parte privada...
private
  Capturing:Boolean;
  MouseDownSpot:TPoint;
 
....
 
// IMPLEMENTACION
// Procedimintos a asignar a los eventos de los controles...
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  // Estamos capturando?
  if Capturing then begin
    // Mover el componente
    TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
    TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
 
 
procedure TForm1.MouseUp(Sender: TObject; Button: TMouseButton; 
                            Shift: TShiftState; X, Y: Integer);
begin
  // Estamos capturando?
  if Capturing then begin
    ReleaseCapture; // Liberar la captura
    Capturing := false;
    TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
    TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
 
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; 
                                          Shift: TShiftState; X, Y: Integer);
begin
  // Comenzar la captura y movimiento
  Capturing := true;
  MouseDownSpot.X := x;
  MouseDownSpot.Y := Y;
end;

Se puede descargar un ejemplo:

Descargar

Vota este post
Categories: Delphi, Trucos Tags: , ,
Subscribe
Notify of
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

2 Comments
Inline Feedbacks
Ver todos los comentarios
Walter
Walter
13 years ago

Buenísimo, muy útil y claro. Muchas gracias.

Pei Iborra
Pei Iborra
4 years ago

Fantástico truco! Muchísimas gracias, Neftalí por compartir tus conocimientos.

2
0
Would love your thoughts, please comment.x
()
x