Поскольку по меньшей мере D2007 файл проекта может иметь основной исходный файл с различным базовым именем. Демоверсии DevExpress используют это: например. существует единственный файл dpr UnboundListDemo.dpr, который служит основным источником как для UnboundListDemoD11.dproj, так и для UnboundListDemoD12.dproj.Как получить основное имя исходного файла из объекта IOTAProject?
Теперь, если у меня есть Project: IOTAProject
, тогда Project.FileName
возвращает имя файла dproj. Я не смог найти «официальный» способ получить имя файла dpr. Есть ли? Можно получить его от разбора файла dproj (см. here), но я бы предпочел метод ToolsAPI.
Edit: Я придумал этот код на основе 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;
где это ... подпрограммы из GX_GenericUtils.
Edit 2: Как создать одну из этих ситуаций:
- Создание нового приложения VCL.
- Сохранить как MyProject.dproj.
- Закрыть проект в IDE.
- В проводнике Windows переименуйте MyProject.dproj в MyProjectD11.dproj.
- С этого момента не забудьте открыть MyProjectD11.dproj, не MyProject.dpr!
Не могли бы вы привести пример, как работают разные имена для .dpr и .dproj? Означает ли это, что тот же .dpr-файл ссылается на несколько файлов .dproj? – dummzeuch
Несколько файлов .dproj - это тот случай, с которым я столкнулся. Я не знаю, как люди DX создали их. Может быть, просто как здесь: http://qc.embarcadero.com/wc/qcmain.aspx?d=57890 в шагах. –
См. Раздел «Редактировать 2» в главном сообщении. –