Свойство "Always On Top" для немодальных диалогов?

Хотите предложить идею нового плагина или знаете, что улучшить в существующем? Пишите сюда.
User avatar
John Doe
Бюрократ
Posts: 14267
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 468 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

Latest post of the previous page:

Посмотрел код.
zg wrote: Fri 04 Apr, 2025 04:39 хотелось бы понять, какой код из второго примера неестественно вывернулся в какой код из первого примера.
В каком смысле "неестественно" я уже пояснил.
По существу: первый пример использует ненужные неотображаемые (но обновляемые) оверлеи.
Предположим, избыточным расходом ресурсов можно пренебречь.
Но код в текущем виде не достаточен - при переключении в редактор несколько секунд я наблюдаю чистое поле, поэтому изменил так:
Далее: что будет при небольшом усложнении ТЗ, показывать оверлей при наличии любого поля ввода (т.е. в панелях, в диалогах)?
И наконец: я вижу свой гипотетический виджет буфера обмена многострочным, перемещаемым, сворачиваемым. Полагаю, это всё возможно и с раздельными оверлеями, но получится как-то совсем не прямо.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14267
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 468 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

Кроме того в первом варианте отсутствует
  • чистка при перезагрузке
  • реакция на изменение размеров окна, но DN_RESIZECONSOLE сейчас не работает

Code: Select all

F=far.Flags
items={{"DI_TEXT",0,0,9,0,0,0,0,0,""}}
dialogs={}
timer=far.Timer 5000,->for _,dialog in pairs dialogs do dialog\SetText 1, mf.clip 0

Event
  group:'ExitFAR'
  action:->
    timer\Close!
    for _,dialog in pairs dialogs do far.DialogFree dialog

guid=win.Uuid'c83affff-a10f-4dce-896b-087593f7e69d'
Event
  group:"EditorEvent"
  action:(id,Event)->
    if Event==F.EE_CLOSE
      far.DialogFree dialogs[id]
      dialogs[id]=nil
    elseif Event==F.EE_GOTFOCUS
      unless dialogs[id]
        dialogs[id]=far.DialogInit guid,0,0,10,0,nil,items,(bit64.bor F.FDLG_NODRAWSHADOW,F.FDLG_STAY_ON_TOP), (dlg, msg) ->
          if msg==F.DN_INITDIALOG or msg==F.DN_RESIZECONSOLE -- !не работает
            with editor.GetInfo id
              dlg\MoveDialog 1, {X:.WindowSizeX-10, Y:.WindowSizeY}
          nil
      dialogs[id]\SetText 1, mf.clip 0
    nil
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Предложения и идеи”