unit uIdeMenuSelectPriorProject; interface uses Classes, SysUtils, Dialogs, Forms, Windows, ToolsApi, uIdeMenuObject; type TIdeMenuSelectPriorProject = 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 TIdeMenuSelectPriorProject.ItemName: String; begin Result := 'SelectPriorProject'; end; function TIdeMenuSelectPriorProject.Caption: String; begin Result := 'Select &prior project'; end; function TIdeMenuSelectPriorProject.ShortCut: String; begin Result := 'Ctrl+Shift+-'; end; function TIdeMenuSelectPriorProject.Order: Integer; begin Result := 0; end; procedure TIdeMenuSelectPriorProject.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 en het is niet de eerste, selecteer dan if (CurrentProjectIndex <> -1) and (CurrentProjectIndex <> 0) then ProjectGroup.ActiveProject := ProjectGroup.Projects[CurrentProjectIndex - 1]; end; end; end.