Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

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

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by citRiks »

ВВИДУ ОТСУТСТВИЯ ОБЩЕСТВЕННОГО ИНТЕРЕСА (нет лайков)
ОБНОВЛЯТСЯ В ДАЛьНЕЙШЕМ НЕ БУДЕТ
(текущая/экспериментальная/обновленная версия находится у меня,
но дальнейшей синхронизации скорее всего не будет
если все-же. кому чего нужно, то пишите сюда,
скорее всего отвечу, и скорее всего быстро)

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

https://github.com/dr-dba/far-lua-dialogs-control


Этот "мануал/ридми" старый и не отражает всего функционала.
вопросы, пожелания - писать, опять же, см. начало текста
Last edited by citRiks on Fri 27 Aug, 2021 11:25, edited 50 times in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

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

Post by Ann »

Latest post of the previous page:

citRiks wrote: Sat 13 Feb, 2021 14:00 юзеру посылается трейсер (профайлер), и/или усовершентвованный StackTracePlus@Xer0X:
viewtopic.php?f=15&t=9611
и далее в теме по приведённой ссылке ниже находим более свежий трейсер-профайлер:
citRiks wrote: Sun 31 May, 2020 21:27приаттаченo починенное
Во-первых, прошу обратить Ваще внимание на то, что распакованный модуль называется StackTracePlusPlus-@Xer0X.lua (со знаком минус в имени), а в самом же этом файле в инструкции по его установке в строке 28 имя вызываемого модуля указано как StackTracePlusPlus@Xer0X (т.е. без знака минус). И, соответственно, после перезагрузки макросов модуль не обнаруживается.

Во-вторых, после внесения необходимой правки в _macroinit.lua (т.е. после дополнения знака минус в имя модуля) LuaMacro белым по красному ругается при загрузке Фара, если среди макросов есть последняя по времени (вчерашняя) версия Dialog_ReXiZeR.@Xer0X.Lua (с сопутствующими ей модулями): error in error handling
Last edited by Ann on Sat 13 Feb, 2021 16:07, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

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

Post by Ann »

citRiks,

После решения проблемы с установкой StackTracePlusPlus-@Xer0X и комплект Dialog_ReXiZeR.@Xer0X версии 1.2.3 тоже стал устанавливаться и функционировать.
Ещё раз спасибо.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Ann,
Ключевая функционалность:
* Эта штука запоминает все меню, и всегда встает на последнее выбранное.
* Прислоняет и запоминает прислонение
* если есть режим прислонения, то изменение размера происходит в соответствии с ним.
Т.е., если например, вы сделали прислонение к левой границе экрана,
и стали расширять диалог, то он будет расширятся направо, не выходя за левую границу.
если диалог же просто произвольно перемещен налево,
то изменение размера будет происходить в обе стороны сохраняя центровку.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

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

Post by Ann »

citRiks wrote: Fri 19 Feb, 2021 14:35* Эта штука запоминает все меню, и всегда встаёт на последнее выбранное
Это, как я понял, речь о размерах меню/диалога. Верно?
* Прислоняет и запоминает прислонение
Нашёл в теме, что прислонение делается ключами AltPageUp/AltPageDown/AltHome/AltEnd. Да, прислонение осуществляется.
* если есть режим прислонения, то изменение размера происходит в соответствии с ним.
Т.е., если например, вы сделали прислонение к левой границе экрана,
и стали расширять диалог, то он будет расширятся направо, не выходя за левую границу
Да, это получается красиво.

Вот только после включения режима прислонения мне не удаётся выйти из него. Т.е. если я нажимаю AltHome, то диалог F6 прислоняется влево. И если я затем мышкой отвожу диалоговое окно правее от края экрана, а затем нажимаю F5, то диалог всё равно вновь липнет влево. И так до перезагрузки макросов. Возможно, нужна кнопка, выводящая из режима прислонения. М.б. типа центрирующая окно?
если же диалог просто произвольно перемещён налево,
то изменение размера будет происходить в обе стороны сохраняя центровку
Это работает, да.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Ann wrote: Fri 19 Feb, 2021 17:46 Это, как я понял, речь о размерах меню/диалога. Верно?
нет, про пункт меню. вы были в меню, что-то там выбрали, или просто закрыли его так или иначе.
в следующий раз это меню откроется на том же самом месте
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Ann wrote: Fri 19 Feb, 2021 17:46 Вот только после включения режима прислонения мне не удаётся выйти из него.
надо просто передвинуть это окно хоть на пиксель,
тогда это уже не будет считаться режимом прислонения,
логика в этом такая:
так как юзер уже сам двигает окно,
следовательно сам пусть и определяет положение на экране.
Двигается c CtrlAlt+<стрелки>
Last edited by citRiks on Fri 19 Feb, 2021 20:42, edited 2 times in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

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

Post by Ann »

