如何得到自身单元名称例如:unit unit1var name: string;怎么能让name = 'unit1';有没有函数之类的

解决方案 »

  1.   

    运行这个程序时已经编译成EXE了,不存在PAS
      

  2.   

    到每个Unit里弄个变量记录Unit的名字,不过这种方法不合题意。
      

  3.   

    VC 裡有 __THIS_FILE__Delphi 沒有
      

  4.   

    Self或this是不是与题相关?(咱没试过)
      

  5.   

    Self或this是对象本身指针,跟单元没关系。
    RTTI不是用来做这个的吧?我想也做不到。在资源里包信息里面有单元文件的名称,不知道可不可以通过这个搞定?
      

  6.   

    通过对象或类型是可以得到的单元名的,基本数据类型就没什么好办法了
    GetTypeData(Tform1.ClassInfo)^.UnitName
    GetTypeData(form1.ClassInfo)^.UnitName
      

  7.   

    uses ToolsAPI;procedure TForm1.Button1Click(Sender: TObject);
    var I,J: Integer;
      Svc: IOTAModuleServices;
      Module: IOTAModule;
      Editor: IOTAEditor;
      Result: IOTAProjectGroup;
      filename: string;
    begin
      if Supports(BorlandIDEServices, IOTAModuleServices, Svc) then
      begin
        for I:=0 to Svc.ModuleCount-1 do
        begin
          if Supports(Module, IOTAProjectGroup, Result) then
          begin
            Module := Svc.Modules[I];
            for J:=0 to Module.ModuleFileCount-1 do
            begin
              Editor := Module.ModuleFileEditors[J];
              if Supports(Editor, IOTAFormEditor, Result) then
              begin
                filename := Editor.FileName;
              end;
            end;
          end;
        end;
      end;
      Result := nil;
    end;
      

  8.   

    to quark:
      RT_RCDATA段中的PACKAGEINFO里面有。
      

  9.   

    to Elysium 你的方法好像不是很通用,不仅你的,JEDI中类似代码也有问题,我的环境是WIN2000+D7,总是返回nil
      

  10.   

    11楼的方法是可行的呀,有试过。
    有两个前提条件:
    1.使用TypInfo单元;
    2.GetTypeData函数使用的参数是类或是类的实例,但该类必须是TPersistent的派生类。
      

  11.   


    uses
      TypInfo;{$M+}
    type
      Ta = class(Tobject)
      end;
    {$M-}procedure TForm1.Button1Click(Sender: TObject);
    var
      a : Ta;
    begin
      ShowMessage(GetTypeData(Ta.ClassInfo)^.UnitName);
    end;
      

  12.   

    GetTypeData可以获取
    ToolsAPI需要Design包支持