unit uIdeMenuBuildFromCurrent; interface uses Classes, SysUtils, Dialogs, Forms, Windows, ToolsApi, uIdeMenuObject; type TIdeMenuBuildFromCurrent = 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 TIdeMenuBuildFromCurrent.ItemName: String; begin Result := 'BuildFromCurrentProject'; end; function TIdeMenuBuildFromCurrent.Caption: String; begin Result := 'Build from ¤t project'; end; function TIdeMenuBuildFromCurrent.ShortCut: String; begin Result := 'Ctrl+Alt+F9'; end; function TIdeMenuBuildFromCurrent.Order: Integer; begin Result := 0; end; procedure TIdeMenuBuildFromCurrent.Execute(Sender: TObject); var ProjectGroup : IOTAProjectGroup; p : Integer; CurrentProjectIndex : 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 naar de project group ProjectGroup := GetProjectGroup; // Alleen als er een project group is moet actie worden ondernomen if Assigned(ProjectGroup) then begin // Tot dusverre is er nog geen huidig project gevonden CurrentProjectIndex := -1; // Loop door alle projecten van de project group for p := 0 to ProjectGroup.ProjectCount - 1 do begin // Vergelijk of het project dezelfde filename heeft als het actieve project if SameText(ProjectGroup.Projects[p].FileName, ProjectGroup.ActiveProject.FileName) then begin // Zo ja dan is het huidige project gevonden. Onthou de index. CurrentProjectIndex := p; // Doorbreek de loop Break; end; end; // Als er iets gevonden is, compileer dan vanaf daar if CurrentProjectIndex <> -1 then begin // Loop door de projecten van de project group for p := CurrentProjectIndex to ProjectGroup.ProjectCount - 1 do begin // Compileer nooit het package waarin deze code zit. Geef alleen een // boodschap weer bij het laatste package. if Pos('IDEMENU.DPK', UpperCase(ExtractFileName(ProjectGroup.Projects[p].FileName))) = 0 then ProjectGroup.Projects[p].ProjectBuilder.BuildProject(cmOTAMake, p = (ProjectGroup.ProjectCount - 1)); end; end; end; end; end.