如何用组件编辑器动态创建控件(100分)

  • 主题发起人 主题发起人 sunriverscj
  • 开始时间 开始时间
S

sunriverscj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用组件编辑器动态创建控件?
类似于 Query 的 Fields Editor。
我想知道的是如何从组件编辑器向另一个窗体添加控件,代码该如何写。
 
LZ 这个问题有点难度
 
好问题!
Form中有一个属性FDesigner: IDesignerHook;来负责和设计器交互:
IDesignerHook = interface(IDesignerNotify)

IDesignerNotify = interface
['{B971E807-E3A6-11D1-AAB1-00C04FB16FBC}']
procedure Modified;
procedure Notification(AnObject: TPersistent; Operation: TOperation);
end;
如果创建控件的时候,指定其Owner为Form,这会触发IDesignerNotify.Notification,
IDE设计器会在窗体单元中添加声明代码。

所以,如果要实现楼主的问题,应该很简单,只要创建的时候,注意指明其Owner为Form。

Good Luck!
 
下面是我的实例:
我实现了一个简单的控件:
TTestNewComp = class(TComponent)
public
constructor Create(AOwenr: TComponent); override;
end;
。。。
constructor TTestNewComp.Create(AOwenr: TComponent);
begin
inherited;
if csDesigning in ComponentState then
begin
TStringField.Create(Self.Owner).Name := 'HHHHHHHH';
end;
end;
我让在设计器中运行的时候,添加了一个StringField控件。
下面是将这个控件搁置到Form上的反应:
type
TForm1 = class(TForm)
HHHHHHHH: TStringField;
TestNewComp1: TTestNewComp;
private
{ Private declarations }
public
{ Public declarations }
end;
 
问得有水平,回答得有水平
 
多人接受答案了。
 
xiammy 你好,我现在是可以动态创建控件了,
不过还有点小问题,动态创建RzComBobox时报错,不知为什么?
还有就是创建后不能不能看见控件,要把窗体保存后再打开才有。
我的QQ是280891951。希望能告知以下,谢谢了。
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
831
DelphiTeacher的专栏
D
后退
顶部