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

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

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

Post by Xerox »

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

Итак, дамы и господа, я рад представить Вам эту первую публичную, но уже полностью рабочую версию.
Думаю что будут добавлены новые возможности, и устранены некоторые недоделки.
Пока не могу все подробно расписать, но если вкратце:

1.) По умолчанию размер диалога/меню/списка будет = ширина экрана минус отступы в две символьные позиции
(это поменялось в последующих версиях, далее изначально дается в оригинальном размере)
1.1.) Режим отображения "по умолчанию" "сейчас "оригинальный", можно изменить на строчке 60
2.) По клавише Ф5 на диалоге происходит его переключение в другие "стандартные" размеры по циклу, в том числе и в оригинальный размер
2.1.) .. так что если вдруг что вышло криво, то с помощью Ф5 всегда можно вернуться в оригинальную композицию
3.) Кaк бонус еще можно использовать Ctrl(+Alt)+<стрелки> для измения размеров и даже сдвигания по вертикали
4.) Высотой диалога я не манипулирую, только шириной, потому что вроде как незачем

Планирую развивать этот продукт, в теле скрипта написан список планов,
в том числе написать комментариев в скрипте, что зачем там, улучшить с помошью вас, дорогих специалистов.
Конечно же, буду рад услышать Ваши замечания и пожелания, мoи Дорогие Читатели!
Mногое зависит и от вашей широкой поддержки, вместе мы свернем и горы, и Фары!
Спасибо за внимание (кланяется с достоинством)

PS
В продолжение этой темы, послужившей мне вдохновением:
Изменение размеров диалоговых окон

Скрипт здесь:
dialog-resizer.lua.7z
убраны ненужные "ахтунги" в скрипте
(3.77 KiB) Downloaded 28 times
(остается для истории, и/или если кому-то вдруг понравится больше)

Скрипт улучшенная версия:
dialog-resizer.lua.20191212.7z
(3.63 KiB) Downloaded 21 times
(остается для истории, и/или ..)
* Ctrl-Alt-<Arrows> - gives 2D moving around (with remembering the position)
* Alt-<Left|Right> - manual width resizing (remembered also)
* If the user applied the one of the commands above, by this:
created the "custom" layout state, remembered,
and added as an additional state to pre-existing states original/margin/percent/full/(+optional custom)
* Do not rezied automaticall by default, only by triggering F5, and if triggered - remembered per dialog
BTW, the default state can be changed in the body of the script

Скрипт улучшенная исправленная версия:
dialog-ReXiZeR.lua.20191213.7z
(3.36 KiB) Downloaded 12 times
* F5 (sizing switch mode) put back to macro handling, so it will not fall out or interfere with other macros
* Cleaned out dead code, refactoring
* Brandname is changed to ReXiZeR!
* .. so probably by these certain bugs fixed :-)

Script fixed again, bug reported by citRix:
dialog-ReXiZeR.lua.20191213-2100.7z
(3.36 KiB) Downloaded 17 times
* Fixed reported bug, when the changed by user text after resizing discarded (to original text)
* Even more refactoring and dead code cleaning

Скрипт доработанная версия:
dialog-ReXiZeR.lua.20191214-1400.7z
(3.53 KiB) Downloaded 14 times
* Added wish to align dialogs in "full" and "percent" modes, when it originally belongs to the left or right panel
* Added commented out regular expression for macro keys, which suggested by citRix
* Traditionally code cleaning

Скрипт неплохая в общем версия:
viewtopic.php?p=158081#p158081
Mostly by citRix suggestions implemented:
* Fixed MainMenu handling
* Fixed complex dialog layouts with unadjacent elements
* Added ignoring custom dialog controls (DI_USERCONTROL=255), as in Review plugin color dialogs
* Added adjustment to dialog height in some cases, as in CodePages dialog menu

Скрипт последняя версия:
viewtopic.php?p=158368#p158368
Last edited by Xerox on Fri 03 Jan, 2020 08:52, edited 47 times in total.

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

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

Post by citRiks »

Latest post of the previous page:

При уменьшении размеров сабжевым скриптом до 0 меню (гуид 0E0B4A2B-BC1F-44D4-A986-C24E48142955) скрипта Менеджер закладок для папок (BookmarkManager.3.0.3) Фар валится.

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

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

Post by HaRT »

citRiks wrote:
Mon 23 Dec, 2019 20:03
Фар валится
(1) Скачайте PDB ровно для своей сборки Фара (в т.ч. той же битности) — с той же странички, где скачивание Фара. (2) Файл Far.pdb положите рядом с Far.exe. (3) Воспроизведите падение — вместо многочисленных Far.exe!<unknown> (get the pdb) должна появиться более содержательная информация. (4) Выложите новый текстовый снимок сообщения об ошибке тут.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by zg »

не надо ничего качать, нашли уже причину.

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

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

Post by Xerox »

