关于动态生成控件的问题,急!!!,在线等候

cjx 2005-11-28 08:07:55
事先并不知道要创建何种类型的控件,而是在程序运行中,根据操作者提供的条件,程序查询数据库根据查询结果,由程序动态地生产各种类别的控件(有TStringGrid、TStaticText、TTabSheet等);
也就是根据查询得到的TStringGrid、TStaticText、TTabSheet等字符串产生不同类别的控件。
...全文
215 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmzgz81 2005-11-28
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
str:String;
Test:TObject;
begin
if str='Tdit'then
begin
Test:=TEdit.Create(self);
end;
if str='TButton' then
begin
Test:=TButton.Create(Self);
end;
end;
supercc 2005-11-28
  • 打赏
  • 举报
回复
想做到动态创建任意一个对象好象不太可能,不过如果事先知道共有哪些对象要被创建,你这样的要求是可以实现的
Type
TControlClass=class of TControl; //声明类引用类型

procedure tForm1.CreateControlObj(ControlClass:TControlClass);//创建控件过程
var
AControlObj:TControl;
begin
AControlObj:=ControlClass.Create(self);
AControlObj.Parant:=self;
AControlObj.Name:=AControlObj.ClassName;//以类名作为控件名
AControlObj.SetBounds(10,10,250,150);//设置控件边界
end;

button1的click过程
const
ContrlClassArray:array[0..2] of
TControlClass=(TMonthCalendar,TMemo,TColorBox);
begin
CreateControlObj(ContrlClassArray[0]); //0,1,2可随便填
end;
这个是刘艺的而向对象编程思想中的一个例子,我记不太清了,反正是这么个意思,你可以试试
cjx 2005-11-28
  • 打赏
  • 举报
回复
没人知道吗?
whisht 2005-11-28
  • 打赏
  • 举报
回复
动态创建,没错啊?楼主说细点
cjx 2005-11-28
  • 打赏
  • 举报
回复
如vfork(珠江水洗鸡巴)所说:
var
Btn:TButton
begin
Btn:=TButton.Create(self);
//然后设置Btn的属性就是的.
end;


“Btn:TButton”中的TButton是字符串,而不是类名
vfork 2005-11-28
  • 打赏
  • 举报
回复
var
Btn:TButton
begin
Btn:=TButton.Create(self);
//然后设置Btn的属性就是的.
end;
hmzgz81 2005-11-28
  • 打赏
  • 举报
回复
楼主能否举个例子,有点不太明白你想实现的效果。
ahjoe 2005-11-28
  • 打赏
  • 举报
回复
就是楼上这样了。

5,402

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