Концепция Always-on-Top окон и прочих визуальных обьектов основанная на SaveScreen(x1,y1,x2,y2)
и RestoreScreen(x1,y1,x2,y2)
Преимущества перед Always-on-Top концепцией основанной на "keys/actions forwarding" (за неимением лучшего термина скажем так)
Сначала частный но прекрасный пример использования "forwarding" здесь по ссылке:
viewtopic.php?p=172091#p172091
Так вот, преимущества спорные.
Мне кажется что проще реализовать, и более натурально что ли
Т.е., работая с частью экрана мы не уходим из настоящего обьекта Фара, т.е. не надо делать никакого форвардинга.
Возможно это спорно, и всегда везде можно делать форвардинг набором приемов для того, не влияя на функциональность
Все предлагаю покритиковать мною предложенное и услышать чем лучше форвардинг и собрать здесь всякие приемы форвардинга.
local hScrDat
local save_rect_width = 45
local save_rect_height = 4
local save_rect_height_shift = -1
local function fnc_screen_keep_same()
if hScrDat
then far.RestoreScreen(hScrDat)
end
hScrDat = far.SaveScreen(
(Far.Width - save_rect_width ) / 2,
(Far.Height - save_rect_height ) / 2 + save_rect_height_shift,
(Far.Width + save_rect_width ) / 2,
(Far.Height + save_rect_height ) / 2 + save_rect_height_shift
);
end
local function fnc_launch_AoT(sender)
far.Message("Some message text.", "Persistent Always on Top somethng!", "");
fnc_screen_keep_same()
far.Timer(100, fnc_screen_keep_same)
end
Macro { description = "Persistent Always-on-Top of something example",
area = "common",
key = "CtrlAltT",
condition = function() return not hScrDat end,
action = function() fnc_launch_AoT() end
}
Пример очень упрощенный, с целью чтобы было понятно главное