Хочу самостоятельно обработать DN_LISTHOTKEY.
Изменяю позицию посылая DM_LISTSETCURPOS, и возвращаю TRUE, т.к. сам обработал событие. Но не получается.
Вот код:
local F = far.Flags
far.Dialog("",0,0,20,6,nil,{{"DI_LISTBOX",3,1,16,5,{{Text="&atext"},{Text="&btext"},{Text="&ctext"}},nil,nil,"DIF_LISTNOAMPERSAND"}},0,function(hDlg,Msg,Param1,Param2)
if Msg==F.DN_LISTHOTKEY then
hDlg:send("DM_LISTSETCURPOS",1,{SelectPos=3})
far.AdvControl("ACTL_WAITKEY")
return 1
end
end)
Список из трёх элементов, жму 'b', и вижу что курсор переместился на третий элемент, т.е. DM_LISTSETCURPOS сработало.
Но после этого курсор почему-то возвращается обратно.
local F = far.Flags
local DN = {}
for k,v in pairs(F) do if k:match"DN_" then DN[v] = k end end
local ignore = {[F.DN_ENTERIDLE]=1,[F.DN_DRAWDIALOG]=1,[F.DN_DRAWDIALOGDONE]=1,[F.DN_DRAWDLGITEM]=1,[F.DN_DRAWDLGITEMDONE]=1,[F.DN_CTLCOLORDIALOG]=1,[F.DN_CTLCOLORDLGLIST]=1,}
far.Dialog("",0,0,20,6,nil,{{"DI_LISTBOX",3,1,16,5,{{Text="&atext"},{Text="&btext"},{Text="&ctext"}},nil,nil,"DIF_LISTNOAMPERSAND"}},0,function(hDlg,Msg,Param1,Param2)
if not ignore[Msg] then
win.OutputDebugString(("%s: %s"):format(DN[Msg] or Msg,tostring(Param2)))
end
if Msg==F.DN_LISTHOTKEY then
hDlg:send("DM_LISTSETCURPOS",1,{SelectPos=3})
far.AdvControl("ACTL_WAITKEY")
mf.beep()
return 1
end
end)
Alexey Samlyukov wrote: я там на DN_LISTHOTKEY возвращаю false.
FALSE - разрешить изменение.
В результате выполняется стандартная обработка, и курсор устанавливается на пункт соответствующий горячей клавише.
А вовсе не на тот пункт, который хочу я.