新建一个程序,在窗体中随便放些控件,比如TButton,TEdit等,然后写个以下函数,该函数的作用是复制相同组件:
procedure TForm1.CloneComp(Sender: TObject);
var
  AControl: TControl;
  ContentText: string;
begin
  AControl := TControlClass(Sender.ClassType).Create(self);
  AControl.Parent := (Sender as TControl).Parent;
  AControl.Left := (Sender as TControl).Left+10;
  AControl.Top := (Sender as Tcontrol).Top+10;
  AControl.Show;
  SetLength(ContentText,50);
  (Sender as TControl).GetTextBuf(Pchar(ContentText),50);
  ContentText := ContentText + '*';
  (Sender as TControl).SetTextBuf(PChar(ContentText));
end;将窗体自己以及上面所有控件的OnClick事件都赋为CloneComp,运行时点击窗体,会发现窗体可以一直复制下去,但点击其它控件,却只能在第一次时可以复制,为什么呢?

解决方案 »

  1.   

    重合了,你看不到。var i: integer;
    procedure TForm1.CloneComp(Sender: TObject);
    var
      AControl: TControl;
      ContentText: string;
    begin
      AControl := TControlClass(Sender.ClassType).Create(self);
      AControl.Parent := (Sender as TControl).Parent;
      AControl.Left := (Sender as TControl).Left+ i;
      AControl.Top := (Sender as Tcontrol).Top + i;
      AControl.Show;
      SetLength(ContentText,50);
      (Sender as TControl).GetTextBuf(Pchar(ContentText),50);
      ContentText := ContentText + '*';
      (Sender as TControl).SetTextBuf(PChar(ContentText));
      i := i + 10;
    end;
      

  2.   

    hoho,俺来蹭分
     AControl.Left := (Sender as TControl).Left+10; //这里位置一直没有改变,所以肯定重合,要用2楼的,用变量控制位置
      AControl.Top := (Sender as Tcontrol).Top+10;
      

  3.   

    点击新创建的窗体,可以一直复制下去,点击新创建的其它控件,却不可以如窗体一样复制下去,为什么呢?新创建的其它控件的onClick事件没有赋为CloneComp,所以不可以复制下去
    新创建窗体onClick的时候会运行TForm1.Onclick,所以可以一直复制下去
      

  4.   

    you new control's click event not assigned