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:
- Créer une nouvelle demande VCL.
- Enregistrer sous MyProject.dproj.
- Fermez le projet dans l'EDI.
- Dans l'explorateur Windows, renommez MyProject.dproj en MyProjectD11.dproj.
- A partir de maintenant, assurez-vous d'ouvrir MyProjectD11.dproj, et non MyProject.dpr!
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
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. –
Voir Edit 2 dans la publication principale. –