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...