HaRT wrote: ↑Sat 22 Jul, 2017 02:32Не знаю конкретно насчёт закрыть, но
вот тут и кнопкосочетание получается, и окошко на экране не остаётся, и код простой и небольшой.
Да, когда вся функция action выполняет только waitkey, и после этого заканчивает работать, у меня тоже окошко
far.Message
закрывается. Проблема как раз возникает, когда из готового (довольно большого, назову его "старый") диалога надо по нажатию бутона вывесить приглашение, а введённый ключ поместить в поле ввода. Если для приглашения вызывать
far.Message
, то оно не закрывается, пока мышкой не ткнёте в "старый" диалог. При этом "кнопка" MSClick не заносится (что правильно!). Если "старому" диалогу выдать сообщение DM_SETFOCUS, то закрываются оба (и far.Message, и "старый" диалог).
В принципе, функция получилась довольно компактная. После небольшой переделки получилось так:
local function _InKey(_s)
local Res
local h,ww=Far.Height,_s:len()+4
local function _handl(hndl, Msg1, _, _)
if Msg1 == F.DN_DRAWDIALOGDONE then
Res = mf.key(mf.waitkey(0,1))
hndl:send(F.DM_CLOSE)
end
end
local t=h-6
local b=t+4
far.Dialog('', -1,t,ww,b, nil,
{
{F.DI_DOUBLEBOX, 0,0,ww+1, 5, 0,0,0, 0, ''},
{F.DI_TEXT, 2,2,ww-2, 2, 0,0,F.CENTERTEXT,0, _s},
}, F.DIF_CENTERGROUP, _handl
)
return Res
end -- _InKey
Всего-то 19 строк...
Сама функция из макроса (
action=funcion()...end
) - та же, что в моём примере. Возможно, проблема в нём, но он уж совсем тривиальный!..