Mover controles de un form en Runtime

    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.


// 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;

    See puede descargar un ejemplo:

  Descargar
  Indice