Эксперты в DELPHI, или Программист, упростите себе жизнь

Материал из DRKB

Эксперты в DELPHI, или Программист, упростите себе жизнь[править | править код]

Имеющее множество достоинств и довольно популярное средство разработки Delphi позволяет расширять функциональные возможности среды разработчика. Речь идет не о косметических изменениях в интерфейсе и не о добавлении компонентов или их наборов, а о придании рабочему окружению программиста новых полезных возможностей, не предусмотренных его создателями. Для решения подобной задачи в Delphi можно воспользоваться так называемыми экспертами. Вспомните, как удобно, ответив на несколько вопросов, создать готовую форму для вывода содержимого таблиц. Или, щелкнув мышью на нужном элементе в списке New Items, получить “костяк” вашего будущего проекта (рис. 1).

Clip0248.gif


Рис. 1. Многие возможности Delphi реализуются с помощью экспертов

Что это - стандартные возможности рабочей среды? Да, но применить их можно лишь с помощью эксперта. О том, как это сделать, и пойдет речь далее.

Эксперты в Delphi - что это такое?[править | править код]

Если не хватает возможностей среды или какие-то операции кажутся слишком громоздкими, то эксперты - именно то, что нужно. С помощью экспертов вы словно проникаете внутрь среды Delphi и без труда дополняете ее. Естественно, такое проникновение должно быть осторожным и аккуратным, потому как неправильное обращение с объектами и интерфейсами может вызвать сбои в работе среды или даже ее разрушение. Эксперты могут существовать в виде библиотек DLL либо компилированных модулей DCU. Выбор “формы жизни” будущего эксперта остается за вами, но имейте в виду, что расширение файла эксперта определяет способ его регистрации. О способах регистрации чуть далее - сперва давайте рассмотрим стили экспертов Delphi. Их всего четыре, и все они приведены в таблице.

Стили экспертов[править | править код]

Clip0249.gif

Главное отличие между стилями заключается в способе вызова эксперта пользователем в среде Delphi. Как видите, можно определить самый удобный из них. Реализация экспертов предполагает использование интерфейса Open Tools API - набора классов, позволяющего обращаться ко множеству функций среды Delphi. В экспертах Open Tools API может использоваться для:

 * получения информации о проекте; 
 * получения информации о модуле или форме; 
 * управления модулями проекта (дл открытия, закрытия, добавления, создания); 
 * управления ресурсами проекта; 
 * модификации меню Delphi; 
 * регистрации изменений в проекте; 
 * регистрации изменений в модуле. Следует заметить, что интерфейс Open Tools API доступен только из программ, запущенных как часть интегрированной среды Delphi. В следующем разделе мы рассмотрим несколько полезных экспертов. 

Реализация класса TIExpert[править | править код]

Для создания нового эксперта необходимо наследовать новый класс от класса TIExpert, переопределив при этом часть его методов (таблица 2)

Clip0250.gif

Возможность переопределения методов экспертов тех или иных стилей[править | править код]

Все девять методов (таблица 3) предоставляют информацию об эксперте и организуют его взаимодействие со средой. TIExpert - это абстрактный виртуальный класс с заданными, но не реализованными функциональными возможностями. От этого класса будут порождены другие, имеющие необходимые возможности.

Clip0251.gif

Определение класса TIExpert приведено далее.

TIExpert = class(TInterface)
public
  { Методы пользовательского интерфейса с экспертом }
  function GetName: string; virtual; stdcall; abstract;
  function GetAuthor: string; virtual; stdcall; abstract;
  function GetComment: string; virtual; stdcall; abstract;
  function GetPage: string; virtual; stdcall; abstract;
  function GetGlyph: HICON; virtual; stdcall; abstract;
  function GetStyle: TExpertStyle; virtual; stdcall; abstract;
  function GetState: TExpertState; virtual; stdcall; abstract;
  function GetIDString: string; virtual; stdcall; abstract;
  function GetMenuText: string; virtual; stdcall; abstract;
  { Запуск эксперта }
  procedure Execute; virtual; stdcall; abstract;
end;

Open Tools API[править | править код]

Open Tools API - это набор интерфейсов; они предоставляют доступ к среде Delphi и позволяют управлять файлами и проектами. Основной объект Open Tools API - ToolServices - это глобальная переменная. При запуске Delphi создается экземпляр класса TIToolServices, и переменной ToolServices присваивается ссылка на него. Эксперты могут использовать ToolServices для доступа к функциям среды разработки.

Clip0252.gif

Любой сервис, предоставляемый Open Tools API, прямо или косвенно вызывается через ToolServices. В таблице приведено краткое описание Open Tools API.

Переопределение методов - задача довольно простая; она предполагает написание всего нескольких строк кода. Например, реализация метода GetStyle вряд ли отнимет у вас много времени:

function MyExpert.GetStyle: TExpertStyle;
begin
  Result := [esStandard];
end;

Регистрация экспертов[править | править код]

Зарегистрировать эксперт можно одним из двух способов. Первый способ сводится к определению эксперта как компонента путем вызова процедуры RegisterLibraryExpert из процедуры Register. Второй способ заключается в создании DLL-библиотеки эксперта. Преимущество первого способа в том, что не приходится закрывать среду Delphi при внесении изменений в эксперт - достаточно его перекомпилировать. Сперва рассмотрим регистрацию эксперта как компонента. Необходимо добавить в модуль эксперта процедуру Register:

