Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  13:16[Войти] | [Зарегистрироваться]

Разработка эксперта IDE Delphi 2007 с созданием группы проектов

Сергей Деев
дата публикации 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
    { IOTANotifier }
    procedure AfterSave;
    procedure BeforeSave;
    procedure Destroyed;
    procedure Modified;
    { IOTAWizard }
    function GetIDString: string;
    function GetState: TWizardState;
    function GetName: string;
    { IOTARepositoryWizard }
    function GetAuthor: string;
    function GetComment: string;
    function GetPage: string;
    function GetGlyph: Cardinal;
    {IOTARepositoryWizard60}
    function GetDesigner: string;
    {IOTARepositoryWizard80}
    function GetGalleryCategory: IOTAGalleryCategory;
    function GetPersonality: string;
  protected
    function BaseProjectGroup: String; virtual;
    { IOTAWizard }
    procedure Execute; virtual;
  end;

  TDKProjectGroupCreator = class(TInterfacedObject,
                                  IOTACreator,
                                  IOTAProjectGroupCreator)
  private
    FBaseProjectGroup: String;
    { IOTACreator }
    function GetCreatorType: string;
    function GetExisting: Boolean;
    function GetFileSystem: string;
    function GetOwner: IOTAModule; virtual;
    function GetUnnamed: Boolean;
    {IOTAProjectGroupCreator}
    function GetFileName: string;
    function GetShowSource: Boolean;
    function NewProjectGroupSource(const ProjectGroupName: string): IOTAFile;
  public
    constructor Create(ABaseProjectGroup: string); virtual;
  end;

На большинство методов классов я подробно останавливаться не буду, их описание можно прочесть в моей статье Разработка эксперта IDE Delphi 2007 с визуальным наследованием форм и размещением их в репозитории.

А вот методы Execute класса-эксперта и конструктор класса-креатора рассмотрим поподробнее.

Реализация метода 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), группы проектов] [Эксперты]

 Обсуждение материала нет сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования