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

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

clip0248

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

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

Экспертыв Delphi —чтоэтотакое?

 

 

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

Стилиэкспертов

clip0249

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

· полученияинформацииопроекте;
· полученияинформацииомодулеилиформе;
· управлениямодулямипроекта (длоткрытия, закрытия, добавления, создания);
· управленияресурсамипроекта;
· модификациименю Delphi;
· регистрацииизмененийвпроекте;
· регистрацииизмененийвмодуле.

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

Реализациякласса TIExpert

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

Возможностьпереопределениметодовэкспертовтехилииныхстилей
clip0250

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

clip0251

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

Code:

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

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

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

Code:

function MyExpert.GetStyle:

TexpertStyle

begin

Result := [esStandard];

end;

 

 

Регистрацияэкспертов

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

Code:

ProcedureRegister;

Implementation{$R*.DFM}

ProcedureRegister;

Begin

RegisterLibraryExpert

(TPowerExpert. Create);

// TpowerExpert — это класс регистрируемого эксперта

End;

 

 

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

Code:

Function InitExpert(

ToolServices:ToolServices;

RegisterProc:TexpertRegisterProc;

var

Terminate:TExpertTerminateProc):

Boolean; export; stdcall;

implementation

procedure TerminateExpert;

begin

// завершение работы эксперта

end;

function InitExpert(

ToolServices:ToolServices;

RegisterProc:TExpertRegisterProc;

var

Terminate:TExpertTerminateProc):

Boolean; export; stdcall;

begin

Result:=False;

end;

// проверка, является ли запущенное приложение единственным

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” (https://sunsite.icm.edu.pl/delphi/). Тамвынайдетемножестворазличныхэкспертовиполезныхкомпонентов. Давайтерассмотримсамыйинтересный, помнениюавтора, наборэкспертов, предоставляющийвозможностьускоритьразработкуприложенийна Delphi. Егоможнозагрузитьпоадресу: https://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

 Автор: ОлегГопанюк, ведущийпрограммистдепартамента "KM-Solution" корпорации "Квазар-Микро"

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить