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

Хотите предложить идею нового плагина или знаете, что улучшить в существующем? Пишите сюда.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

Latest post of the previous page:

NightRoman, и как мне это проверять?
ps:$Dialog.StayOnTop = $true InvalidOperation: The property 'StayOnTop' cannot be found on this object. Verif y that the property exists and can be set.
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Извините, не думал, что у вас дойдут руки до практического теста. Пока привел код, просто как концептуальный пример того, что делаю.

Для воспроизведения понадобится новая версия FarNet со StayOnTop, подготовлю все и выложу к завтрашнему утру.

Этот код проще поместить в файл типа dialog.far.ps1

Code: Select all

$Global:Dialog = $Far.CreateDialog(-1, -1, 52, 4)
$Dialog.StayOnTop = $true
$b1 = $Dialog.AddBox(0, 0, 0, 0, 'box')
$t1 = $Dialog.AddText(1, 1, 50, 'text')
$Dialog.Open()
и выполнить его этой командой, открыв диалог

Code: Select all

ps: .\dialog.far.ps1
и потом выполнить проблемную команду

Code: Select all

ps: $Dialog.Close()
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

FarNet 9.0.19 включает экспериментальный флаг StayOnTop и должен быть доступен PowerShell скриптам.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

NightRoman wrote: Sat 29 Mar, 2025 05:01 FarNet 9.0.19 включает экспериментальный флаг StayOnTop и должен быть доступен PowerShell скриптам.
6457.
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

zg,
Спасибо, не падает.

На скрипте dialog=2.far.ps1 (ниже) наблюдаются некоторые неожиданные эффекты.
Если это интересно на данном этапе эксперимента, конечно.

Code: Select all

$Global:Dialog = $Far.CreateDialog(-1, -1, 52, 4)
$Dialog.StayOnTop = $true
$b1 = $Dialog.AddBox(0, 0, 0, 0, 'box')
$t1 = $Dialog.AddText(1, 1, 50, 'text')
$Dialog.Open()

Start-FarTask -Data Dialog {
	Start-Sleep 5
	job {
		$Data.Dialog.Close()
	}
}
Запускать командой

Code: Select all

ps: .\dialog=2.far.ps1
Запускать из двух видимых панелей с разделением посередине.
Скрипт открывает топовый диалог и через 5 секунд закрывает его.
Ожидание идет в фоне и не блокирует Фар, можно ходить по файлам курсором, например.

Эффект 1 - диалог имеет тень на левой панели, а на правой нет.

Эффект 2 - после авто-закрытия на правой панели остается черный след от правой половины диалога.
Черный след не исчезает при хождении по файлам вертикально, но исчезает по Escape или Tab, например.
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Суть блока

Code: Select all

job {...}
в коде - вызов закрытия через ACTL_SYNCHRO.
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

zg, в вашем мун скрипте есть код с DM_SETINPUTNOTIFY.
Какова роль этого сообщения? Когда применять? Из энц. не совсем понятно, но ясно, что мне это никогда с обычными диалогами не требовалось. С топовыми ситуация иная?

Code: Select all

far.SendDlgMessage dlg,F.DM_SETINPUTNOTIFY,1
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

NightRoman wrote: Sat 29 Mar, 2025 18:49 Когда применять?
Подписка на DN_INPUT нужна для получения событий от мыши и прочих сырых консольных сообщений (в отличии от DN_CONTROLINPUT туда приходят события об отпусканиях клавиш и пр.)
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

В drive.moon не учитывается что в момент перезагрузки макросов активным может быть окно отличное от панелей

Code: Select all

lua:Keys"F4" far.MacroLoadAll()
Собственно как я понимаю сейчас невозможно "привязать" диалог к не текущему окну.

P.S.
И фар может быть вообще без панелей запущен, это тоже стоит учесть в drive.moon.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Я вообще считаю что не стоит так жёстко привязывать aot-диалог к одному окну.
Что если это управление медиаплеером.
Или мои элементы управления имеют смысл во всех редакторах, и я хочу не создавать отдельный aot-диалог для каждого редактора, а использовать единый.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Sun 30 Mar, 2025 19:57 В drive.moon не учитывается что в момент перезагрузки макросов активным может быть окно отличное от панелей
это просто пример, который я использовал для отладки.
John Doe wrote: Sun 30 Mar, 2025 19:57 Собственно как я понимаю сейчас невозможно "привязать" диалог к не текущему окну.
пока — да.
John Doe wrote: Sun 30 Mar, 2025 20:21Или мои элементы управления имеют смысл во всех редакторах, и я хочу не создавать отдельный aot-диалог для каждого редактора, а использовать единый.
а почему вы не хотите рассказать подробнее? я в реализации основываюсь на тех знаниях, что у меня есть. если есть какой-то полезный пример использования, а я его не знаю, то он абсолютно никак не влияет на мои действия.
NightRoman wrote: Sat 29 Mar, 2025 12:33Если это интересно на данном этапе эксперимента, конечно.
это интересно, но возможно не все такие проблемы есть возможность сразу исправить.
NightRoman wrote: Sat 29 Mar, 2025 18:49zg, в вашем мун скрипте есть код с DM_SETINPUTNOTIFY.
оно разрешает приход DN_INPUT в диалоговую процедуру. в диалоги с флагом FDLG_STAY_ON_TOP пока (или не пока) DN_CONTROLINPUT не приходит, поэтому обработка DN_INPUT — это единственный способ получать ввод.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

zg wrote: Mon 31 Mar, 2025 19:26 а почему вы не хотите рассказать подробнее?
Поскольку речь о гипотетических примерах, подробнее можно только фантазировать.
Можно представить себе один "диалог", обрабатывающий все редакторы. Когда очередной редактор активируется - он отображается поверх него.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Mon 31 Mar, 2025 19:40 Можно представить себе один "диалог", обрабатывающий все редакторы.
и в чём преимущество перед персональными диалогами? минус, необходимость обрабатывать переключения окон и, если содержимое диалога уникально для каждого редактора, обновление содержимого диалога.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

zg wrote: Mon 31 Mar, 2025 21:17 и в чём преимущество перед персональными диалогами?
Гипотетически: в каких-то случаях (и на чей-то вкус) может быть рациональней, логика проще.
Если выдумывать пример, то сходу приходит на ум элемент управления, отображающий несколько элементов клипбоарда.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

zg wrote: Mon 31 Mar, 2025 19:26 если есть какой-то полезный пример использования, а я его не знаю
Мне вот это кажется вполне достойным примером:
John Doe wrote: Sun 30 Mar, 2025 20:21 Что если это управление медиаплеером.
Как и вообще любая панелька, взаимодействующая с окружением вне Фара и вне зависимости от того, что пользователь в данный момент делает в Фаре.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Mon 31 Mar, 2025 21:29Гипотетически: в каких-то случаях (и на чей-то вкус) может быть рациональней, логика проще.
я точно с человеком разговариваю? я привёл конкретно то, что будет сложнее, вы выражаетесь максимально общими категориями.
John Doe wrote: Mon 31 Mar, 2025 21:29Если выдумывать пример, то сходу приходит на ум элемент управления, отображающий несколько элементов клипбоарда.
хороший пример, и логика будет сложнее как раз у одного окна.
HaRT wrote: Mon 31 Mar, 2025 21:50Мне вот это кажется вполне достойным примером
примером чего? полезности одного диалога на все редакторы?
Post Reply

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