由于至少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 :如何创建以下某种情况:
答案 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;