unit uIdeMenuBuildUnitProject; interface uses Classes, SysUtils, Dialogs, Forms, Windows, ToolsApi, uIdeMenuObject; type TIdeMenuBuildUnitProject = class(TIdeMenuObject) function ItemName: String; override; function Caption: String; override; function ShortCut: String; override; function Order: Integer; override; procedure Execute(Sender: TObject); override; end; implementation function TIdeMenuBuildUnitProject.ItemName: String; begin Result := 'BuildProjectOfCurrentUnit'; end; function TIdeMenuBuildUnitProject.Caption: String; begin Result := 'Build project of current &unit'; end; function TIdeMenuBuildUnitProject.ShortCut: String; begin Result := 'Shift+F9'; end; function TIdeMenuBuildUnitProject.Order: Integer; begin Result := 0; end; procedure TIdeMenuBuildUnitProject.Execute(Sender: TObject); var ProjectGroup : IOTAProjectGroup; ModuleProjectIndex : Integer; Module : IOTAModule; p : Integer; m : Integer; function GetProjectGroup: IOTAProjectGroup; var ModuleServices : IOTAModuleServices; i : Integer; begin // Standaard resultaat Result := nil; // Verkrijg een referentie naar de moduloe services ModuleServices := (BorlandIDEServices as IOTAModuleServices); // Loop door de modules for i := 0 to ModuleServices.ModuleCount - 1 do begin // Als een van de modules het IOTAProjectGroup interface implementeert, // dan is er een project group gevonden if (ModuleServices.Modules[i].QueryInterface(IOTAProjectGroup, Result) = S_OK) then Break; end; // Laat referentie naar het interface los ModuleServices := nil; end; begin // Verkrijg een referentie naa de huidige module en de huidige project group Module := (BorlandIDEServices as IOTAModuleServices).CurrentModule; ProjectGroup := GetProjectGroup; // Alleen als er referenties gevonden zijn dan moet er actie worden ondernomen if Assigned(Module) and Assigned(ProjectGroup) then begin // Tot dusverre is er geen project gevonden waarin de huidige module // zich bevindt ModuleProjectIndex := -1; // Loop door alle projecten van de projectgroup for p := 0 to ProjectGroup.ProjectCount - 1 do begin // Loop door alle modules van het project for m := 0 to ProjectGroup.Projects[p].GetModuleCount - 1 do begin // Als de filename van de module module overeenkomst met de filename // van de huidige module dan wordt het project als gevonden beschouwd if SameText(ProjectGroup.Projects[p].GetModule(m).FileName, Module.FileName) then begin // Onthou index ModuleProjectIndex := p; // Stop loop Break; end; end; // Als er iets gevonden is, stop dan de loop if ModuleProjectIndex <> -1 then Break; end; // Als er een project gevonden is, compileer het dan if ModuleProjectIndex <> -1 then begin // Compileer nooit het project waarin deze unit zit if Pos('IDEMENU.DPK', UpperCase(ExtractFileName(ProjectGroup.Projects[ModuleProjectIndex].FileName))) = 0 then ProjectGroup.Projects[ModuleProjectIndex].ProjectBuilder.BuildProject(cmOTAMake, False); end; end; end; end.