Board logo

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