S sunriverscj Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-15 #1 如何用组件编辑器动态创建控件? 类似于 Query 的 Fields Editor。 我想知道的是如何从组件编辑器向另一个窗体添加控件,代码该如何写。
X xiammy Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-17 #3 好问题! 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!
好问题! 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!
X xiammy Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-17 #4 下面是我的实例: 我实现了一个简单的控件: 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;
下面是我的实例: 我实现了一个简单的控件: 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;
S sunriverscj Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-19 #8 xiammy 你好,我现在是可以动态创建控件了, 不过还有点小问题,动态创建RzComBobox时报错,不知为什么? 还有就是创建后不能不能看见控件,要把窗体保存后再打开才有。 我的QQ是280891951。希望能告知以下,谢谢了。
xiammy 你好,我现在是可以动态创建控件了, 不过还有点小问题,动态创建RzComBobox时报错,不知为什么? 还有就是创建后不能不能看见控件,要把窗体保存后再打开才有。 我的QQ是280891951。希望能告知以下,谢谢了。