Как писать плагины?
- twix47
- Не в сети
- New Member
- Сообщений: 1
- Спасибо получено: 0
Вчера вечером в процессе поиска хорошего ICQ клиента наткнулся на RNQ. Клиент очень понравился, так как удобен и без излишеств.
Люблю программировать в delphi7 решил написать какой нибудь палагин. Вопрос в следующем. Нет ли у кого пустого исходника плагина... или статейки как его писать...
Заранее извиняюсь если тема уже поднималась, честно искал но ничего не нашел.
Спасибо всем кто отзовется.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- invisiblekid
- Не в сети
- Elite Member
- Сообщений: 295
- Спасибо получено: 0
там посмотри.
так же посмотри темы с плагинами, часто выкладывают с сорсами.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- manuj
- Не в сети
- Senior Member
- Сообщений: 64
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- dek
- Не в сети
- Moderator
- Сообщений: 2528
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
"событие" PE_MSG_SENT обрабатывается когда набранный текст уже отправлен.
подскажите пожалуйста, на какое "событие" нужно "подписаться", чтобы по нажатию на Enter, или "Отправить" сначала сработал код из плагина, а потом уже введенный текст отправился?
т.е. нужно перехватить данные перед отправкой, обработать их в своем плагине и вернуть крыске, чтобы она спокойно могла отправить их.
существует такая возможность?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Vinum
- Не в сети
- Premium Member
- Сообщений: 159
- Спасибо получено: 0
Внизу приаттачу его. Плагин не пускает в окно чата текст.
Код:
PE_MSG_SENT:
begin
RQ__ParseMsgSentString(data, uino, flagso, msgo);
if (pos('pbiChess:',msgo)=1) or
(pos('pbiReverse:',msgo)=1) or
(pos('pbiCorners:',msgo)=1) or
(pos('pbiCheckersInt:',msgo)=1) or
(pos('pbiCheckersRus:',msgo)=1) or
(pos('pbiCheckersPool:',msgo)=1)
then
result:=str2comm(char(PM_DATA)+_istring(msgo)+_istring(''));
end;
PE_MSG_GOT:
begin
RQ__ParseMsgGotString(data, uini, flagsi, wheni, msgi);
if (pos('pbiChess:',msgo)=1) or
(pos('pbiReverse:',msgo)=1) or
(pos('pbiCorners:',msgo)=1) or
(pos('pbiCheckersInt:',msgo)=1) or
(pos('pbiCheckersRus:',msgo)=1) or
(pos('pbiCheckersPool:',msgo)=1)
then
result:=str2comm(char(PM_DATA)+_istring(''));
Теперь по сабжу:
делаешь RQ__ParseMsgSentString(data, uino, flagso, msgo);
Потом смотришь что нужно и отправляешь
result:=str2comm(char(PM_DATA)+_istring(msgo)+_istring(''));
_istring(msgo) - такое сообщение придет собеседнику
_istring('') - такое отобразится в окне чата
Вложение FixJanus.rar не найдено
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- ObServeR
- Не в сети
- Senior Member
- Сообщений: 78
- Спасибо получено: 0
Не совсем понял способ, который описал Vinum, поэтому отвечу немного по-другому.глупый вопрос.
"событие" PE_MSG_SENT обрабатывается когда набранный текст уже отправлен.
подскажите пожалуйста, на какое "событие" нужно "подписаться", чтобы по нажатию на Enter, или "Отправить" сначала сработал код из плагина, а потом уже введенный текст отправился?
т.е. нужно перехватить данные перед отправкой, обработать их в своем плагине и вернуть крыске, чтобы она спокойно могла отправить их.
существует такая возможность?
Чтобы сообщение не отправилось, надо при обработке PE_MSG_SENT отправить в RnQ в качестве ответа PM_ABORT. После этого обрабатываешь сообщение как тебе надо и уже самостоятельно отправляешь его собеседнику через PC_SEND_MSG.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Mikanoshi
- Не в сети
- Platinum Member
- Сообщений: 1112
- Спасибо получено: 158
А PC_SEND_MSG снова вызывает событие PE_MSG_SENT, так что там нужно это обрабатывать Vinum написал всё правильно, курите SDK. Можно подменить данные в сообщении и не вызывая снова посылку.Чтобы сообщение не отправилось, надо при обработке PE_MSG_SENT отправить в RnQ в качестве ответа PM_ABORT. После этого обрабатываешь сообщение как тебе надо и уже самостоятельно отправляешь его собеседнику через PC_SEND_MSG.
З.Ы. Ещё при PM_ABORT сообщение умирает и не передаётся другим плагинам по цепочке, поэтому они и не пашут) Типа моего SEOIncludeif event = PE_MSG_SENT
INT dest uin
INT flags
ISTRING text
possible replies:
1) PM_DATA
ISTRING message for sending
2) PM_DATA
ISTRING message for sending
ISTRING message for history
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- ObServeR
- Не в сети
- Senior Member
- Сообщений: 78
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- sds
- Не в сети
- Senior Member
- Сообщений: 46
- Спасибо получено: 0
Vinum, ObServeR спасибо, буду пробовать...
2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения
Былоб просто супер!
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Mikanoshi
- Не в сети
- Platinum Member
- Сообщений: 1112
- Спасибо получено: 158
Там вроде всё достаточно ясно)Vinum, ObServeR спасибо, буду пробовать...
2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения
З.Ы. Исходник DIR не дам
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
ну и ненада, без него уже разобралсяMikanoshi писал(а):
З.Ы. Исходник DIR не дам
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
//modMsg: string; - будет хранить модифицированный текст
//lres: boolean; - показывает результат выполнения моей предопределенной функции ProcessImcomingMessage
//если lres=true - тогда проверяем, что с с текстом, если он модифицирован - передаем модифицированный текст
//если не модифицирован - все равно его передаем.
//если lres=false то ничего не показываем пользователю.
PE_MSG_GOT:
begin
RQ__ParseMsgGotString(data, uin, flags, dt, msg);
lres:=ProcessIncomingMessage(msg);
if lres=true then
begin
modMsg:=getModifiedMessage;
if modMsg<>'' then
begin
//showmessage('modified:: '+modMsg);
result:=str2comm(char(PM_DATA)+_istring(modMsg));
end else
begin
//showmessage('original:: '+msg);
result:=str2comm(char(PM_DATA)+_istring(msg));
end;
end
else
result:=0;
end;
может быть я что то не так делаю?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Mikanoshi
- Не в сети
- Platinum Member
- Сообщений: 1112
- Спасибо получено: 158
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
АХТУНК! завелось! мой плагин конфликтовал с Do It Remotely - тот видать сообщения просто блокировал...точно возвращает. проверено многочисленными опытами
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
теперь другой трабл, вот этот код:xternalx писал(а):
АХТУНК! завелось! мой плагин конфликтовал с Do It Remotely - тот видать сообщения просто блокировал...точно возвращает. проверено многочисленными опытами
if modMsg<>'' then
begin
//showmessage('modified:: '+modMsg);
result:=str2comm(char(PM_DATA)+_istring(modMsg));
end else
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Toxa
- Не в сети
- Platinum Member
- Сообщений: 368
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- xternalx
- Не в сети
- Elite Member
- Сообщений: 201
- Спасибо получено: 0
если строку раскомментить то все показывается верно... отключил все плагины вообще, сейчас буду теститьможет опять из-за какого-нибудь плагина данный код не выполняется? если строку раскомментарить, то сообщение выдается?
*** UPD ***
и ведь действительно моя плюшка конфликтовала с другими плагинами... =((
Уважаемый Rapi D & Co, респект Вам и уважуха за столь быстрый и маленький ICQ клиент, но не могли бы вы оптимизировать плагиновую систему, чтобы не возникало таких дурацких конфликтов?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.