Концепция Always-on-Top окон основанная на SaveScreen(...) и RestoreScreen(...)

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Концепция Always-on-Top окон основанная на SaveScreen(...) и RestoreScreen(...)

Post by citRiks »

Концепция 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
Так вот, преимущества спорные.
Мне кажется что проще реализовать, и более натурально что ли
Т.е., работая с частью экрана мы не уходим из настоящего обьекта Фара, т.е. не надо делать никакого форвардинга.
Возможно это спорно, и всегда везде можно делать форвардинг набором приемов для того, не влияя на функциональность
Все предлагаю покритиковать мною предложенное и услышать чем лучше форвардинг и собрать здесь всякие приемы форвардинга.
  1. local hScrDat
  2.  
  3. local save_rect_width = 45
  4.  
  5. local save_rect_height = 4
  6.  
  7. local save_rect_height_shift = -1
  8.  
  9.  
  10.  
  11. local function fnc_screen_keep_same()
  12.  
  13.     if hScrDat
  14.  
  15.     then far.RestoreScreen(hScrDat)
  16.  
  17.     end
  18.  
  19.     hScrDat = far.SaveScreen(
  20.  
  21.         (Far.Width  - save_rect_width   ) / 2,
  22.  
  23.         (Far.Height - save_rect_height  ) / 2 + save_rect_height_shift,
  24.  
  25.         (Far.Width  + save_rect_width   ) / 2,
  26.  
  27.         (Far.Height + save_rect_height  ) / 2 + save_rect_height_shift
  28.  
  29.     );
  30.  
  31. end
  32.  
  33.  
  34.  
  35. local function fnc_launch_AoT(sender)
  36.  
  37.     far.Message("Some message text.", "Persistent Always on Top somethng!", "");
  38.  
  39.     fnc_screen_keep_same()
  40.  
  41.     far.Timer(100, fnc_screen_keep_same)
  42.  
  43. end
  44.  
  45.  
  46.  
  47. Macro { description = "Persistent Always-on-Top of something example",
  48.  
  49.     area = "common",
  50.  
  51.     key = "CtrlAltT",
  52.  
  53.     condition = function() return not hScrDat end,
  54.  
  55.     action = function() fnc_launch_AoT() end
  56.  
  57. }
Пример очень упрощенный, с целью чтобы было понятно главное
Attachments
Persistent Always on Top of something.Lua
(851 Bytes) Downloaded 78 times
Last edited by citRiks on Mon 10 Oct, 2022 18:46, edited 4 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Концепция Always-on-Top окон основанная на SaveScreen(...) и RestoreScreen(...)

Post by citRiks »

Сценарий применения c диалогoм:
1.) Есть НЕ модальный диалог
2.) показываем его, фотографируем, прячем
3.) показываем его фотографию, по таймеру или по событию redraw
4.) когда он как-то обновляется, то идем на пункт (2.)

Сценарий с Меню, которое НЕ модальным быть не может
1.) Есть меню
2.) показываем его, фотографируем, закрываем
3.) показываем его фотографию, по таймеру или по событию redraw
4.) когда надо обновить меню, то создаем его, и идем на пункт (2.)

Лично мне, такие несложные сценарии выглядят гораздо проще реализуемыми чем приемы форвардинга событий действий в низлежащие обьекты.
Также, в случае НЕСКОЛьКИХ окон одно над другим получается сильно проще,
в случае же с форвардингом я не уверен что то вообще возможно
Last edited by citRiks on Mon 10 Oct, 2022 18:58, edited 2 times in total.
Post Reply

Return to “Обсуждение макросов”