如何从IOTAProject获取主源文件名?

时间:2010-01-08 14:05:28

标签: delphi toolsapi

由于至少D2007项目文件可以有一个主源文件,其基本名称不同。 DevExpress演示使用此:例如有一个单独的dpr文件UnboundListDemo.dpr,它作为UnboundListDemoD11.dproj和UnboundListDemoD12.dproj的主要来源。

现在,如果我有Project: IOTAProject,那么Project.FileName将返回dproj文件名。我找不到获取dpr文件名的“官方”方式。有没有?可以通过解析dproj文件来获取它(参见here),但我更喜欢使用ToolsAPI方法。


修改:我根据Jon's answer提出了这段代码:

function IsProjectSource(const FileName: string): Boolean;
begin
  Result := IsDpr(FileName) or IsBpr(FileName) or IsPackage(FileName);
end;

function GxOtaGetProjectFileName2(Project: IOTAProject; NormalizeBdsProj: Boolean = False): string;
var
  i: Integer;
  Module: IOTAModule;
  Editor: IOTAEditor;
begin
  Result := '';
  if Assigned(Project) then begin
    Result := Project.FileName;
    if NormalizeBdsProj and IsBdsprojOrDproj(Result) then begin
      Module := Project as IOTAModule;
      for i := 0 to Module.ModuleFileCount - 1 do
      begin
        Editor := Module.ModuleFileEditors[i];
        if IsProjectSource(Editor.FileName) then begin
          Result := Editor.FileName;
          Exit;
        end;
      end;
    end;
  end;
end;

其中Is ...例程来自GX_GenericUtils


编辑2 :如何创建以下某种情况:

  1. 创建新的VCL应用程序。
  2. 另存为MyProject.dproj。
  3. 在IDE中关闭项目。
  4. 在Windows资源管理器中,将MyProject.dproj重命名为MyProjectD11.dproj。
  5. 从现在开始一定要打开MyProjectD11.dproj, MyProject.dpr!

1 个答案:

答案 0 :(得分:3)

如果迭代IOTAProject实例上的编辑器,您可能会找到dpr。

var
  Module: IOTAModule;
  Project: IOTAProject;
  Editor: IOTAEditor;
begin
  // Set Project Here....
  Module := Project as IOTAModule;
  for I := 0 to Module.ModuleFileCount - 1 do
  begin
    Editor := Module.ModuleFileEditors[I];

  end;
end;
相关问题