至少从 D2007 开始,项目文件可以有一个具有不同基本名称的主源文件。DevExpress 演示利用了这一点:例如,有一个 dpr 文件 UnboundListDemo.dpr 作为 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;
Is... 例程来自GX_GenericUtils。
编辑 2:如何创建以下情况之一:
- 创建新的 VCL 应用程序。
- 另存为 MyProject.dproj。
- 在 IDE 中关闭项目。
- 在 Windows 资源管理器中,将 MyProject.dproj 重命名为 MyProjectD11.dproj。
- 从现在开始一定要打开 MyProjectD11.dproj,而不是MyProject.dpr!