Latest post of the previous page:
В мануале есть пример, но сказаноAfter replacing the standard Lua 5.1 DLL with one from LuaJIT 2.0, this example has stopped working. The issue is investigated.
Latest post of the previous page:
В мануале есть пример, но сказаноAfter replacing the standard Lua 5.1 DLL with one from LuaJIT 2.0, this example has stopped working. The issue is investigated.
сам патч, для тех, кто сам собрать захочет.
Code: Select all
zg 17.10.2014 04:06:40 +0200 - build 4138
1. ACTL_GETWINDOWINFO возвращает все окна в порядке текущего z-order'а.
Я попробовал добавить в диалог элемент, который может получать фокус (конкретно - кнопку). Но, как выяснилось, диалог не получает событий от мыши и клавиатуры, пока не закончится цикл. Более того! ФАР, похоже, не получает прерываний (как если бы цикл выполнялся в главном потоке). А как организовать "фоновое"выполнение цикла? Надо делать coroutine и т.д.?John Doe wrote: ↑Sat 30 Sep, 2017 09:24 Сомневаюсь что должно.Тут то же самое, без DM_REDRAW не отображается.Code: Select all
--здесь был Ваш пример
FarDialog (closed)
.1. Обработчик вызывается. Проверено в немодальном вариантеJohn Doe wrote: ↑Tue 06 Nov, 2018 09:19 buniak_a_h, вы неправильно тестируете, и соответственно делаете преждевременные выводы.
Для начала стоит посмотреть вызывается ли обработчик, и с какими параметрами.
Для этого удобно использовать win.OutputDebugString.
В конкретном данном случае вы ошиблись с параметрами функции-обработчика, должно быть так: https://api.farmanager.com/ru/defs/dlgproc.html
_,
, но на работу это не повлияет - проверено в другом скрипте.В нём тоже:
Code: Select all
local function DlgProc(hDlg,Msg,Param1,Param2) -- JD: правильные аргументы
if Msg==F.DN_CLOSE then cont=false end -- BAX, при закрытии диалога выставляю признак, что цикл можно снимать
end
return far.DialogInit(id,-1,-1,len,4,len,items,flags, DlgProc)
end
Code: Select all
local hDlg = Progress(" ")
local i = 1
far.Timer(500,function(t)
i = i+1
if not cont or i>20 then t:Close(); return end
hDlg:send("DM_SETTEXT",2,i)
end)
Вы пробовали?
Спасибо, попробую...
У timer object-а, видимо, должен быть метод типа Free() ? Ведь надо как-то его останавливать после закрывания диалога...timer = far.Timer (interval, handler [, ...])
Returns:
timer : userdata (timer object), or nil
Разумеется.
В мануале всё есть.buniak_a_h wrote: ↑Tue 06 Nov, 2018 14:18 В мануале упомянут timer:Close(), но это не ответ. Хотелось бы описание типа с перечислением доступных методов и пропертей...
Поправка: этого достаточно для демонстрации, что желаемое вами достижимо, но не гарантирую, что код полный.