AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Вопросы по AkelPad Plugin API.
Goto page Previous  1, 2, 3
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Wed Oct 31, 2012 11:49 am    Post subject: Reply with quote

О_О Кошмар... какова же скорость работы этого монстра. В любом случае, JS нам тут не особо поможет
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5454

PostPosted: Wed Oct 31, 2012 2:28 pm    Post subject: Reply with quote

Fr0sT wrote:
Более сложный - это сменить принцип постановки версий для API, либо меняя его только в случае возможной несовместимости, либо различая минорный-мажорный инкремент.
x1.x2.x3.x4
Версия архитектуры является становится несовместимой, если изменились x1 или x2.
Back to top
View user's profile Send private message Send e-mail
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Thu Nov 01, 2012 6:33 am    Post subject: Reply with quote

Instructor, здорово, респект! Значит, вопрос снимается
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Mon Apr 08, 2013 1:39 pm    Post subject: Reply with quote

Как прекратить обработку сообщения WM_KEYUP/DOWN, если оно уже обработано в собственной процедуре, подставленной в цепь обработки через AKD_SETEDITPROC? Пробовал возвращать и LRESULT(True), и 0, и не вызывать NextProc - всё равно пропускается.

Код кратко:
Code:

...
  pwpd := nil;
  SendMessage(AkelData.hMainWnd, AKD_SETEDITPROC, WPARAM(@SubclProc), LPARAM(@pwpd));
...

function SubclProc(hWnd: HWND; uMsg: UINT; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
var
  Processed: Boolean;
begin
  Processed := False;

  case uMsg of
    WM_KEYDOWN, WM_SYSKEYDOWN:
       Processed := True;

    WM_KEYUP, WM_SYSKEYUP:
       Processed := True;

  end; // case uMsg

  if Processed then Exit(LRESULT(True)); <== добавил по аналогии с сорсом SmartSel

  if (not Processed) and ((pwpd <> nil) and Assigned(pwpd.NextProc)) then
    Result := pwpd.NextProc(hWnd, uMsg, wPar, lPar)
  else
    Result := 0;
end;

Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5454

PostPosted: Wed Apr 10, 2013 4:22 pm    Post subject: Reply with quote

Fr0sT wrote:
... и не вызывать NextProc - всё равно пропускается.
Достаточно не вызывать NextProc, дальше по цепи сообщение не пойдет. Откуда появилось заключение, что сообщение идет дальше?
Back to top
View user's profile Send private message Send e-mail
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Thu Apr 11, 2013 6:19 am    Post subject: Reply with quote

Instructor
Quote:
Откуда появилось заключение, что сообщение идет дальше?

Так нажатый символ печатается, несмотря на то, что он плагином перехвачен.
В принципе, уже не актуально - сгоряча думал наваять плагин для ввода через альт, а потом оказалось, что все уже есть Smile
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Fri Apr 19, 2013 10:20 am    Post subject: Reply with quote

Instructor
в нескольких последних версиях странная вещь творится.
Плагин с одной резидентной функцией (автозапуск, UD_NONUNLOAD_ACTIVE) и функциями по требованию. Сценарий следующий:
1) Запускаем Акель, резидентная ф-я загружается
2) Вызываем ф-ю по требованию
3) Ф-я завершается
4) DLLMain плагина вызывается с параметром DLL_PROCESS_DETACH, производится очистка переменных, снятие хуков и прочее. Но резидентная-то функция должна быть до сих пор активна, и оставаться таковой до закрытия Акеля!

Судя по Log плагину, проблема решается сабклассингом главной процедуры и ловлей AKDN_MAIN_ONFINISH. Это правильный путь?

upd Попробовал снимать сабкласс в AKDN_MAIN_ONFINISH - вообще страшные вещи стали стали происходить.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2056
Location: Vinnitsa, Ukraine

PostPosted: Fri Apr 19, 2013 11:33 am    Post subject: Reply with quote

Quote:
3) Ф-я завершается
4) DLLMain плагина вызывается с параметром DLL_PROCESS_DETACH,
У Вас проблема в пункте 3. Если Вы хотите что-бы после завершения функции по-требованию резидент(весь плагин) оставался Вы должны вернуть UD_NONUNLOAD_NOTACTIVE. А Вы вероятно возвращаете UD_UNLOAD, при котором АР послушно(не смотря что другие функции активны) выгружает из памяти Ваш плагин(и Вы получаете DLL_PROCESS_DETACH). Т.е. Вы внутри плагина должны следить за состоянием и решать что возворащатть UD_UNLOAD или UD_NONUNLOAD_NONACTIVE. Это и будет решением проблемы. (Я так у себя в SpellCheck делаю: резидентом выставляю флажок активности функции(по факту там переменная рабочая на не NULL проверяется), а функции по требованию смотрят на него и корректируют UD_*.)
Вообще DLL_PROCESS_DETACH это последний шанс DLL-ке/плагину почистить за собой хвосты, тв т.ч. удостоверится что больше никто не знает указателей на память в которую загружена DLL и не будет пытаться туда писать/читать, передавать управление.
AKDN_MAIN_ONFINISH - да, этот хук нужно ловить что-бы отключить плагин корректно при выключении АР. Я так делаю в Templates.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Fri Apr 19, 2013 2:48 pm    Post subject: Reply with quote

Ааа, вот оно что! Попробуем. Странно, что раньше работало.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3
Page 3 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group