Subject:
如何取得代码所在单元的文件名
[Print This Page]
Author:
atkins
Time:
2008-6-12 21:02
Subject:
如何取得代码所在单元的文件名
如何取得代码所在单元的文件名?
Author:
Passion
Time:
2008-6-12 22:29
你是说Open ToolsAPI里头?
参考CnWizards源码里头CnWizUtils.pas里头的CnOtaGetCurrentSourceFile函数。
Author:
atkins
Time:
2008-6-13 11:39
不使用Open ToolsAPI能否做到?
Author:
atkins
Time:
2008-6-13 11:46
以下是我在网上找到的资料,但好象并不能完全解决问题。
=======================================
在做了个控件,在控件中我想得到当前的单元文件名,请问有哪位大哥会?
我用了这样的方法,但只能得到当前的窗口名.
constructor TSkynewWriteDFM.Create(AOwner: TComponent);
begin
inherited;
fversion:=c_version ;
FDFMfilename:=self.Owner.Name+'.DFM';//在属性列中会出现的
FActive:=false;
end;
self.Owner.Name+'.DFM'
也不是绝对安全(正确)的,比如,将你的控件放在一个Panel中以后。
是我没有说清楚,我的控件是不可见控件,他的Owner只能是Form.
uses TypInfo;
constructor TSkynewWriteDFM.Create(AOwner: TComponent);
begin
inherited;
fversion:=c_version ;
FDFMfilename:=GetTypeData(ClassInfo)^.UnitName + '.DFM';//在属性列中会出现的
//...
end;
不对啊,得到的却是SkynewWriteDFM.DFM
我想得到当前Form对应的单元文件名,即Unit后面的文件名.
^v^ 要学会举一反三
uses TypInfo;
constructor TSkynewWriteDFM.Create(AOwner: TComponent);
begin
inherited;
fversion:=c_version ;
FDFMfilename:=GetTypeData(AOwner.ClassInfo)^.UnitName + '.DFM';//在属性列中会出现的
//~~~~~~~
//...
end;
TObject::ClassInfo 返回类信息指针
通过GetTypeData()可以到底这个指针指向的类描述数据,如所在声明单元名
如果是设计期间的元件,它们的Owner都为当前所设计Form
=======================================
Author:
Passion
Time:
2008-6-13 14:46
明白了,看看TTypeData的结构定义?里头tkClass里头有个UnitName,就是它了。
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0