Total Commander Knowledge Base

Есть вопрос?

Поищите ответ в самой большой русскоязычной базе знаний по Total Commander!

Особенности работы функции LogProc

Q: Я пишу файлсистемный плагин, и не могу понять одну вещь. Мне необходимо отображать некоторую информацию в информационной панели FTP. Когда я использую примерно следующий код:

...
MyLogProc:TLogProc;
...
function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc;pRequestProc:tRequestProc):integer; stdcall;
Begin
PluginNum:=PluginNr;
MyLogProc:=pLogProc;
MyLogProc (PluginNum,MSGTYPE_DETAILS,'Bla-bla-bla');
Result:=0;
end;

панель FTP не появляется. Следующий код:

...
MyLogProc:TLogProc;
...
function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc;pRequestProc:tRequestProc):integer; stdcall;
Begin
PluginNum:=PluginNr;
MyLogProc:=pLogProc;
MyLogProc (PluginNum,MSGTYPE_CONNECT,'Bla-bla-bla');
Result:=0;
end;

работает как нужно, панель появляется и информация логируется как следует. Однако в API WFX есть следующее описание:

Цитата
Do NOT call LogProc with MSGTYPE_CONNECT if your plugin does not require connect/disconnect! If you call it with MsgType==MSGTYPE_CONNECT, the function FsDisconnect will be called (if defined) when the user presses the Disconnect button.

(НЕ вызывайте LogProc с параметром MSGTYPE_CONNECT, если ваш плагин не требует соединения/отсоединения. Если вы вызовете функцию с параметром MsgType==MSGTYPE_CONNECT, то функция FsDisconnect будет вызвана (если она определена в плагине) когда пользователь нажмёт кнопку "Отключение").

WFX API Documentation

Мой плагин ни с чем не соединяется, мне просто нужно отображать кое-какую информацию на панели, возможно - сохраняя её в лог. Соответственно, MSGTYPE_DETAILS - всё, что мне требуется, но без MSGTYPE_CONNECT эта функция не работает.

Есть ли ошибка, и где?

A: Описание API слегка неточно. Панель с отображаемой информацией и кнопкой "Отключение" будет отображаться только когда функция LogProc вызвана с параметром MSGTYPE_CONNECT.
Таким образом возможно использовать функции логирования TC без отображения этой панели. Передаваемая информация будет записываться в лог в том случае, если пользователь включил логирование для FTP. Т.е. поведение этой функции можно сделать настраиваемым - пользователь сможет включать и отключать отображение панели и логирование информации самостоятельно.

Christian Ghisler