我自己生成个Tshapek控件,然后想通过鼠标的操作对生成的控件移动?procedure TForm1.Button1Click(Sender: TObject);
var
 g:TGPGraphics;
 p:TGPPen;
 myshape:TShape;
begin     myshape:=TShape.Create(self);
     myshape.Parent:=Form1;
     myshape.Width:=50;
     myshape.Height:=50;
     myshape.Pen.Color:=clred;
     myshape.Shape:=stcircle;
     myshape.Left:=random(150);
     myshape.Top:=random(100);
end;
我想动态的生成shape然后,用鼠标对他移动,(有贴加的,到时候还考虑哪个在上面)!谢谢了

解决方案 »

  1.   

    你可以用Typeinfo单元的函数来得到动态的shape的属性var
      PropInfo: PPropInfo;  // 要使用 TypInfo 单元
      k: integer;
    begin
      for k := 0 to Self.ControlCount-1 do
      begin
         if not (Controls[k] is TShape) then
           Continue;
         propInfo := GetPropInfo(Self.Controls[k], 'Left');
         if propInfo <> nil then  // 存在属性
         begin
           if TShape(Controls[k]).Name = 'Shape1' then//根据名称找
           TShape(Controls[k]).Left := 200;
         end;
      end;
    end;
      

  2.   

    Delphi中动态创建控件,并让其跟鼠标移动。
    procedure TForm1.ConMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      releasecapture;
    end;
     
     
    procedure TForm1.ConMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      Con := TControl(Sender);
      setcapturecontrol(TControl(Sender));
      zX := X;
      zY := Y;
    end;
     
     
    procedure TForm1.ConMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
    ds : tcontrol;
    begin
      ds := getcapturecontrol;
      if ds = nil then exit;
      ds.Left := ds.Left + X - zX;
      ds.Top :=  ds.Top + Y - zY;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
     var x:integer;
    begin
    for x:=0 to 10 do
      begin
        with tbutton.create(nil) do
          begin
            parent:=self;
            left:=20;
            height:=20;
            top:=x*20+50;
            caption:=inttostr(x);
            tag:=x;
            OnMouseDown := conMouseDown;
            OnMouseMove := conMouseMove;
            OnMouseUp   := conMouseUp;
          end;
      end;
    end;