citRiks писал: ↑
Это поле данного диалога предназначено для ввода только одного знака (буквы или цифры). И удвоение его ширины в данном случае неадекватно назначению этого поля.
согласен в принципе, HO.
Я там писал что в принципе миллион "если .. то .. " в коде я считаю некоторым злом, но посмотрим
Kаждый один такой "edge case" довавляет ~10 строчек кода
Становится трудно майнтейнить (в том числе и самому) и 2.) становиться трудно понимать (в том числе и самому)

ПС
Я тут у себя победил (выложу попозжее на неделе):
1.) критичную проблему с обрезанием значения.
2.) проблемЫ с ПлугМеню:
2.1.) Вами упомянутое исчезамние значения
(это не связано с уменьшением размера, это связано c кривой постройкой самого диалога -
там в оригинале элементы налазят друг на друга и при сжатии и потом расширении
получается что начинают прятаться друг за другом)
Еще надо иметь ввиду что в процессе мутаций таких текст может "уехать" взад как бы,
но если встать на тексте и сделать Home/End то он возвращается
2.2.) Вами не упомянутую проблему с КастомЭлеменмт диалога ПлагМеню
До конца не вылечено, и похоже что это невозможно совсем вылечить,
но использовать можно, и ущерба восприятию как минимум нет
КастомЭлемнты делают проблемы всегда похоже.
похожее, но не то же самое было в КастомЭлемнте плагина Ревью

И вот эти вот workarounds создают 95% проблем,
и удлиняют количество кода/сложность кода в разы
А "сложность кода=хрупкость кода" )
Поэтому не критичные edge cases лучше оставлять "как есть пусть будет"
Мы этим самым признаем обьективные трудности и ограничения платформы на которой пишем,
а это в принципе неизбежно, ведь каждая платформа имеет свои стеклянные потолки об которые лучше не биться головой
Last edited by Xerox on Mon 23 Dec, 2019 23:22, edited 3 times in total.

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

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

Post by zg »

John Doe wrote:
Mon 23 Dec, 2019 16:58
Польза того же рода, что не позволяет переменной типа uint принять значение -1.
(uint)-1 — работает.
есть некоторое поведение, задокументированное и работающее. даже не падает ничего. но вы предлагаете ограничить. типа потеря данных. но потеря тут исключительно по причине того, что автор кода не читал документацию. принципиально. а если не читать документацию, то можно много чего поуничтожать. так что я не вижу практической пользы от такого ограничения. вон чуть выше человек DI_USERCONTROL'ы ресайзил, там вообще всё падало, но вы как-то даже не возмутились.

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

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

Post by citRiks »

Xerox wrote:
Mon 23 Dec, 2019 23:15
citRiks писал: ↑
Это поле данного диалога предназначено для ввода только одного знака (буквы или цифры). И удвоение его ширины в данном случае неадекватно назначению этого поля.

согласен в принципе, HO.
Я там писал что в принципе миллион "если .. то .. " в коде я считаю некоторым злом, но посмотрим
Kаждый один такой "edge case" довавляет ~10 строчек кода
Становится трудно майнтейнить (в том числе и самому) и 2.) становиться трудно понимать (в том числе и самому)
Ранее я уже сообщал конкретно по данному диалогу о том, что вполне согласен с тем, чтобы оставить его как есть. Но сообщение это было убрано модератором вкупе с допущенным мною оффтопиком и, видимо, Вы не успели его прочесть. В этом расширенном диалоге если кто и захочет ввести двузначный хоткей, то этот хоткей будет сокращён до одного первого знака самим диалогом. Т.е. ни чего критичного в любом случае не будет, и значит пусть так и останется.

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

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

Post by Xerox »

zg wrote:
Tue 24 Dec, 2019 01:26
вон чуть выше человек DI_USERCONTROL'ы ресайзил, там вообще всё падало, но вы как-то даже не возмутились.
А можно мне повозмущаться? :)
ЮзерКонтролы непредсказуему себя ведут.
попортили немало крови мне :'-(
При попытках с ними что-то сделать через ФАР АПИ (да, изменить размер например),
то если не убивают ФАР на месте, товсе равно непредсказуемо себя ведут во многом,
например дают ложную информацию о своих размерах,
и даже как-то влияют по-моему на диспозицию всего диалога
Может я чего-то не прочитал конечно,
и если честно совсем не читал как бороться с ЮзерКонтролами,
так как пока отношу проблемы с ними к "стеклянному потолку" платформы :)
Last edited by Xerox on Tue 24 Dec, 2019 08:34, edited 1 time in total.

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

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

Post by John Doe »

zg wrote:
Tue 24 Dec, 2019 01:26
(uint)-1 — работает.
Это немного не то же самое.
zg wrote:
Tue 24 Dec, 2019 01:26
есть некоторое поведение, задокументированное и работающее.
Не знал, что документировано.
А где именно?
https://api.farmanager.com/ru/dialogapi ... xedit.html
Тут не вижу.

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

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

