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

Здесь обсуждается всё, что касается макросов.
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.
LAT
Posts: 330
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 35 times

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

Post by LAT »

Latest post of the previous page:

Last edited by LAT on Wed 29 Apr, 2020 18:29, edited 1 time in total.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

LAT, skipik,
Ну вот, при XeRoX'e такого не было
и что теперь будем делать без него?
Может надо дождаться стабильного билда?
Или уже сейчас кричать "усе пропало шеф"?
Думаю что работа с УТФ8 порушена как следует.
Я больше получаю ошибку что-то вроде "ошибка диагностики в процедуре диагностики",
но .. сейчас кажется уже не повторяются ошибки, не могу даже скопипастить
Last edited by citRiks on Thu 30 Apr, 2020 04:27, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

ваш багрепорт все равно помог однако, тут вот какая штука:
раньше win.Uuid():len() возвращал то что надо - длина говорит строки 15 букав.
Ну потому что GUID, какой бы он ни был, это все таки строка.
binary data у нас в Lua нет однако, есть UserData, но это не в эту дырку суется.
А теперь win.Uuid():len() возвращает черти че, можете проверить.

И кто ответит, как с этим жить, это баг или фича теперь?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

Однако, предварительный фикс кажется что состоит в этом:

Code: Select all

function fnc_norm_guid(the_guid)
	if not the_guid	then return end
	local the_type = type(the_guid)
	if the_type == "number" or the_type == "userdata" then return end
	if	type(the_guid) == "string" and the_guid:len() == nil or
		the_guid:len() <= 16 -- can be less than 16
	then 	the_guid = win.Uuid(the_guid)
	end
	if 	the_guid == GUID_ZERO or not the_guid
	then	return
	else	return the_guid:upper()
	end
end
Но вопрос остается, сейчас "строковый механизьм" (или как это называется?)
творит по-моему фигню, конвертирует в УТФ8 по умолчанию что ли?
lua:=utf8.len(win.Uuid()) однако тоже не помогает
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2254
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 134 times
Been thanked: 241 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Thu 30 Apr, 2020 04:32 И кто ответит, как с этим жить, это баг или фича теперь?
Замените win.Uuid():len() на string.len(win.Uuid()) - и будет Вам Щястие Велиое.
Подсказка от jd в другом месте, но причина, думаю, та же, и лекарство то же.
Last edited by buniak_a_h on Thu 30 Apr, 2020 04:50, edited 1 time in total.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

прилагается пофиксенная версия имени А. Буняк
Вроде все работает так
Attachments
Dialog_ReXiZeR.v1-2-2.@Xer0X.Lua.7z
(8.37 KiB) Downloaded 23 times
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

John Doe,
Не показан практический сценарий, когда производительности DM_GETDLGITEM недостаточно
Если же реальный сценарий обнаружится - надо будет разобраться где именно узкое место.
Не исключено, что проблема только в производительности Lua.
в этом скрипте напрасно крадется 100 милисекунд у юзера и несколько мегабайтов у компа на каждом открытии истории
этот скрипт должен читать все элементы по ряду причин.
и надо облегчить это чтение, избавив от ненужных списков.

в новой (еще не опубликованной, только у меня) версии кстати @Xer0X сделал запоминание последнего выбранного элемента во всех менюхах.
вот это очень удобно я вам скажу.
в потенциале Говорит несложно приделать еще запоминание значений полей,
т.е. это будет как бы автозаполнение.
Говорит сделать то можно, но вроде как не нужно.
и еще запоминание alignment-а
правда все это (alignment) очень на будущее, так как сейчас в ФАРе нет always-on-top,
а значит потребность аранжировать окошки не очень возникает, хотя возникает все же.

в новой (еще не опубликованной, только у меня) версии кстати @Xer0X сделал запоминание последнего выбранного элемента во всех менюхах.
вот это очень удобно я вам скажу.
в потенциале, говорит, несложно приделать еще запоминание значений полей,
т.е. это будет как бы автозаполнение.
Говорит сделать то можно, но вроде как не нужно.
и еще запоминание alignment-а
правда все это (alignment) очень на будущее, так как сейчас в ФАРе нет always-on-top,
а значит потребность аранжировать окошки не очень возникает, хотя возникает все же.

А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
John Doe
Бюрократ
Posts: 12982
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 303 times

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

Post by John Doe »

citRiks wrote: Sun 10 Jan, 2021 12:09 этот скрипт должен читать все элементы по ряду причин
Вы имеете ввиду, что этому скрипту нужно знать только актуальные размеры листбокса? Он не пытается их изменить под самый широкий элемент списка?
https://t.me/FarManager — Telegram чат
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

John Doe wrote: Sun 10 Jan, 2021 14:13 Вы имеете ввиду, что этому скрипту нужно знать только актуальные размеры листбокса? Он не пытается их изменить под самый широкий элемент списка?
актуальные размеры надо знать, конечно
Под самый широкий размер элемента списка не надо адаптировать,
потому что "display size" и "capacity size" слава Богу что не одно и то же в ФАРе
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

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

Post by citRiks »

можно было бы наверное обойтисть "DM_GET(+SET)ITEMPOSITION", но засада в том что тогда не будет текста (значения) элемента, который тоже нужен (нужен например для запоминания)
можно все добывать по отдельности, наверное, но это менее неэффективно чем получить все "одиночные" (не списковые) значения сразу
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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