【问题标题】:How to get the main source file name from an IOTAProject?如何从 IOTAProject 获取主要源文件名?
【发布时间】:2010-01-08 14:05:27
【问题描述】:

至少从 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!

【问题讨论】:

  • 您能否举例说明 .dpr 和 .dproj 的不同名称如何工作?这是否意味着,同一个 .dpr 文件在多个 .dproj 文件中被引用?
  • 多个 .dproj 文件是我遇到的情况。我不知道 DX 人是如何创建它们的。也许只是像这里:qc.embarcadero.com/wc/qcmain.aspx?d=57890 在步骤中。

标签: delphi toolsapi


【解决方案1】:

如果您在 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;

【讨论】:

  • 好的,在我的测试用例中给出了 *.dpr 和 *.res。我可以查找所有 dpr/dpk/bpk/... 文件,希望只找到一个。这比我希望的工作量更大,可靠性更低,但总比没有好。我得玩那个。
猜你喜欢
  • 2015-10-10
  • 2013-06-06
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多