Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Delphi OTA: Name des gerade KOMPILIERTEN Projekts ermitteln? (nicht ActiveProject) (https://www.delphipraxis.net/168750-delphi-ota-name-des-gerade-kompilierten-projekts-ermitteln-nicht-activeproject.html)

blackfin 8. Jun 2012 10:53


Delphi OTA: Name des gerade KOMPILIERTEN Projekts ermitteln? (nicht ActiveProject)
 
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...

himitsu 8. Jun 2012 10:57

AW: Delphi OTA: Name des gerade KOMPILIERTEN Projekts ermitteln? (nicht ActiveProject
 
Bekommen die Compile-Events nicht das jeweilige Projekt als Parameter übergeben?

blackfin 8. Jun 2012 11:01

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

Zitat von himitsu
Bekommen die Compile-Events nicht das jeweilige Projekt als Parameter übergeben?

Oh mann, manchmal bin ich echt blind.....:oops::oops::wall::wall:

DANKE!!! fürs "vor den Kopf stossen"! :thumb:

Merke: Fang nie das Coden ohne 3 Kaffee an...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz