Пользовательские плагины

Дополнительные плагины к программе
User avatar
maniac
Developer
Posts: 4373
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Пользовательские плагины

Post by maniac » Tue Jun 22, 2010 7:45 pm

Версия 3.2 включительно поддерживает плагины только для импорта из других каталогизаторов. Мы решили исправить это и предлагаем бету-версию API плагинов.
Во вложении демонстрационная программа, которая выводит список пользовательских плагинов и позволяет их вызвать. А также пример простого плагина, которые использует некоторые доступные функции из UserFunctions.dll. Плагин написан на Delphi XE3 и не должен требовать дополнительных компонентов.
UserFunctions.dll - специальная библиотека, которая облегчает работу. В нее, например, вынесены функции для работы с базой данных Movienizer, реестром, скачивание URL, вывод языковых фраз и т.п. Но, конечно, необязательно ее использовать, если вы специалист в Delphi.

Описаний пока что нет, лучший способ - изучить демонстрационный плагин.
Attachments
UserPlugins.zip
(2.2 MiB) Downloaded 903 times
ImageImage

User avatar
maniac
Developer
Posts: 4373
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Пользовательские плагины

Post by maniac » Tue Jun 22, 2010 7:51 pm

Для отладки dll необходимо настроить Run Parameters (меню Run->Parameters...)
run-parameters.gif
Run Parameters
run-parameters.gif (9.04 KiB) Viewed 25776 times
и каталог, куда будет помещаться dll (меню Project->Options..., вкладка Directories/Conditionals)
project-options.gif
Project Options
project-options.gif (12.78 KiB) Viewed 25776 times
ImageImage

User avatar
maniac
Developer
Posts: 4373
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Пользовательские плагины

Post by maniac » Thu Jun 24, 2010 8:56 pm

Описание функций в библиотеке UserFunctions.dll

function Version(): Double; Данная функции возвращает текущую версию библиотеки. Необходима только дл проверки совместимости.

function SetDataBaseName(AName: string): Boolean; Устанавливает текущую базу данных для работы. Все последующие функции, которые работают с БД будут обращаться к заданной БД. Если установка БД неудачна – результат равен False.

function ExecuteSQL(ASQL: string): Integer; Выполняет SQL запрос, который находится в параметре ASQL. Возвращает количество записей, которые было возвращено в результате выполнения запроса. Перед использованием данной функции необходимо установить текущую базу данных с помощью функции SetDataBaseName.

function GetNextRecord(): Boolean; Метод перемещает указатель базы данных на следующую запись. Если следующей записи не найдено – результат равен False.

function GetFirstRecord(): Boolean; Метод перемещает указатель базы данных на первую запись. Если количество записей равно 0 – результат равен False.

function GetRecordsCount(): Integer; Получает общее количество записей, которое вернула функция ExecuteSQL.

function GetStringField(AName: string): string; Возвращает значение поля в строковой форме для текущей записи.

function GetIntegerField(AName: string): Integer; Возвращает значение поля в integer форме для текущей записи.

function GetFloatField (AName: string): Integer; Возвращает значение поля в float форме для текущей записи.

function RegReadInteger(Akey: string; AdefaultValue: Integer = 0): Integer; Данный метод читает из реестра ключ с именем AKey в integer форме. Если ключ не найден возвращаем значение по умолчанию (ADefaultValue).

function RegReadString(AKey: string; ADefaultValue: string = ''): string; Данный метод читает из реестра ключ с именем AKey в строковой форме. Если ключ не найден возвращаем значение по умолчанию (ADefaultValue).

function RegWriteInteger(AKey: string; AValue: Integer): Boolean; Данная функция устаеавливает значение ключа с именем AKey равным AValue (для ключей в integer форме).

function RegWriteString (AKey: string; AValue: string): Boolean; Данная функция устаеавливает значение ключа с именем AKey равным AValue (для ключей в строковой форме)

function DownloadURL(AURL: string): string; Функция загружает из Интернета ссылку AURL и возвращает результат в строковой форме (с помощью Get метода).

function DownloadURLToMemory(AURL: string): TMemoryStream; Функция загружает из Интернета ссылку AURL и возвращает результат в объекте типа TMemoryStream (с помощью Get метода).

function DownloadURLWithReferer(AURL: string; ARefer: string): string; Функция загружает из Интернета ссылку AURL и возвращает результат в строковой форме с использованием Prefer параметра.

