新建一个程序,在窗体中随便放些控件,比如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,运行时点击窗体,会发现窗体可以一直复制下去,但点击其它控件,却只能在第一次时可以复制,为什么呢?
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,运行时点击窗体,会发现窗体可以一直复制下去,但点击其它控件,却只能在第一次时可以复制,为什么呢?
解决方案 »
- 有谁用过TDBRichText阿?它和TDBText有什么区别阿?该怎么用阿?
- 《请教》多文档文本编辑的子文档关闭按钮为什么不会关闭子文档,而是最小化
- ADOQuery1:Parameter '书名'not found 错误是怎么回事
- 请问nicesoft的qllgrid怎么嵌入他的LOOKUPCOMBOBOX控件,我嵌入后无法显示出来,100分
- 请问如何用INI文件控制数据库连结信息?
- 请问:在建立socket时如何让程序通过指定网关访问网络?
- 看似简单的问题--字符串排序(DELPHI与SQL SERVER不相同)
- 如何获得本机安装的WINDOWS 版本 和该机的物理内存?
- installshield 打的包反安装时能不能人工选择部分项?
- 用一非常怪的问题(关于MDI)
- 如何取出X年X月有多少天?
- 有谁下过Copular Chat v3.0这源码编译成功的?
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;
AControl.Left := (Sender as TControl).Left+10; //这里位置一直没有改变,所以肯定重合,要用2楼的,用变量控制位置
AControl.Top := (Sender as Tcontrol).Top+10;
新创建窗体onClick的时候会运行TForm1.Onclick,所以可以一直复制下去