Поскольку по крайней мере 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!