function GetLangStr(ANumber: Integer): string; Данная функция считывает строку из языкового файла с индексом ANumber. Языковый файл считывается из реестра. Если строка с таким индексом не найдена – результат – пустая строка.
ImageImage

AndrewSt
Extra
Posts: 31
Joined: Mon Mar 30, 2009 5:55 pm

Re: Пользовательские плагины

Post by AndrewSt » Fri Jun 25, 2010 11:12 am

Совсем не давно начал писать утилиту для работы с базой мovinizer'a для реализации нужных мне функций.
А тут разработчики такую возможность добавляют. :D
Скачал, посмотрел, оценил. Сейчас пробую что-нибудь реализовать. :)


В файле unUserFunctions.pas вроде бы ошибка проверьте пожалуйста.

Code: Select all

function Version(): Double;
begin
  Result := 0;
  if (Assigned(FVersion)) then
//    Result := Version();//ошибка
    Result := FVersion();//надо так
end;
Поправте меня если я не прав.

Спасибо.

User avatar
maniac
Developer
Posts: 4373
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Пользовательские плагины

Post by maniac » Fri Jun 25, 2010 6:11 pm

Совсем не давно начал писать утилиту для работы с базой мovinizer'a для реализации нужных мне функций.
А тут разработчики такую возможность добавляют. :D
Скачал, посмотрел, оценил. Сейчас пробую что-нибудь реализовать. :)
Если будете делать плагин, то отдельную тему создавайте.
В файле unUserFunctions.pas вроде бы ошибка проверьте пожалуйста.
Уточню у программера. Но вроде нормально работает.
ImageImage

AndrewSt
Extra
Posts: 31
Joined: Mon Mar 30, 2009 5:55 pm

Re: Пользовательские плагины

Post by AndrewSt » Wed Jun 30, 2010 9:33 pm

Ошибка здесь точно есть, а работает все замечательно потому что данная функция не используется.
Запуск данной функции приводит к ошибки доступа к памяти.

В посте с описанием функционала точно есть опечатка :)
function GetFloatField (AName: string): Integer; Возвращает значение поля в float форме для текущей записи.
ведь double возвращать должно

Объясните по подробнее пожалуйста как работает функция
function DownloadURLWithReferer(AURL: string; ARefer: string): string;

User avatar
Vlad
Developer
Posts: 2933
Joined: Wed Jan 23, 2008 11:37 am

Re: Пользовательские плагины

Post by Vlad » Thu Jul 01, 2010 11:21 am

AndrewSt wrote: Объясните по подробнее пожалуйста как работает функция
function DownloadURLWithReferer(AURL: string; ARefer: string): string;
Некоторые сайты выполняют запросы, только если указывается страница, с которой произошел запрос (реферер). Например, сервер выдаст страницу www.someserver.com/somepage.htm только в том случае, если мы перешли на эту страницу с www.someserver.com. Если же мы обратимся к странице напрямую, сервер выдаст что-то другое (например, скажет, что нужно перейти на www.someserver.com). В таком случае следует вызвать
DownloadURLWithReferer('http://www.someserver.com/somepage.htm', 'http://www.someserver.com');
ImageImage

AndrewSt
Extra
Posts: 31
Joined: Mon Mar 30, 2009 5:55 pm

Re: Пользовательские плагины

Post by AndrewSt » Thu Jul 01, 2010 1:35 pm

спасибо понял

AndrewSt
Extra
Posts: 31
Joined: Mon Mar 30, 2009 5:55 pm

Re: Пользовательские плагины

Post by AndrewSt » Mon Jul 05, 2010 10:21 am

Обнаружил ошибку:
Если вызвать метод GetLangStr перед вызовом RegReadString, то RegReadString возвращает строку с битыми последними символами.
Проверьте пожалуйста.
вот пример кода

Code: Select all

procedure TfmPluginExample.InitDefaultValues;
begin
  edDataBase.Text := RegReadString('DatabaseFileName');
  GetLangStr(324);
  lbl1.Caption := RegReadString('DatabaseFileName');
  FMoviesList := TObjectList.Create(True);
end;
Но это проявляется не на всех ключах реестра заметил их на:
DatabaseFileName
Recent1
TotalAllBytes2

PS
Может ветку отдельную стоит создать по ошибкам?

User avatar
maniac
Developer
Posts: 4373
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Re: Пользовательские плагины

Post by maniac » Tue Aug 10, 2010 10:29 am

Выложил обновленную версию.
ImageImage

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests