Предложения по плагинной системе
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Rapid D
- Не в сети
- Administrator
- Сообщений: 1995
- Спасибо получено: 35
var
data1:Pointer;
begin
case _byte_at(data,5) of
...
PE_PROPERTIES_CHANGED:
begin
data1 := callStr(AnsiChar(PM_GET)+ AnsiChar(PG_PREF_VALUE)+ _istring(параметр, например 'use-old-xstatus'));
vType := _byte_at(data1, 4);
vValue := _istring_at(data1, 5);
Дальше в зависимости от типа разбираем значение.
параметр может быть как "своего" типа (в данном примере bool), так и blob - т.е. нераспознаного. Это нужно учесть!
end;
Для типа ET_String - в vValue будет UTF8 вид строки.
Для даты(ET_Date) формат:
Def_DateFormat = 'DD.MM.YYYY';
Для времени (ET_Time):
Def_DateTimeFormat = 'DD.MM.YYYY HH:NN:SS';
Для boolean(ET_Bool):
yesno:array [boolean] of AnsiString=('No','Yes')
Теперь думаю как бы получше сделать сохранение настроек плагинов.
Думаю в 1108 это уже появится. В db5
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- elron
- Не в сети
- New Member
- Сообщений: 14
- Спасибо получено: 0
Уже есть целых 3 (три) штуки. Кто читает Путеводитель по Плагинам для R&Q внимательно, находит обязательно.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Mikanoshi
- Не в сети
- Platinum Member
- Сообщений: 1112
- Спасибо получено: 158
У меня есть для 2009 апи, но там всё в AnsiString))а кто-нибудь пытался адаптировать плагинное API под Delphi 2009/2001? т.е сделать и его юникодовым.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Vinum
- Не в сети
- Premium Member
- Сообщений: 159
- Спасибо получено: 0
Вложение API2009.rar не найдено
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
планируется ли передача строк в виде UnicodeString?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xvoct
- Не в сети
- New Member
- Сообщений: 1
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- CowBrat
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
вроде как, чаще всего сообщения отправляются одно-двум-трем контактам: подруга, друг-по-переписке ...
И очень часто сообщение состоит просто из ссылки. Так вот, сделать плагин, который при нажатии хоткея, например Ctrl+Shift+1 отсылал бы содержимое буфера определенному контакту, настроенному на 1.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- cy6
- Не в сети
- Elite Member
- Сообщений: 273
- Спасибо получено: 0
У плагина есть следующие возможности взаимодействия с пользователем через интерфейс RnQ:
1) Окно "Настройки" в разделе "Настройки/плагины".
Годится только для какого то редкого тюнинга, труднодоступно (долго добираться до него). Чаще всего используется для AboutBox.
2) Создание кнопок (в специальной панели, обычно невидимой) и табов в чате. Лично меня такие табы (кнопки не в счет) только раздражают.
3) В самих исходниках обнаружены еще команды добавки пунктов меню в меню контакта. В API они не документированы, что не страшно, в принципе.
Возможности добавлять что либо в интерфейс пользователя (кроме меню пользователя) окна roaster нет.
Как уже некоторые могли заметить, кнопку добавить возможно (возможностями WinAPI и перехватом оконной процедуры roaster).
Пару дней возилась с добавлением пункта в меню, но с этим есть очевидные проблемы из-за сверхзамудренного способа реализации всплывающих меню (и не только меню) в Delphi.
Оказывается, Delphi создает кучу пустых (0,0,0,0) окон для всяких нужд, а именно, для создания отдельной оконной процедуры. И окна эти одинаковы для всплывающих меню и других объектов. Отличить их нет никакой возможности, кроме как по приходу характерных для всплывающих меню сообщений. Это хоть и сложно, но реализуемо.
Настоящая беда кроется в методах Classes.AllocateHWnd и Classes.DeallocateHWnd.
А именно в MakeObjectInstance и FreeObjectInstance.
Особенно в этом коде:
procedure DeallocateHWnd(Wnd: HWND);
var
Instance: Pointer;
begin
Instance := Pointer(GetWindowLong(Wnd, GWL_WNDPROC));
DestroyWindow(Wnd);
if Instance <> @DefWindowProc then FreeObjectInstance(Instance);
end;
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Rapid D
- Не в сети
- Administrator
- Сообщений: 1995
- Спасибо получено: 35
Что ещё есть в КЛ, кроме меню контактов?
В планах у меня была панелька в КЛ с кнопками от плагинов, примерно как в чате.
Но как-то она отодвинулась по надобности на дальний план...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- cy6
- Не в сети
- Elite Member
- Сообщений: 273
- Спасибо получено: 0
Есть еще центральное меню программы (куда очень удобно было бы поместить пункты вызова разных функций плагина, например запуск проверки истории и другое), а также меню статусов (куда можно добавить нестандартные статусы, опять же из плагинов).Как-то я не понял, что вы хотите добавлять?
Что ещё есть в КЛ, кроме меню контактов?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- cy6
- Не в сети
- Elite Member
- Сообщений: 273
- Спасибо получено: 0
Очень нужен доступ из плагина к основным настройкам темы (цвета, шрифты).
Доступ к самому файлу основных настроек темы, минуя саму крысу, разумеется возможен. Но это чревато для плагина дублированием кода, отвечающего за zip распаковку.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- cy6
- Не в сети
- Elite Member
- Сообщений: 273
- Спасибо получено: 0
Не хватает событий PE_THEME_CHANGED, PE_THEME_RELOADED.
Не хватает возможности добавить в список capability, собственный GUID плагина, один или несколько. Команды типа PC_ADD_CAPABILITY <GUID>.
Очень нужен, например, для определения поддержки удаленного RnQ тех же возможностей, что и локальный (грубо говоря, установлен ли плагин нужной версии на удаленной системе).
Также, для поддержки сторонних доп. статусов, что менее важно.
Плюс, нужна и команда типа PG_LIST_CAPABILITIES для получения своих локальных капсов и других контактов.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- cy6
- Не в сети
- Elite Member
- Сообщений: 273
- Спасибо получено: 0
Либо команды получения пароля на аккаунт, типа PG_PROFILE_PASSWORD, чтобы можно было вытащить название выбранной темы из запаролированного zip "db5", чтобы для раскраски в нужной теме не спрашивать его второй раз у пользователя.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.