由于至少D2007一个项目文件可以有一个主要来源文件与不同基地的名称。DevExpress演示使使用这样的:E.g。有一个单一的朝文件UnboundListDemo.朝供应的主要来源于两UnboundListDemoD11.dproj和UnboundListDemoD12.dproj.

现在如果我有一个 Project: IOTAProject 然后 Project.FileName 返回dproj文件的名称。我找不到一个"官方"的方式得到dpr的文件名称。是否有任何?一个可以得到它从分析的dproj文件(见 在这里,)但是我更喜欢一个ToolsAPI方法。


编辑: 我想出了这个代码的基础上 乔恩的答案:

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;

哪里是...惯例是从 GX_GenericUtils.


编辑2: 如何创建这个情况:

  1. 创造新的VCL应用程序。
  2. 保存如MyProject.dproj.
  3. 接近项目在IDE。
  4. 在Windows资源管理器,重新命名MyProject.dproj到MyProjectD11.dproj.
  5. 从现在一定要打开MyProjectD11.dproj, MyProject.朝!
有帮助吗?

解决方案

如果你迭代了编辑上的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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top