少なくともD2007以降、プロジェクトファイルにはベース名が異なるメインソースファイルを含めることができます。DevExpressデモはこれを利用します。たとえば、UnboundListDemoD11.dprojとUnboundListDemoD12.dprojの両方のメインソースとして機能する単一のdprファイルUnboundListDemo.dprがあります。
今私が持っている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:これらの状況の1つを作成する方法:
- 新しいVCLアプリケーションを作成します。
- MyProject.dprojとして保存します。
- IDEでプロジェクトを閉じます。
- Windowsエクスプローラーで、MyProject.dprojの名前をMyProjectD11.dprojに変更します。
- 今後は、MyProject.dprではなく、必ずMyProjectD11.dprojを開いてください。