1

少なくとも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つを作成する方法:

  1. 新しいVCLアプリケーションを作成します。
  2. MyProject.dprojとして保存します。
  3. IDEでプロジェクトを閉じます。
  4. Windowsエクスプローラーで、MyProject.dprojの名前をMyProjectD11.dprojに変更します。
  5. 今後は、MyProject.dprではなく、必ずMyProjectD11.dprojを開いてください。
4

1 に答える 1

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;
于 2010-01-08T16:05:22.287 に答える