Procedure Register;

Implementation

{$R*.DFM}

Procedure Register;
Begin
  RegisterLibraryExpert(TPowerExpert. Create);
  // TPowerExpert — это класс регистрируемого эксперта
End;

Для регистрации эксперта как DLLбиблиотеки следует выполнить две операции: реализовать новый проект DLL и изменить содержимое системного реестра Windows. Итак, создаем DLL. Выполните команду File р New, а затем укажите Delphi, что необходимо создать DLL. В результате появится новое окно модуля с неким набором исходного кода. После этого следует экспортировать функцию InitExpert. Обратите внимание, что эта функция экспортируется с помощью специальной константы ExpertEntryPoint, которую Delphi определяет для всех экспертов, создаваемых в виде DLL. Основное назначение функции InitExpert - возврат ссылки на объект ToolServices для дальнейшего использования и вызова процедуры RegisterProc, которая, собственно, и регистрирует эксперт. Ниже приведена реализация этой функции:


Function InitExpert(ToolServices: TToolServices; RegisterProc: TExpertRegisterProc; var Terminate: TExpertTerminateProc): Boolean; export; stdcall;

implementation

procedure TerminateExpert;
begin
  // завершение работы эксперта
end;

function InitExpert(ToolServices: TToolServices; RegisterProc: TExpertRegisterProc; var Terminate: TExpertTerminateProc): Boolean; export; stdcall;
begin
  Result := False;
  // проверка, является ли запущенное приложение единственным
  if (ToolServices = nil) or Assigned(ExptIntf.ToolServices) then Exit;
  ExptIntf.ToolServices := ToolServices;
  //сохраняем указатель на ToolServices
  Application.Handle := ToolServices.GetParentHandle;
  //сохраняем указатель на ToolServices для родительского окна
  Terminate := TerminateExpert;
  //устанавливаем процедуру завершения
  RegisterProc(TGenericExpert.Create);
  //регистрация эксперта
  Result := True;
end;


Когда DLL с экспертом будет готова, от вас потребуется лишь изменить системный реестр так, чтобы Delphi “знала” расположение библиотеки с экспертом и смогла ее загрузить. Для этого с помощью редактора реестра (regedit.exe) добавьте в реестр такую запись:

 HKEY_CURRENT_USER\Software\Borland\ Delphi\4.0\Experts MyExpert=C:\MyExpertts\MyExpert.DLL

Для того чтобы среда зарегистрировала DLL, Delphi необходимо перезапустить. Вариант реализации эксперта в виде DLL кажется автору менее удобным: перезагрузка среды отнимает больше времени по сравнению с перекомпиляцией библиотеки компонентов, что особенно ощутимо при отладке эксперта. Еще одна проблема - неполна совместимость экспертов в виде DLL, которые были созданы и скомпилированы для других версий Delphi. Автор надеется, что эта стать поможет профессионалам поближе познакомиться с экспертами Delphi. Возможно, ее публикация подтолкнет многих программистов к изучению темы.

Некоторые полезные эксперты[править | править код]

Знаете ли вы, что в Internet есть предостаточно мест, где можно найти эксперты для Delphi. Одно из таких мест - польский сервер “Delphi Super Page” (http://sunsite.icm.edu.pl/delphi/). Там вы найдете множество различных экспертов и полезных компонентов. Давайте рассмотрим самый интересный, по мнению автора, набор экспертов, предоставляющий возможность ускорить разработку приложений на Delphi. Его можно загрузить по адресу: http://sunsite.icm.edu.pl/delphi/ftp/d40free/myexp100.zip. Рассмотрим вкратце эти маленькие “добавки”. Набор содержит эксперт - редактор префиксов для имен компонентов. После того, как он будет установлен в инспекторе объектов, напротив свойства Name появится кнопка с многоточием. Это говорит о том, что можно воспользоваться редактором для изменения свойства Name. С его помощью можно указывать префикс для данного класса компонента. Строго говоря, использование префиксов в названиях компонентов - это правило хорошего тона. В меню Tools теперь появляется новое подменю Prefix list editor, с помощью которого можно изменять и добавлять такие префиксы. Как известно, некоторые компоненты являются контейнерами для других (например, TPanel, TGroupBox, TScrollBox и т. п.). Установленный набор позволит управлять выравниванием дочерних компонентов. Для этого достаточно щелкнуть правой кнопкой мыши и выбрать в контекстном меню пункт Align controls. В Delphi есть мастер создания элементов управления, работающих с данными. Однако в рассматриваемом наборе имеется эксперт, благодаря которому можно создавать компоненты для работы с данными более совершенным способом. С помощью эксперта, вызываемого командой Tools р Shortcut list editor, можно определить свой набор клавиатурных эквивалентов для главного меню Delphi. Кроме всего прочего, после установки набора вы обнаружите, что палитра компонентов Delphi стала многострочной (рисунок). Так вы получите возможность просматривать больше закладок, чем ранее.

Clip0253.gif


Author: Автор: Олег Гопанюк, ведущий программист департамента "KM-Solution" корпорации "Квазар-Микро" 2004.11.03
Source: http://www.cpp.com.ua
ID: 00043