type
TForm1 = class(TForm)
DatDao1: TDatDao;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
问题
1 为什么加到Form1上的控件,例如TButton,不用调用create方法都能初始化并分配内存?
2 TDatDao是我自定义的对象,其构造器是 create(path:String)这样的,但是,我把它做成控件后,它好像是自动终始化了,我应该怎么输入path这个参数呢? 我试过 DatDao1.create('C:\aaa');这样就出错了,报错说“stack overflow”分数不多了,请大家帮帮忙,谢谢。
TForm1 = class(TForm)
DatDao1: TDatDao;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
问题
1 为什么加到Form1上的控件,例如TButton,不用调用create方法都能初始化并分配内存?
2 TDatDao是我自定义的对象,其构造器是 create(path:String)这样的,但是,我把它做成控件后,它好像是自动终始化了,我应该怎么输入path这个参数呢? 我试过 DatDao1.create('C:\aaa');这样就出错了,报错说“stack overflow”分数不多了,请大家帮帮忙,谢谢。
解决方案 »
- 判断某一项的值,再插入listbox怎么弄啊,头都大了
- 终止线程时报错THREAD ERROR 句柄无效 6 在线等!
- 急需文件备份系统的DELPHI源代码!!!!
- 关于excel导出的格式问题!?
- 怎样增加TCheckListBox带左面的下拉条和底部的水平拉条的属性?
- image1覆盖image2,image1中间为透明可以看到image2,我想把他们合为一张图片,该如何解决?
- 自带的做安装程序能不能将所有要安装的文件或者DLL做成只有一个.exe 像QQ!
- 设定软件的使用权限问题
- 请教一个用DELPHI调用DBF的问题,不好解决的。
- 如何报考程序员
- 读取数据库中的图片问题
- 如何注销进程中的某个应用程序(.exe)
lz的Path可以做成一个属性,然后在这个构造函数里使用这个属性就可以了。
这个属性Publish之后,在属性窗中可以看到,设置它就行了,运行时它会在构造时加载。
我一般是这样用的。
function InternalReadComponentRes(const ResName: string; HInst: THandle; var Instance: TComponent): Boolean;
var
HRsrc: THandle;
begin { avoid possible EResNotFound exception }
if HInst = 0 then HInst := HInstance;
HRsrc := FindResource(HInst, PChar(ResName), RT_RCDATA);
Result := HRsrc <> 0;
if not Result then Exit;
with TResourceStream.Create(HInst, ResName, RT_RCDATA) do
try
Instance := ReadComponent(Instance);
finally
Free;
end;
Result := True;
end;到Form1上的控件信息会保存到窗体文件中---Unit1.dfm
代码编译后就保存在程序的资源中,
窗体创建的时候则通过上面的代码载入资源并创建这些控件。这种创建方式只会调用TDatDao.Create(Form1);而不会调用TDatDao.Create(Form1, 'xxxxxx')
所以要实现你的功能还需要将Path作为属性
property Path: string read FPath write FPath;注意:DatDao1.Create()是错误的TDatDao.Create()才可以
因为Create就是构建实例,而DatDao1本身已经被构建过了