Domanda

Dal momento che almeno D2007 un file di progetto può avere un file di origine principale con nome di base differenti. Le demo DevExpress fanno uso di questo: Ad es v'è un singolo file UnboundListDemo.dpr dpr che serve come la fonte principale per entrambi UnboundListDemoD11.dproj e UnboundListDemoD12.dproj.

Ora, se ho un Project: IOTAProject poi Project.FileName restituisce il nome del file dproj. Non riuscivo a trovare un modo "ufficiale" per ottenere il nome del file del dpr. C'è qualche? Si può ottenere da analisi del file dproj (vedi qui ), ma io preferirei un metodo ToolsAPI.


Modifica Mi si avvicinò con questo codice sulla base di di Jon risposta :

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;

dove il ... routine sono da GX_GenericUtils .


Modifica 2: Come creare una di queste situazioni:

  1. Crea nuova applicazione VCL.
  2. Salva con nome MyProject.dproj.
  3. Chiudi progetto in IDE.
  4. In Esplora risorse, rinominare MyProject.dproj a MyProjectD11.dproj.
  5. Da ora in poi essere sicuri di aprire MyProjectD11.dproj, non MyProject.dpr!
È stato utile?

Soluzione

Se si scorre i redattori nell'istanza IOTAProject, probabilmente troverete il 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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top