Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#1

Delphi OTA: Name des gerade KOMPILIERTEN Projekts ermitteln? (nicht ActiveProject)

  Alt 8. Jun 2012, 11:53
Hallo liebe Delphianer,

ich baue mir gerade eine Pre-/Post-Build Automation mit der Delphi-OTA zusammen.
An sich klappt das ganz gut, allerdings scheitere ich daran, herauszubekommen, welches Projekt gerade aktiv kompiliert wird.
Ich finde bei der OTA nur "ActiveProject", was aber nicht immer das Projekt ist, das gerade kompiliert wird, sondern das, was in der IDE als "aktiv" markeirt wurde.

Beispiel, wo es nicht funzt:
Wenn man bei einem Projekt andere Projekte als Abhängigkeiten eingetragen hat, kann man ja mehrere EXEs auf einmal kompilieren
(man wählt das Projekt an, das die anderen Projekte als Abhängigkeiten hat, drückt F9, dann werden die anderen Projekte, die in den Abhängigkeiten sind, vorher kompiliert).
Soweit alles super, nur schaltet während der Kompilierphase die IDE das aktive Projekt nicht auf das Projekt um, das gerade als Abhängigkeit kompiliert wird.
Somit zeigt das OTA-ActiveProject immer auf das aktive Projekt, das als letztes nach den Abhängigkeiten kompiliert wird und die Build-Automation für die Abhängigkeiten-Projekte schlägt fehl.

Ich habe folgenden Code, um das gerade aktive Projekt für die Build-Automation zu ermitteln:

Delphi-Quellcode:

// Get the currently active project
function TehXBeforeAfterCompilation.GetCurrentProject: IOTAProject;
var
  ModServices: IOTAModuleServices;
  Module: IOTAModule;
  Project: IOTAProject;
  ProjectGroup: IOTAProjectGroup;
  i: Integer;
begin
   Result := nil;
   ModServices := BorlandIDEServices as IOTAModuleServices;
   for i := 0 to ModServices.ModuleCount - 1 do
   begin
      Module := ModServices.Modules[i];
      if Supports(Module, IOTAProjectGroup, ProjectGroup) then
      begin
        Result := ProjectGroup.ActiveProject; // HIER! Das ist der Lump, der nicht funktioniert, da ActiveProject nicht das Projekt ist, das gerade compiliert wird.
        exit;
      end
      else
      begin
        if Supports(Module, IOTAProject, Project) then
        begin
          if Result = nil then Result := Project;
        end;
      end;
   end;

end;
Das Problem ist hier das "ProjectGroup.ActiveProject". Das zeigt immer auf das gerade "aktive" Projekt, aber nicht, wenn gerade ein Projekt als Abhängigkeit kompiliert wird.
Kann man das Projekt, das gerade kompiliert wird, auch irgendwie herausfinden? Finde dazu keine Funktion in der OTA-API...

Geändert von blackfin ( 8. Jun 2012 um 11:58 Uhr)
  Mit Zitat antworten Zitat