2010-01-08 3 views
1

Поскольку по меньшей мере 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: Как создать одну из этих ситуаций:

  1. Создание нового приложения VCL.
  2. Сохранить как MyProject.dproj.
  3. Закрыть проект в IDE.
  4. В проводнике Windows переименуйте MyProject.dproj в MyProjectD11.dproj.
  5. С этого момента не забудьте открыть MyProjectD11.dproj, не MyProject.dpr!
+0

Не могли бы вы привести пример, как работают разные имена для .dpr и .dproj? Означает ли это, что тот же .dpr-файл ссылается на несколько файлов .dproj? – dummzeuch

+0

Несколько файлов .dproj - это тот случай, с которым я столкнулся. Я не знаю, как люди DX создали их. Может быть, просто как здесь: http://qc.embarcadero.com/wc/qcmain.aspx?d=57890 в шагах. –

+0

См. Раздел «Редактировать 2» в главном сообщении. –

ответ

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; 
+0

ОК, что дает * .dpr и * .res в моем тестовом примере. Я могу искать все файлы dpr/dpk/bpk/... и надеюсь, что найду только одно. Это больше работает и менее надежна, чем я надеялся, но лучше, чем ничего. Мне придется поиграть с этим. –

Смежные вопросы