citRiks wrote: Fri 19 Feb, 2021 20:42 UPDATE
v1.2.6
А в самом файле указано что это version="1.2.5";
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

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

Post by Ann »

citRiks wrote: Fri 19 Feb, 2021 20:05
Ann wrote: Fri 19 Feb, 2021 17:46 Вот только после включения режима прислонения мне не удаётся выйти из него.
надо просто передвинуть это окно хоть на пиксель
Но когда я отодвигаю окно от края мышкой, а не клавишами, то по нажатию ключа оно опять липнет к краю. И в обновлённой версии (1.2.5) тоже.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Ann wrote: Sat 20 Feb, 2021 05:17 А в самом файле указано что это version="1.2.5";
да, это не принципиальная путаница с версиями, но в гитхабе у меня действительно последняя обновленная версия
Ann wrote: Sat 20 Feb, 2021 05:18 Но когда я отодвигаю окно от края мышкой, а не клавишами, то по нажатию ключа оно опять липнет к краю. И в обновлённой версии (1.2.5) тоже.
Да, это недоделка, учитываются только клавиатуpное управление,
в будущем будет добавлена аналогичная реакция на мышиные передвижения
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by Ann »

citRiks,

При перезагрузках макросов изредка вылезает .

Уточнение: ошибка появляется не только при перезагрузках. А, например, и одновременно с вызовом какого-либо макроса. Но систему её нерегулярного появления я пока что уловить не смог.
Last edited by Ann on Thu 25 Feb, 2021 13:29, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by citRiks »

John Doe,
ссылка починена, но тема подзаброшена @Xer0X-ом, к сожалению.
до логического завершения остается следующее:
* учитывание передвигание мышью и запоминание как "custom position" (сейчас только клавой можно)
* запоминание пункта меню РАБОТАЕТ в большинстве случаев, но почему-то не всегда
* добавить запоминание фильтра меню

PS
в этом же скрипте надо реализовать авто-передвигание диалогов в место где не заслоняет курсор или выделенное в редакторе, но это уже судя по темпу делов очень далекая перспектива
Last edited by citRiks on Thu 08 Jul, 2021 08:16, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by citRiks »

citRiks wrote: Sun 11 Jul, 2021 13:06 Единственный недостаток, и по-моему тот же недостаток что и в других размерятелях,
это то что после изменения размера "untouched" (серые) текстовые элементы перестают быть "untouched"/серыми.
Так как размерятель автоматический, то и это происходит автоматически сразу по открытию диалога.
В других размерятелях автоматичности нет, поэтому такое поведение не так критично
если уж зашла речь, то прошу совету.
Ситуевина:
Есть только что открытый диалог, есть текстовые серые поля (элементы диалога), статус типа "untouched/unchanged/серый"
Надо поменять размер текстового элемента диалога не меняя статуса "unchanged"
Единственный известный мне способ это сделать - это far.SetDlgItem(...)
Но это убирает статус "unchanged" :-(
Тогда нужны еще ДВА вызова такого месаджа:
https://api.farmanager.com/ru/dialogapi ... dflag.html
первый вызов чтобы получить "статус до", и второй вызов чтобы вернуть статус обратно.
что как-то неизящно.
и еще запутывает ситуацию то что тут:
https://api.farmanager.com/ru/dialogapi ... _edit.html
.. флаг unchangedflag не описан, и на практике не виден, т.е. его нельзя получить при GetDlgItem.
А почему собсна не получен и не виден, хотя он есть?
1.) может сделать так чтобы получать UnchangedFlag при GetDlgItem, и устанавливать его вместе с остальными флагами при SetDlgItem[/c]
2.) Может добавить в АПИ что-нибудь вроде far.SetDlgItemSize(...) или message DM_SETSIZE которые не будут менять ChangedFlag?

Стандартный Дисклаймер
Всю документацию и все исходники не успел прошуршать,
могу ошибаться, где ошибаюсь - поправьте.
Спасибо за внимание
Last edited by citRiks on Sun 11 Jul, 2021 13:52, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by buniak_a_h »

1. ДО изменения размеров пробежаться по всем элементам DI_EDIT и DI_FIXEDIT и запомнить у них признак неизменённости

Code: Select all

aState[iItem] = hDlg:send(F.DM_EDITUNCHANGEDFLAG, iItem, -1)
2. После всех манипуляций восстановить его

Code: Select all

hDlg:send(F.DM_EDITUNCHANGEDFLAG, iItem, aState[iItem])
Не? Или я вопрос не понял?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Динамическое/заданное изменение размеров/ сдвиг любых диалогов, меню, списков в зависимости от размера консоли

Post by citRiks »

buniak_a_h, да, вопрос был "нельзя ли избежать таких вот лишних телодвижений?"
поэтому такой ответ "нельзя избежать" замечательно отвечает на вопрос :)
если буду дописывать, то приведенным кодом воспользуюсь :good: за это тоже спасибо
Post Reply

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