2010-01-08 8 views
1

Depuis au moins D2007, un fichier de projet peut avoir un fichier source principal avec un nom de base différent. Les démos de DevExpress en font usage: E.g. Il existe un seul fichier dpr UnboundListDemo.dpr qui sert de source principale pour UnboundListDemoD11.dproj et UnboundListDemoD12.dproj.Comment obtenir le nom du fichier source principal à partir d'un IOTAProject?

Maintenant, si j'ai un Project: IOTAProject puis Project.FileName renvoie le nom du fichier dproj. Je n'ai pas trouvé de manière "officielle" pour obtenir le nom du fichier dpr. Y a-t-il? On peut l'obtenir en analysant le fichier dproj (voir here) mais je préférerais une méthode ToolsAPI.


Edit: je suis venu avec ce code basé sur 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; 

où les routines est ... sont de GX_GenericUtils.


Edit 2: Comment créer une de ces situations:

  1. Créer une nouvelle demande VCL.
  2. Enregistrer sous MyProject.dproj.
  3. Fermez le projet dans l'EDI.
  4. Dans l'explorateur Windows, renommez MyProject.dproj en MyProjectD11.dproj.
  5. A partir de maintenant, assurez-vous d'ouvrir MyProjectD11.dproj, et non MyProject.dpr!
+0

Pourriez-vous s'il vous plaît donner un exemple de comment les noms différents pour .dpr et .dproj fonctionnent? Est-ce que cela signifie simplement que le même fichier .dpr est référencé dans plusieurs fichiers .dproj? – dummzeuch

+0

Plusieurs fichiers .dproj sont le cas que j'ai rencontré. Je ne sais pas comment les gens de DX les ont créés. Peut-être simplement comme ici: http://qc.embarcadero.com/wc/qcmain.aspx?d=57890 dans les étapes. –

+0

Voir Edit 2 dans la publication principale. –

Répondre

3

Si vous parcourez les éditeurs sur l'instance IOTAProject, vous trouverez probablement le 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

OK, cela donne * .dpr et * .res dans mon cas de test. Je peux rechercher tous les fichiers dpr/dpk/bpk/... et j'espère en trouver un seul. C'est plus de travail et moins fiable que j'espérais, mais mieux que rien. Je vais devoir jouer avec ça. –