Ver Mensaje Individual
  #3  
Antiguo 15-05-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 24
andres1569 Va por buen camino
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

Última edición por andres1569 fecha: 09-08-2003 a las 19:33:42.
Responder Con Cita