Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Здесь обсуждается всё, что касается макросов.
User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Предыстория вопроса
Современный мир характеризуется большим количеством больших экранов.
А также длинными именами файлов, и прочими "многа букав"
В то же время, размер диалоговых окон в ФАРе, не менялся десятилетиями,
обладая слишком малой величиной, чтобы полностью соответствать современным вызовам.
Более того, не было никакой возможности расширить окошки до приемлимых размеров даже вручную.
Но эти эти горести остались в далеком темном прошлом (смахивает слезу)
поскольку сейчас у нас есть Автоматический Раздвигатель Окон!

https://github.com/dr-dba/LUA-FAR-STUFF ... .XeR0X.Lua

Last edited by Xerox on Fri 03 Jan, 2020 08:52, edited 47 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Latest post of the previous page:

citRiks wrote:
Thu 12 Dec, 2019 14:06
Не слишком ли сложно?
Да не, это фигня. В обычном INI-файлке хранить нечто вроде:

Code: Select all

[<DIALOG-GUID-HERE>]
handle=true
allow-narrowing=false
prefered-size=123
margin-size=5
custom-position-X=15
custom-position-Y=20
custom-width=100
custom-height=50
; .. whatever needed else

[<OTHER-DIALOG-GUID-HERE>]
; that means "do not resize this dialog at all":
handle=false
;...
При инициализции прочитать и запихнуть в двумерный массив, и собственно все.

Отмечу также что это принципиально иной подход чем у Алексиза.
У Алексиза мы должны записать все про все диалоги и элементы диалога.
Мы же пишем сюда только исключения, которые, мне кажется, не нужны-то и особо в 99.99%, т.к. переключение размеров работает гладко
Хотя я и рассмотрю позже тот сценарий когда у СитРикса было вылетание на меньшем размере + ПэйджДаун (кажется), - может там можно вылечить или почерпнуть нечто полезное
Last edited by Xerox on Thu 12 Dec, 2019 22:56, edited 2 times in total.

User avatar
HaRT
Moderator
Posts: 9443
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by HaRT »

Xerox wrote:
Thu 12 Dec, 2019 22:22
В оббычном INI-файлке хранить нечто
Не лучше ли воспользоваться готовым механизмом хранения настроек и метаинформации скрипта, например, используемым во многих скриптах John Doe?
Last edited by HaRT on Thu 12 Dec, 2019 22:53, edited 1 time in total.
Reason: Добавлена ссылка на тему Script Browser'а
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

HaRT wrote:
Thu 12 Dec, 2019 22:24
Не лучше ли воспользоваться готовым механизмом хранения настроек скрипта, например, используемым во многих скриптах John Doe?
буду благодарен за наиболее актуальную ссылку?
(во избежание моего раскапывания разных версий и прочих блужданий в дебрях кода)

спасибо, ссылка есть

Для ИНИ я пока планировал через ФФИ использовать вот это семейство АПИ для работы с ИНИ,
довольно приятные штуки:
"GetPrivateProfileIntA", "GetPrivateProfile****"
https://docs.microsoft.com/en-us/window ... rofileinta

За этими обскурными названиями скрываются нативные специальные функции,
почти полностью удовлетворящие даже самый изысканный вкус.
"Почти", да не совсем.
Но в нашем случае, думаю, это будет не "почти" а вполне "совсем"
Было бы очень light-weight & native для Винды
Last edited by Xerox on Fri 13 Dec, 2019 08:28, edited 3 times in total.

LAT
Posts: 314
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by LAT »

Xerox wrote:
Thu 12 Dec, 2019 22:22
В оббычном INI-файлке хранить нечто
Еще можно использовать mf.msave и mf.mload.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by John Doe »

Xerox wrote:
Thu 12 Dec, 2019 21:46
Например - какого ляда в ЛУА не сделали регекспы такими же как в других языках?
На то были причины.
Но если вам так не нравятся регэкспы луа, то пользуйтесь библиотекой regex, тоже встроенной.

LAT
Posts: 314
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by LAT »

Xerox wrote:
Thu 12 Dec, 2019 22:22
В обычном INI-файлке хранить нечто вроде
Или вариант с файлом конфигурации: viewtopic.php?f=15&t=11392, viewtopic.php?t=7873 (в файле конфигурации сделать return, в скрипте: config = loadfile(путь))

User avatar
zg
zero-gravity
Posts: 5833
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 151 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by zg »

Xerox wrote:
Thu 12 Dec, 2019 21:46
Например - какого ляда в ЛУА не сделали регекспы такими же как в других языках?
1. пункт правил 1.2.
2. мат.

