unit uIdeMenuSelectUnitProject; interface uses Classes, SysUtils, Dialogs, Forms, Windows, ToolsApi, uIdeMenuObject; type TIdeMenuSelectUnitProject = 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 TIdeMenuSelectUnitProject.ItemName: String; begin Result := 'SelectProjectOfCurrentUnit'; end; function TIdeMenuSelectUnitProject.Caption: String; begin Result := 'Select project of cu&rrent unit'; end; function TIdeMenuSelectUnitProject.ShortCut: String; begin Result := 'Ctrl+Shift+\'; end; function TIdeMenuSelectUnitProject.Order: Integer; begin Result := 0; end; procedure TIdeMenuSelectUnitProject.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 naar 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 // Onthoud 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, selecteer het dan if ModuleProjectIndex <> -1 then begin // Maak het project van de module het active project ProjectGroup.ActiveProject := ProjectGroup.Projects[ModuleProjectIndex]; end; end; end; end.