Jul 30

Как создавать плагины на Дельфи? Часть 2

Продолжение... Начало в статье - Как создавать плагины на Дельфи? Часть 1...

Сама процедура по выполненю плагина.

Теперь мы загружаем тип узнаём и далее выполняем

procedure TForm1.PlugClick(sender: TObject);

var

//проводим объявление функции, которая далее и будет плагин выполнять

PlugExec : function(AObject : TObject): boolean;

//здесь идет объявление функции, возвращая тип плагина

PlugType : function: PChar;

//тут Имя dll

FileName : string;

//тут Хендл dll

handle : Thandle;

begin

with (sender as TmenuItem) do

filename:= plugList.Strings[MenuIndex];

//здесь получаем имя dll

handle := LoadLibrary(Pchar(FileName)); //Загружаем dll

//В том случае, когда всё ОК, продолжаем…

if handle <> 0 then

begin

//Далее загружаем функции

@plugExec := GetProcAddress(handle,'PluginExec');

@plugType := GetProcAddress(handle,'PluginType');

//Продолжая, в зависимости от самого типа, ей нужный параметр передаём...

if PlugType = 'FORM' then

PlugExec(Form1)

else

//В том случае, когда плагин для формы, то форму передаём

if PlugType = 'CANVAS' then

PlugExec(Canvas)

else

//В том случае, когда плагин для канвы, то саму канву передаём

if PlugType = 'MENU' then

PlugExec(MainMenu1)

else

//Когда плагин для меню, то именно меню передаём

if PlugType = 'BRUSH' then

PlugExec(Canvas.brush)

else

//Когда плагин для заливки, то саму заливку и передаём

if PlugType = 'NIL' then

PlugExec(nil);

//Когда плагину нашему не надо ничего, то и не передаём ничего

end;

FreeLibrary(handle); //Уничтожаем dll

end;

procedure TForm1.FormCreate(Sender: TObject);

var

SearchRec : TSearchRec; //здесь запись для поиска

begin

plugList:=TStringList.create; //здесь создаём запись для имён dll'ок

//а здесь ищем еще первый файл

if FindFirst('*.dll',faAnyFile, SearchRec) = 0 then

begin

LoadPlug(SearchRec.name); //тут найденный первый файл загружаем

while FindNext(SearchRec) = 0 do

LoadPlug(SearchRec.name);

//здесь загружаем последующий

FindClose(SearchRec); //уже закрываем наш поиск

end;

//тут левые параметры

canvas.Font.pitch := fpFixed;

canvas.Font.Size := 20;

canvas.Font.Style:= [fsBold];

end;

end.

Давайте напишем обычный исходный текст dll, а именно нашего плагина. Он возвращает обязательно название, тип и еще выполняет собственные задачи

library plug;

uses

SysUtils, graphics, Classes, windows;

{$R bmp.RES}

function PluginType : Pchar;

begin

//здесь мы указали реакцию на данный тип

Plugintype := 'CANVAS';

end;

function PluginName:Pchar;

begin

//здесь название плагина. Даная строчка обьязательно будет в меню

PluginName := 'Canvas painter';

end;

Сама функция выполнения плагина! Тут рисуем мы анимационную строку на переданной канве.

function PluginExec(Canvas:TCanvas):Boolean;

var

X : integer;

I : integer;

Z : byte;

S : string;

color : integer;

proz : integer;

begin

color := 10;

proz :=0;

S:= 'привет всем - это из плагина )))';

for Z:=0 to 200 do

begin

proz:=proz+2;

X:= 0;

for I:=1 to length(S) do

begin

X:=X + 20;

Canvas.TextOut(X,50,S[i]);

color := color+X*2+Random(Color);

canvas.Font.Color := color+X*2;

canvas.font.color := 10;

canvas.TextOut(10,100,'execute of '+inttostr(proz div 4) + '%');

canvas.Font.Color := color+X*2;

sleep(2);

end;

end;

PluginExec:=True;

end;

exports

PluginType, PluginName, PluginExec;

end.

Несколько советов:

Не ставьте у собственных плагинов расширение *.dll, это не пройдет. А сделайте, к примеру *.plu . Для этого в исходном тексте плагина надо написатьшите {$E plu} , а также в исходном тексте программы найти необходимо не Dll, а plu.

А когда сдаёте вы программку, к ней пишите уже несколько готовых плагинов, чтобы пользователю интересно было новые искать.

Плюс, к тому же, сделайте обновления поддержки через сеть Интернет. Т. е. программа наша на сервер заходит, узнаёт, есть плагины новые либо же нет, в случае когда есть - то их она загружает. Всем этим увеличите вы спрос собственной программы и также трафик собственного сайта!

Спонсор поста: желаете экономить на собственных покупках? Начните покупать в Интернете! Красочный интернет магазин top-shop.ru, предлагает широкий асортимент продукции, начиная от косметики и украшений, и заканчивая электроникой, товарами для дома и авто.


Поделитесь вашими мыслями



Ссылки в комментариях будут свободны от nofollow.

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Ссылки в комментариях будут свободны от nofollow.