Post by zg »

Xerox wrote:
Tue 24 Dec, 2019 08:33
ЮзерКонтролы непредсказуему себя ведут.
они ведут себя в соответствии с документацией, которую надо читать.
Xerox wrote:
Tue 24 Dec, 2019 08:33
попортили немало крови мне :'-(
сами виноваты, читайте документацию.
Xerox wrote:
Tue 24 Dec, 2019 08:33
При попытках с ними что-то сделать через ФАР АПИ (да, изменить размер например),
то если не убивают ФАР на месте, товсе равно непредсказуемо себя ведут во многом,
вы бы почитали документацию, узнали о том, что это просто экранный буфер, который плагин , а фр его отрисовывает. а если вы его увеличили, никто ж не знает этого, опа и обращение за пределы буфера. т.е. это такой контрол, изменение размеров которого не владельцем смысла не имеет вообще.
John Doe wrote:
Tue 24 Dec, 2019 12:29
А где именно?
https://api.farmanager.com/ru/dialogapi ... xedit.html
Тут не вижу.
Элемент диалога DI_FIXEDIT описывает поле ввода фиксированного размера. То же, что и DI_EDIT, но без возможности прокрутки текста.
выделенных частей достаточно, чтобы сделать вывод, что длина текста в контроле не может быть больше его ширины.

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

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

Post by John Doe »

zg wrote:
Tue 24 Dec, 2019 15:34
что длина текста в контроле не может быть больше его ширины.
Бесспорно.
И обсуждаемое потенциальное усовершенствование никак этому не противоречит.

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

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

Post by Xerox »

zg wrote:
Tue 24 Dec, 2019 15:34
изменение размеров которого не владельцем смысла не имеет вообще.
я думаю что имеет смысл, ну например ресайзить диалог.. почему нет?
в результате смелых экспериментов оказалось что ЮзерКонтрол он может сужаться,
и расширяться, но до каких-то пределов, как в ГИФе тут:
user_contol_resizing.gif
Дальше ФАР молча вылетает, и появляется Tвое Послание Человечеству ))
Hо опытным путем выяснилось что у него предел 130 символов в ширину :)
В этом случае 130, в других непонятно что будет,
но в принципе другой пример ЮзерКонтрола в ПлугМеню переносит все измения размеров почти нормально, не вылетая
(экспериментировал на еще неопубликованной версии, пока тестирую)

PS
Если что, то ЮзерКонтрол там это "text text text.."
Last edited by Xerox on Tue 24 Dec, 2019 18:03, edited 3 times in total.

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

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

Post by zg »

последний раз прошу по хорошему, читайте то, что вам пишут.
Xerox wrote:
Tue 24 Dec, 2019 16:37
я думаю что имеет смысл, ну например ресайзить диалог.. почему нет?
в результате смелых экспериментов оказалось что ЮзерКонтрол он может сужаться,
вы взяли очень частный и простой случай из одной строки. в чуть более сложных случаях и с сужением будет всё плохо.
Xerox wrote:
Tue 24 Dec, 2019 16:37
и расширяться, но до каких-то пределов, как в ГИФе тут:
user_contol_resizing.gif
Дальше ФАР молча вылетает, и появляется Tвое Послание Человечеству ))
Hо опытным путем выяснилось что у него предел 130 символов в ширину :)
я понимаю, что вы принципиально не читаете то, что вам пишут, но для других повторю: при создании контрола плагин передаёт фару буфер на символы с атрибутам нужного размера. и фар тупо отрисовывает буфер на экран. если кто-то увеличит контрол, то недостающие данные будут читаться из-за пределов буфера.

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

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

Post by zg »

zg wrote:
Tue 24 Dec, 2019 18:06
в чуть более сложных случаях и с сужением будет всё плохо.
можно окно отсюда попробовать.

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

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

Post by Xerox »

zg wrote:
Tue 24 Dec, 2019 19:55
можно окно отсюда попробовать.
по моему получилось забавно, не?
А твой скрипт крутой там
Упс. гиф не грузится, щас я..
Last edited by Xerox on Wed 25 Dec, 2019 08:07, edited 1 time in total.

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

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

Post by Xerox »

воть так воть
hexedit_script_4.gif
Хмм, не возвращается в прежнююпозицию потому что у меня изменение ширины всегда на 2, по одному символу справа и слева ..
Last edited by Xerox on Wed 25 Dec, 2019 09:05, edited 1 time in total.

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

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

Post by Xerox »

воть так воть лучше, не?
hexedit_script_5.gif
т.е. в принципе поведение адекватное, и возвращается в исходную позицию с сохранением потребительских свойств
для хексэдитора это может быть полезным видеть ороигинальный текст, сдвигая его диалог туда-сюда.
вот и практическое применение мы нашли совместными усилиями )
Last edited by Xerox on Wed 25 Dec, 2019 09:57, edited 2 times in total.

Post Reply

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