Создание самого plug-in модуля в Delphi

Код созданного модуля приведите к следующему виду:

 

library PluginsDemo;

uses

Dialogs,

SysUtils,

Unit1 in 'Unit1.pas' {Form1};

procedure InitPlugin(PlugClass: TPluginInterface); begin

DemoInterface:=PlugClass;

Form1:=TForm1.Create(nil);

PlugClass.AddMenuItem('Показать Plug-in',Form1.ShowMe); PlugClass.AddMenuItem('Простой вызов',Form1.Button1Click); PlugClass.AddMenuItem('Добавить пункт',Form1.Button2Click); end;

exports

InitPlugin;

begin

end.

 

Самое основное здесь — это процедура InitPlugin. Это как раз та процедура, которая будет вызываться для инициализации дополнительного модуля. В первой строке сохраняется указатель на интерфейс взаимодействия между модулями в переменной DemoInterface. Данную переменную мы пока еще не описали, но сделаем это в ближайшее время. В следующей строке инициализируется форма Form1 , которую мы также сейчас создадим.

После этого, в меню основной программы создаются три пункта меню с помощью вызова метода AddMenuItem объекта PlugClass. В эти пункты передаются их названия и функции-обработчики, которые тоже еще предстоит написать.

 

Помимо того, что мы создали процедуру, ее нужно объявить как экспортируемую, чтобы внешние программы могли ее увидеть. Для этого процедура должна быть описана в разделе export. Это нужно сделать обязательно!!!

 

Теперь добавим в нашу библиотеку новую форму. Для этого нужно в меню File открыть подменю New и затем выбрать пункт Form. На новой форме разместим три кнопки:

  • Показать диалоговое окно
  • Добавить элемент
  • Спрятать окно

Внешний вид формы вы можете увидеть на рисунке 7.8. Помимо кнопок на моей форме расположен еще и рисунок, но он использован только для украшения.

Создание самого plug-in модуля в Delphi

Теперь опишем внешний вид интерфейса, с помощью которого происходит взаимодействие между plug-in модулем и главной программой. Для этого в разделе type напишите следующее:

 

TPluginInterface = class public

function GetApplication: TApplication; virtual; stdcall; abstract;

procedure AddMenuItem(MenuItemCapt: string;

Proc: TNotifyEvent); virtual; stdcall; abstract;

procedure AddItem(Item: String); virtual; stdcall; abstract; end;

 

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

 

В разделе var нужно объявить переменную DemoInterface, в которой будет сохраняться указатель на объект взаимодействия между модулями. Эту переменную мы уже использовали в процедуре InitPlugin, а здесь добавляем ее описание:

 

var

Form1: TForm1;

DemoInterface: TPluginInterface;

Теперь создадим обработчики события onclick для всех кнопок нашей формы. Для кнопки Показать диалоговое окно пишем следующий код:

procedure TForm1.Button1Click(Sender: TObj ect); begin

ShowMessage('Привет!'); end;

Здесь мы всего лишь отображаем стандартное окно сообщений с надписью "Привет!".

Для кнопки Добавить элемент вставимследующий код:

procedure TForm1.Button2Click(Sender: TObject); begin

DemoInterface.AddItem('Новый элемент'); end;

 

Здесь мы используем метод AddItem интерфейса для добавления из нашего модуля новой строки в компонент Memo главной программы.

В обработчике события нажатия кнопки Спрятать окно напишете:

procedure TForm1.Button3Click(Sender: TObject);

begin Hide;

end;

Обратите внимание, что вызывается метод Hide, а не Close. С помощью этого метода окно закрывается, но не уничтожается. Если бы мы написали Close, то после первого закрытия окна оно уничтожилось бы, и в следующий раз мы не смогли бы его отобразить из главного окна. При первой же попытке появилась бы ошибка доступа к памяти.

 

Помимо этого, в разделе public нужно описать еще два метода, которые мы используем:

 

public

procedure ShowMe(Sender: TObject); procedure HideMe(Sender: TObj ect);

Реализация этих процедур будет выглядеть следующим образом: procedure TForm1.ShowMe(Sender: TObject); begin Show; end;

procedure TForm1.HideMe(Sender: TObject); begin hide (); end;

 

Скомпилированный dll-файл нужно поместить в поддиректорию Plugins основной программы. После этого, запустив основную программу и выбрав меню Plug-ins, вы должны увидеть пункты меню с возможностями, предоставляемыми дополнительным модулем (рис. 7.9)

самого plug-in модуля в Delphi

Попробуйте поработать с этой программой, вызывая различные пункты меню. Вы должны понять, как работает основная программа и как она взаимодействует с plug­in модулем.

Скачать пример

 

dle

Помоги проекту! Расскажи друзьям об этом сайте: