Страница 1 из 1
Использование контентных функций в wfx-плагине
Добавлено: Чт окт 22, 2009 17:39
vlarx
Привет всем!!
Только начал осваивать написание плагинов для TC, пишу wfx на Delphi. С основными функциями разобрался, с контентными функциями никак не получается..
Нужные мне колонки настроил функцией FsContentGetDefaultView - отображаются нормально.
Как я понял, значения для файлов в этих колонках должны передаваться Коммандеру функцией FsContentGetValue. FsContentGetSupportedField и FsContentGetValue описал и экспортировал, но они не вызываются Коммандером при просмотре моих файлов в wfx-плагине.
Помогите найти грабли..

Добавлено: Чт окт 22, 2009 17:43
vlarx
P.S. Коммандер: Total Commander 7.50a
Добавлено: Чт окт 22, 2009 18:29
D1P
Показывай исходник, телепатическая машинка в ремонте у меня.
Добавлено: Пт окт 23, 2009 08:38
vlarx
Код: Выделить всё
function FsContentGetSupportedField(FieldIndex:integer;FieldName,Units:pchar; maxlen:integer):integer; stdcall;
begin
MessageBoxA(0, PChar('Test FsContentGetSupportedField'), '', 0);
Units[0]:=#0;
if (FieldIndex<0) or (FieldIndex>=2) then begin
Result:=FT_NOMOREFIELDS;
Exit;
end;
StrLCopy(FieldName, _Fields[FieldIndex], MaxLen);
Result:=ft_string;
end;
function FsContentGetValue(fn: pchar; FieldIndex, UnitIndex: integer;
FieldValue: PChar; maxlen, flags: integer): integer; stdcall;
begin
MessageBoxA(0, PChar('Test FsContentGetValue'), '', 0);
case FieldIndex of
0: StrLCopy(FieldValue, PChar('Test 1'), MaxLen);
1: StrLCopy(FieldValue, PChar('Test 2'), MaxLen);
end;
if (Result=FT_STRING) and (lstrlen(FieldValue)=0) then
Result:= FT_FIELDEMPTY;
end;
function FsContentGetDefaultView(ViewContents,ViewHeaders,ViewWidths,
ViewOptions:pchar;maxlen:integer):bool; stdcall;
begin
result:=true;
StrPCopy(ViewContents,'[fs.'+_Fields[0]+']\n[fs.'+_Fields[1]+']');
StrPCopy(ViewHeaders,_Fields[0]+'\n'+_Fields[1]);
StrPCopy(ViewWidths,'100,25,75,85');
end;
//..
exports
FsContentGetDefaultView,
FsContentGetSupportedField,
FsContentGetValue,
FsInit,
FsFindFirst,
FsFindNext,
FsGetDefRootName,
FsFindClose;
FsContentGetDefaultView отрабатывает нормально, показывая то, что мне нужно.
Сообщений "Test FsContentGetSupportedField" и "Test FsContentGetValue" не появляется при показе папок и файлов в плагине. При каком событии или условии Коммандер должен вызывать эти функции?
Может что-то специальное нужно указать в FsFindFirst, FsFindNext?
Добавлено: Пт окт 23, 2009 10:02
D1P
Этот код работает, нужные вызовы делаются. Справку сейчас посмотреть не могу (она в неподдерживаемых семёркой hlp-файлах), потому предлагаю сделать вот что: взять исходники TWinamp (
http://wincmd.ru/plugring/TWinAmp3.html) и начать сравнивать вызовы функций.
По крайней мере я так и сделал - заменил функции в TWinamp твоим кодом (с некоторой подгонкой, естественно), всё заработало с первого раза.
Добавлено: Пт окт 23, 2009 10:16
vlarx
Спасибо, щас буду пробовать...
Добавлено: Пт окт 23, 2009 11:11
vlarx
Всё, грабли нашёл!
Тут я немного слукавил, написав в функции FsContentGetDefaultView
Код: Выделить всё
StrPCopy(ViewContents,'[fs.'+_Fields[0]+']\n[fs.'+_Fields[1]+']');
На самом деле вместо fs у меня было имя моего плагина, вот фукнкции, видимо, и не вызывались... В справке этот момент приводится как пример, особого внимания не уделяется...
Щас нужные функции вызываются...
