function mngrGetPluginInfo(dllname:string;var plinfo:TPluginInfo):integer;stdcall;
TPluginInfo
type
TPlugInInfo=record //информация для плугина
PluginClass:integer; //класс дополнения
PluginName:string[40]; //имя дополнения
Editable:boolean; //не используется
PluginInfo:string[255]; // краткое описание
end;
Классы дополнений могут быть следующими:
const
NSFT_ASCIIDRAWER=$C0BACA;
NSFT_EMPTY=$BA0BAB;
NSFT_DRAW_ONCE=$EDA111;
NSFT_HAS_CONFIG_FORM=$DA0515;
NSFT_POLYMORPHIC=NSFT_DRAW_ONCE and NSFT_ASCIIDRAWER;
О специфике каждого из классов несколько ниже. ExecuteDrawPlugin
, находящуюся также в PluginMngr.dll
. Эта функция описана следующим образом:function ExecuteDrawPlugin(DllFile:string;SettingsFile:String;var param:plParamASCIIDRW):LongInt;stdcall;
DllFile |
- полный путь к библиотеке дополнения |
SettingsFile |
- путь к файлу настроек settings.forme |
param | - структура типа plParamASCIIDRW - параметры дополнения. |
ERROR_SUCCESS
, в противном случае - код ошибки (специфические ошибки имеют отрицательный номер и начинаются с -2, об этом ниже).GetPluginInfo
,GenerateAsciiBasedBitMap
.procedure GetPluginInfo(var plgInfo:TPlugInInfo);stdcall;
TPluginInfo
procedure GetPluginInfo(var plgInfo:TPlugInInfo);stdcall;
begin
//наше дополнение будет полиморфным и будет иметь форму для настроек
plgInfo.PluginClass:= NSFT_POLYMORPHIC and NSFT_HAS_CONFIG_FORM;
//название
plgInfo.PluginName:='NSFT ASCII Drawer::Cover enumerator';
//краткое описание
plgInfo.PluginInfo:='Creates covers which contain number of the album. Use %COUNT%* for creating numerical image or 1*%VALUE% for named covers';
end;
GenerateAsciiBasedBitMapfunction GenerateAsciiBasedBitMap(w,h:integer;AsciiString:string;Path:string;SettingsFile:String):LongInt;stdcall;
w,h |
- ширина и высота будущей обложки | ||||||||||||
AsciiString |
- строка, посылаемая хостовым приложением (CDI). В этой строчке могут содержаться любые параметры, а также специфические поля-тэги. Для пользователей, давно знакомых с CDI, не секрет, что в его системе значительную роль играют тэги - зарезервированные слова, значение которых изменяется в зависимости от контекста. Не в даваясь в подробности тэговой структуры интерфейса, остановимся на тех из них, которые могут быть использованы для дополнения. Схема использования такая. Когда интерфейс натыкается на регулярное выражение, содержащее тэги, он вычисляет его значение и посылает дополнению уже вычисленную строку. Интерфейс пока умеет понимать следующие тэги:
|
||||||||||||
Path | - путь к папке, куда сохранять изображение (для класса NSFT_DRAW_ONCE ), либо имя файла изображения (для NSFT_ASCIIDRAWER ) |
||||||||||||
SettingsFile | - путь к файлу settings.forme ,куда рекомендуется записывать служебную информацию и куда CDI сам пишет параметры каждого плугина, указываемые в его диалоге Configure Plugins |
%THEMEPATH%%VALUE%Something else
Year
). Тогда вычисленная строка может принять такой вид:c:\program files\cdi\nature\*1967*Something else
AsciiString
должен решать разработчик дополнения. NSFT_EMPTY
- его нельзя использовать, он использовался для отладки).
NSFT_ASCIIDRAWER |
вызывается для каждого альбома в отдельности. Для дополнений такого класса нужно иметь в виду, что параметр Path функции GenerateAsciiBasedBitMap будет содержать полное имя файла будущей обложки, которую будет использовать CDI. |
NSFT_DRAW_ONCE |
вызывается только один раз, после создания коллекции. В этом случае, поле Path функции GenerateAsciiBasedBitMap будет содержать имя папки, в которую нужно будет сгенерировать обложки. Количество обложек можно передавать посредством строки AsciiString , которая будет содержать тэг %COUNT% . |
NSFT_POLYMORPHIC |
определяет полиморфное дополнение, т.е. такое, что может вести себя и как дополнения первого класса (NSFT_ASCIIDRAWER ), так и второго (NSFT_DRAW_ONCE ). Все механизмы определения того, к какому классу CDI отнесет такое дополнения должны быть реализованы внутри самого дополнения. Как правило, полиморфные дополнения меняют свой класс в зависимости от содержимого строки AsciiString . Выбор того, каким образом взаимодействовать с дополнением CDI реализует следующим образом. После того, как управляющий дополнениями указал, что используемое дополнение является полиморфным, CDI пытается использовать его как NSFT_ASCIIDRAWER . Если посылаемая строка AsciiString не соответствует этому классу, то дополнение обязано возвратить код ошибки NSFT_ERROR_INVALID_HOST_REQUEST , после чего, CDI запускает дополнения как NSFT_DRAW_ONCE . Если же при первой попытке дополнение ни разу не вернуло ошибку NSFT_ERROR_INVALID_HOST_REQUEST , то считается, что полиморфное дополнение успешно отработало и более не вызывается. (имеется в виду, как принадлежащее другому классу) |
NSFT_HAS_CONFIG_FORM |
Это не класс дополнения, а его свойство, которое передается вместе с классом (см. пример функции GetPluginInfo . ПОСМОТРЕТЬ).Означает, что данная библиотека имеет диалоговое окно, позволяющее изменять специфические настройки. О том как вызывается это окно читайте ниже. |
AsciiString
не достаточно, да и очень неудобно. Поэтому любое дополнение может иметь свое окно диалога настроек. Так, например, дополнение Covers Enumerator позволяет с помощью окна диалога выбрать шрифт, а также его цвет и цвет фона обложки. Окно диалога вызывается посредством управляющего дополнениями, в котором описана функция mngrShowPluginControl
, описанная следующим образомfunction mngrShowPluginControl(DllFile:string; SettingFile:String):LongInt;stdcall;
DllFile |
- полный путь к библиотеке дополнения |
SettingsFile |
- путь к файлу настроек settings.forme |
NSFT_HAS_CONFIG_FORM
), то эта функция возвращает код ошибки NSFT_ERROR_INVALID_HOST_REQUEST
. Дополнение, диалоговое окно которого вызывается, должно иметь следующую процедуру ShowPluginControl
, заголовок которой должен выглядеть следующим образомprocedure ShowPluginControl(SettingsFile:string);stdcall;
SettingsFile
имеет тот же смысл, что и ранее.NSFT_ERROR_INVALIDDIM=-2 |
Неправильные размеры изображения (<0, слишком маленькие и т.д.) |
NSFT_ERROR_INVALID_HOST_REQUEST=-3 |
Неправильный запрос хоста, т.е. CDI. Вызов данного дополнения с указанными параметрами невозможен. Такая ситуация возникает, например, если произведена попытка вызвать окно диалога у дополнения, не имеющего флага NSFT_HAS_CONFIG_FORM . |
NSFT_ERROR_INVALID_INTERNAL_CANVAS_OPERATION=-4 |
Внутренняя ошибка дополнения, связанная с обработкой или созданием изображения. |