Hola:
Si sólo son cuadraditos lo que quieres mostrar, puedes hacer uso de los TShape, interceptas los eventos del Mouse (OnMouseDown OnMouseMove y OnMopuseUp) para conseguir tu objetivo. Aquí va un ejemplo del código que acabo de probar, debes enlazar todos los Shapes a estos eventos:
Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
IniP, IniPos : TPoint;
Pressed : Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with TShape(Sender) do
begin
IniP := ClientToScreen (Point(X, Y));
IniPos := Point (Left, Top);
end;
Pressed := TRUE;
end;
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
P : TPoint;
begin
if Pressed then
with TShape(Sender) do
begin
P := ClientToScreen (Point(X, Y));
Left := IniPos.X + P.X - IniP.X;
Top := IniPos.Y + P.Y - IniP.Y;
end;
end;
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pressed := FALSE;
end;
end.
A ver si te sirve