citRiks
Posts: 671
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 195 times
Been thanked: 44 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Xerox wrote:
Thu 12 Dec, 2019 21:46
Возьмите последнюю версию "dialog-ReXiZeR.lua.20191213-2100.7z" и проверьте пожалуйста.
У меня такого уже не повторяется
Проверил — нюанс исчерпан, спасибо.

Остальное посмотрел пока что лишь бегло. Впечатление от скрипта хорошее. Ещё раз спасибо.

И желательно бы продолжение на ru-board`е.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

citRiks
Posts: 671
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 195 times
Been thanked: 44 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Посмотрел работу последней версии скрипта внимательнее на разного рода диалогах и меню. И в целом прежнее весьма благоприятное впечатление ещё более укрепилось.

Однако пока что сохраняются вылеты фара на диалоговых окнах уменьшенных размеров.

В т.ч. в процессе непосредственного уменьшения скриптом размеров дискового меню.

Кроме того, при работе скрипта с этим меню есть определённая особенность, заключающаяся в следующем.

При первичном вызове дискового меню оно позиционируется в области панели, в которой предполагается активация пункта меню. Но после вызова скрипта оно центрируется, и становится непонятным к какой панели меню относится. А тем более при максимальном его расширении. Особенно если есть несколько дисков (в т.ч. сетевых и выносных) и меню насыщено дополнительными пунктами, то оно перекрывает экран Фара почти полностью. В данном случае желательна бы некая дополнительная метка в заголовке дискового меню типа: "Диск (активная панель)" или, соответственно, "Диск (пассивная панель)".
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Shmuel »

По поводу вылетов - это похоже на баг в Фаре:

citRiks
Posts: 671
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 195 times
Been thanked: 44 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Xerox,

Касательно регекспов в ключах макросов.

У меня вот такой регексп для макроса сабжевого скрипта работает:

Code: Select all

key="/(.Ctrl)?(.Alt(Right|Left|Up|Down))|(F2)/";
НО!
Имхо, предпочтительно бы ключи макросов задавать без регекспов, всё-таки. Т.е. так как сейчас в макросе сабжевого скрипта, на мой взгляд, существенно лучше.

Когда ключи заданы регекспами, то искать макросы с определёнными ключами неудобно. Да и в макробраузерах заданные регекспами ключи смотрятся как ребусы.

(upd: код регекспа уточнён)
Last edited by citRiks on Sat 14 Dec, 2019 04:05, edited 1 time in total.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

citRiks wrote:
Fri 13 Dec, 2019 13:58
Но после вызова скрипта оно центрируется, и становится непонятным к какой панели меню относится. А тем более при максимальном его расширении.
так вроде с последующими (вроде необременительными?) переключениями по Ф5 он возвращется в "оригинал", и на правильную сторону, не?
Т.е. так можно и посмотреть на какой он стороне, и потом расширить обратно
Last edited by Xerox on Fri 13 Dec, 2019 21:17, edited 1 time in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

citRiks wrote:
Fri 13 Dec, 2019 20:08
У меня вот такой регексп для макроса сабжевого скрипта работает:..
это спасибо, кладу в скрипт закомментированным

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Shmuel wrote:
Fri 13 Dec, 2019 14:25
По поводу вылетов - это похоже на баг в Фаре:..
Я еще не воспрозводил сценарий, и пишу насколько я понял:
1.) Воспроизводится когда при инициализации диалога (евент),
его элементы изменены так или иначе (например моим скриптом)
2.) .. и на него еще запускается кастомный еще один макрос,
который на этот уже изменный диалог делает SetFocus и посылает нажатия.

так?
Last edited by Xerox on Fri 13 Dec, 2019 22:28, edited 2 times in total.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Shmuel »

Воспроизводится у меня так: AltF2 затем несколько раз AltLeft, пока не вылетит.
Анализ кода скрипта я не производил, похоже, что Фару передаётся какой-то невалидный параметр размера или координат диалога, который Фар должен был бы предварительно обработать или проигнорировать, но Фар его принимает к исполнению и падает.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Shmuel, Интересно.
АльтФ2 - это меню дисков ведь?
И АльтВлево - это ужатие моим макросом?
У меня не воспроизводится..
А, дошло
Так вы же его размер в ноль сужаете )
Ну я бы сказал, что человек желающий превратить ширину диалога в ноль,
вполне заслуженно получает вылет ФАРа,
в принципе это и есть желаемый результат )
В принципе и в скрипт можно предусмотреть проверку MinWidth > 0,
но я посчитал что незачем, - типа пусть убивают/ся таким способом, если хочется )

citRiks, отпишитесь еще раз верно ли мы тут воспроизводим/понимаем ваши сценарии?
Last edited by Xerox on Fri 13 Dec, 2019 22:30, edited 3 times in total.

Post Reply

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