IOTAProjectからメインソースファイル名を取得するにはどうすればよいですか?
質問
少なくとも 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;
どこにあるの...ルーチンはからのものです GX_GenericUtils.
編集2: これらの状況のいずれかを作成する方法:
- 新しい VCL アプリケーションを作成します。
- MyProject.dproj として保存します。
- IDE でプロジェクトを閉じます。
- Windows エクスプローラーで、MyProject.dproj の名前を MyProjectD11.dproj に変更します。
- 今後は必ず MyProjectD11.dproj を開いてください。 ない MyProject.dpr!
解決
あなたは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;
所属していません StackOverflow