我在设计时动态创建的控件,那个控件是由一个控件生成的,被生成的代码放在当前的Form中。我怎样才能在控件中为那个被生成的控件指定事件?
^^^^^^^^^^这件控件是由我的程序生成的。
^^^^^^---------这个控件是要我开发的。
相关贴子:
http://expert.csdn.net/Expert/topic/2179/2179819.xml?temp=.6342737先出50分。(我的分散尽了)如果真正的能解决这个问题。我可以再给你200分。(我有另外一个帐号一直没有用,里面有4000多分,为了这个问题,该是那个帐号出师的时候了。:)
^^^^^^^^^^这件控件是由我的程序生成的。
^^^^^^---------这个控件是要我开发的。
相关贴子:
http://expert.csdn.net/Expert/topic/2179/2179819.xml?temp=.6342737先出50分。(我的分散尽了)如果真正的能解决这个问题。我可以再给你200分。(我有另外一个帐号一直没有用,里面有4000多分,为了这个问题,该是那个帐号出师的时候了。:)
中。我怎样才能在控件中为那个被生成的控件指定事件?
^^^^^^^^^^这件控件是由我的程序生成的。
^^^^^^---------这个控件是要我开发的。
type
TBtnInfo = Record
BtnName:TOutlookButton;
BtnCaption:String;
ImageIndex:Integer;
end;
procedure TMainForm.AddButton(var BtnInfo :TBtnInfo);
begin
btnInfo.BtnName:= MainBar.ActiveHeader.CreateButton(btnInfo.BtnCaption);
btnInfo.BtnName.OnClick:= SysBtnClick; //这就是按钮的onclick事件
btnInfo.BtnName.LargeImages:= DataModule1.LargeImage;
btnInfo.BtnName.SmallImages:= DataModule1.SmallImage;
btnInfo.BtnName.ImageIndex:= btnInfo.ImageIndex;
end;
uses:
DesignIntf, ToolsAPIvar
Module: IOTAModule;
Editor:IOTASourceEditor;
Writer: IOTAEditWriter;
begin
Module := (BorlandIDEServices as IOTAModuleServices).Modules[0];
Editor:=Module.CurrentEditor as IOTASourceEditor;
Writer:=Editor.CreateWriter();
Writer.Insert('11')
Writer:=nil;
end;你可以试试这段代码,可是比较讨厌的是:加代码前还要计算所加的位置,用reader得到form类的起始位置,然后再类定义中加入Button1Click()的声明,然后找到implementation部分,再加入Button1Click()的实现,这个定位就相当于语法分析,我觉得太复杂,而且不安全,我再找找其它方法.
constructor TMyComponent.Create(AOwner: TComponent);
var
Btn:TButton;
begin
inherited;
if (csDesigning in ComponentState) then begin
btn:=TButton.Create(AOwner);
btn.Parent:=TWinControl(AOwner);
btn.Left:=100;
btn.Top:=100;
btn.OnClick:=OnButtonClick;
btn.Show;
end;
end;
的方法来加的话,只有dfm文件中加入了button,而pas文件中没有该控件的声明,所以程序运行时会有控件无法找到的异常,不知这个你是怎么实现的。
我在这里测试很正常。另外,不知是不是你代码的原因,你没有为那个新建的btn做个名字:btn.name:='Btn1';你加上上面那个试试。你所说的ToolsAPI我在这里试试。
TO:ImFool(搞技术的都是傻瓜)
如果真的那么容易,你自己试一下吧。注意,要:
在控件中为[设计时 动态 创建 的 控件] 指定事件.
在设计时至负责创建控件,在运行时,则寻找这个创建出来的控件,并重定向它的OnClick事件。constructor TMyComponent.Create(AOwner: TComponent);
var
Btn:TButton;
begin
inherited;
if (csDesigning in ComponentState) then begin
if not Assigned(AOwner.FindComponent('hellobtn')) then begin
btn:=TButton.Create(AOwner);
btn.Name:='hellobtn';
btn.Parent:=TWinControl(AOwner);
btn.Left:=100;
btn.Top:=100;
btn.Show;
end;
end
else begin
btn:=TButton(AOwner.FindComponent('hellobtn'));
if Assigned(btn) then begin
btn.OnClick:=OnButtonClick;
end;
end;
end;
SysUtils, Classes, Windows, Forms, Controls, StdCtrls, DesignIntf, ToolsAPI;type
TMyComponent = class(TComponent)
private
{ Private declarations }
FOldButtonClick:TNotifyEvent;
procedure OnButtonClick(Sender:TObject);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TMyComponent]);
end;{ TMyComponent }procedure TMyComponent.OnButtonClick(Sender:TObject);
begin
MessageBox(0,pchar((Sender as TButton).Name),'',0);
if Assigned(FOldButtonClick) then begin
FOldButtonClick(Sender);
end;
end;constructor TMyComponent.Create(AOwner: TComponent);
var
Btn:TButton;
begin
inherited;
if (csDesigning in ComponentState) then begin
if not Assigned(AOwner.FindComponent('hellobtn')) then begin
btn:=TButton.Create(AOwner);
btn.Name:='hellobtn';
btn.Parent:=TWinControl(AOwner);
btn.Left:=100;
btn.Top:=100;
btn.Show;
end;
end
else begin
btn:=TButton(AOwner.FindComponent('hellobtn'));
if Assigned(btn) then begin
FOldButtonClick:=btn.OnClick;
btn.OnClick:=OnButtonClick;
end;
end;
end;end.
作者 :LazyBoy
日期 :2003-9-4
Email:[email protected]
MSN :[email protected]
QQ :59219588
说明:先安装yDBFormWizard.dcu,安装后面板上多了一个yzt面板。然后打开DEMO/Project1.dpr。在控件yDBFormWizard的属性编辑器上把Active属性设为True。你看到了什么?
注意:1.yDBFormWizard激活后,他要做的事做完后就"自杀"了!
2.数据库的字段不能用中文字段名。
3.使用yDBFormWizard时,当前的Form最好是空的。
4.如果在同一个窗口中多次使用yDBFormWizard,应把yDBFormWizard生成的所有控件删除掉。否则因为控件同名而无法继续。
____________________________________________________________
yDBFormWizard属性:Active :开始创建数据窗口
DataSource :不用说你也知道吧?
Fields :还没有完成:(
Name :这个不用解释吧?
Tag :鬼才知道这个能干什么事件:
无方法:
无
____________________________________________________________最后,别忘记到CSDN帮我回答这个问题:http://expert.csdn.net/Expert/topic/2216/2216893.xml?temp=.3833734
http://www.sjrj.com/yzt/yDBFormWizardDEMO.rar