Сергей Деев дата публикации 17-04-2010 22:04 Разработка эксперта IDE Delphi 2007 с созданием группы проектов
При построении системы на основе PlugIn используются пакеты исполнения. Довольно часто в таких пакетах можно встретить наследование форм и классов из какого-либо основного пакета. Однако, при разработке таких пакетов приходиться создавать группу проектов, в которую необходимо добавить как сам разрабатываемый пакет, так и основной. Попробуем автоматизировать эту задачу путем разработки эксперта IDE Delphi 2007 с созданием группы проектов и регистрации его IDE.
Начнем работу с создания нового пакета. Зайдем в его опции и установим тип пакета как "DesignTime only" и сохраним данный пакет под именем dt_ ProjectGroupWizard. Вставим в пакет пустой модуль и сохраним его под именем UProjectGroupWizardReg.
type
TDKProjectGroupWizard = class(TNotifierObject,
IOTAWIzard,
IOTARepositoryWizard,
IOTARepositoryWizard60,
IOTARepositoryWizard80,
IOTAProjectWizard)
private
procedure AfterSave;
procedure BeforeSave;
procedure Destroyed;
procedure Modified;
function GetIDString: string;
function GetState: TWizardState;
function GetName: string;
function GetAuthor: string;
function GetComment: string;
function GetPage: string;
function GetGlyph: Cardinal;
function GetDesigner: string;
function GetGalleryCategory: IOTAGalleryCategory;
function GetPersonality: string;
protected
function BaseProjectGroup: String; virtual;
procedure Execute; virtual;
end;
TDKProjectGroupCreator = class(TInterfacedObject,
IOTACreator,
IOTAProjectGroupCreator)
private
FBaseProjectGroup: String;
function GetCreatorType: string;
function GetExisting: Boolean;
function GetFileSystem: string;
function GetOwner: IOTAModule; virtual;
function GetUnnamed: Boolean;
function GetFileName: string;
function GetShowSource: Boolean;
function NewProjectGroupSource(const ProjectGroupName: string): IOTAFile;
public
constructor Create(ABaseProjectGroup: string); virtual;
end;
|
|
На большинство методов классов я подробно останавливаться не буду, их описание можно прочесть в моей статье Разработка эксперта IDE Delphi 2007 с визуальным наследованием форм и размещением их в репозитории.
А вот методы Execute класса-эксперта и конструктор класса-креатора рассмотрим поподробнее.
…
procedure TDKProjectGroupWizard.Execute;
var
AModuleServices: IOTAModuleServices;
AProject: IOTAProject;
AModule: IOTAProjectGroup;
begin
AModuleServices := BorlandIDEServices as IOTAModuleServices;
Assert(Assigned(AModuleServices));
AModule := IOTAProjectGroup(AModuleServices.CreateModule(
TDKProjectGroupCreator.Create(
BaseProjectGroup)));
Assert(Assigned(AModule));
AModule.AddNewProject;
AProject := AModule.ActiveProject;
AProject.AddFile('rt_ dk.dcp', False);
AProject.AddFile('rt_ dk _Com.dcp', False);
AProject.ProjectOptions.Values['RunTimeOnly'] := 1;
AProject.FileName := 'dk_fish';
AModule.AddExistingProject;
AModule.SetActiveProject(AProject);
end;
…
|
|
Как видим, сначала мы вызываем конструктор класса-креатора, передавая туда имя группы проектов.
Затем добавляем в группу новый проект, вызывая метод AddNewProject, который в свою очередь вызывает стандартный диалог добавления проекта в группу.
Затем с помощью вызовов методов AddFile(const AFileName: string; IsUnitOrForm: Boolean) мы добавляем в секцию "Requires" необходимые нам пакеты.
С помощью назначения свойства ProjectOptions.Values['RunTimeOnly'] устанавливаем тип пакета как "RunTime only". Затем просто меняем имя пакета, а затем с помощью вызова метода AddExistingProject вызываем стандартный диалог добавления в группу существующих пакетов и устанавливаем наш пакет как активный.
…
constructor TDKCProjectGroupCreator.Create(ABaseProjectGroup: string);
begin
FBaseProjectGroup := ProjectGroupName;
end;
…
|
|
Как видим, мы просто устанавливаем значение поля FBaseProjectGroup, которое потом нам будет возвращать метод function GetFileName: string; класса-креатора.
Необходимо заметить, что описание процедуры регистрации нашего эксперта я опустил.
Конечно, для успешной компиляции нашего пакета необходимо в раздел "Requires" добавить designide.dcp.
Сохраняем наши изменения, компилируем и устанавливаем пакет.
После установки пакета мы можем, выбрав в репозитории пункт "dk_fish_pg" и два раза щелкнув по нему создать группу проектов, в которой будет находиться наш разрабатываемый проект "dk_fish" и другие уже существующие проекты. Нам останется только сохранить группу и проект под необходимыми именами и можно будет приступать к реализации PlugIn.
[Проект (*.dpr), группы проектов] [Эксперты]
Обсуждение материала нет сообщений |