View previous topic :: View next topic |
Author |
Message |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Thu Aug 10, 2023 20:07 Post subject: |
|
|
Loopback
Возвращаясь к нулевым вызовам. Сегодня смог сосредоточиться и сгенерил краткий код для воспроизведения. Окружение: Win 10 x64, TC 11.00 32/64. Подопытные: два диалога cm_PackFiles и cm_SetAttrib. Запускаем 32-битный TC.
Вот так ни у одной кнопки в диалогах не будет текста "B1":
Code: | # Диалог упаковки cm_PackFiles Alt+F5
AddDialog "TDLGZIP"
AddControl "TButton" 1 "B1"
# Диалог атрибутов cm_SetAttrib
AddDialog "TATTRIBDLG"
AddControl "TButton" 1 "B1" |
А вот так будет:
Code: | # Диалог упаковки cm_PackFiles Alt+F5
AddDialog "TDLGZIP"
AddControl "TButton" 0 "B0"
AddControl "TButton" 1 "B1"
# Диалог атрибутов cm_SetAttrib
AddDialog "TATTRIBDLG"
AddControl "TButton" 0 "B0"
AddControl "TButton" 1 "B1" |
|
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1530
|
(Separately) Posted: Fri Aug 11, 2023 12:42 Post subject: |
|
|
yozhik
Да, спасибо, нашел и исправил. Не устанавливался текст для первого контрола каждого класса.
Установку значков для кнопок добавил. Поскольку можно отображать значок вместе с текстом, решил оставить такую возможность. Поэтому значок устанавливается отдельным параметром. Например:
Code: |
AddControl "TButton" 1 "" "%COMMANDER_PATH%\Totalcmd.exe,2"
|
Также пришлось добавить еще два опциональных переключателя:
/IT - позволяет отображать текст рядом со значком (по умолчанию, если задан непустой параметр с путем к значку, отображается только значок, имеющийся или задаваемый текст игнорируется).
/I:nn - размер значка (например /I:32, по умолчанию 16).
ModifyDialogs 2023-08-11 |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Fri Aug 11, 2023 18:09 Post subject: |
|
|
Loopback
Спасибо!
В светлой теме с иконками красота и порядок:
А в тёмной не назначаются:
 |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1530
|
(Separately) Posted: Fri Aug 11, 2023 22:44 Post subject: |
|
|
yozhik
Вот как всегда, то, что казалось простым, оказывается гораздо сложнее. Совершенно забыл про вселенское зло в виде тёмной темы и не проверил, иначе бы сразу выдал отрицательное заключение и даже не тратил бы время...
Похоже, в тёмной теме тотал сам управляет отрисовкой всех контролов. Метод установки значка, естественно, не работает. Вернее, он работает, но тотал его закрашивает. Попробовал сам отрисовать значок, бесполезно, при наведении на кнопку он опять закрашивается. Так что видимо увы. Делать сабклассинг или что-то такое, чтобы постоянно перерисовывать за тоталом значки - ну честно говоря перебор. И что теперь делать непонятно, оставлять половинчатое решение вроде как-то не очень. |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Fri Aug 11, 2023 23:19 Post subject: |
|
|
Loopback wrote: | половинчатое решение вроде как-то не очень |
Учитывая, что тёмную тему используют немногие, решение получается не половинчатым, а 5/6-ым (или даже больше). Надо оставлять однозначно. Просто в справке оговорить. Оговорено же в справке, что некоторые контролы в 64-битной версии могут не «слушаться», и нормально, это не воспринимается половинчатым решением. Ну, вот и здесь то же самое. Сделать дополнительное условие и прописать для тёмной темы свою организацию контролов — невелик труд (для тех, кто вообще додумается до перерисовки диалогов).
Loopback wrote: | Попробовал сам отрисовать значок, бесполезно |
Ой-ёй! Если б я знал, что так далеко зайдёт, дык и не заикался бы. Мне кажется, что это только у Гислера такой завал с тёмной темой. Вон в Everything изначально (без дополнительных усилий) всё шикарно работает и настраивается до мелочей без проблем и малейших нареканий. |
|
Back to top |
|
 |
lz57005

Joined: 05 Mar 2020 Posts: 28
|
(Separately) Posted: Fri Aug 11, 2023 23:29 Post subject: |
|
|
Loopback wrote: | yozhik
Похоже, в тёмной теме тотал сам управляет отрисовкой всех контролов. |
Всё ещё хуже, судя по всему это частично хук/детур апи функций отрисовки, Гислер как и все распробовал недокументированные winapi которыми мягкие красили старые приложения, а потом понял что можно рисовать поверх, часть контролов перехвачена, часть отрисована поверх, поэтому даркмод нужно учитывать как отдельную сущность, происходящую после отрисовки контрола, попробуйте ловить сообщения после отрисовки
Добавлено спустя 6 минут:
yozhik проблема в том что он решил её воспроизвести на 7ке, т.е. логика, майки начали даркмод в тихаря, все начали разбираться как на старое апи натянули рисовку и ключевой момент, Гислер решил рисовать сам, чтобы и на семерке и вообще переизобретя скины из Delphi, где контролы рисуются сверху стоковых |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Fri Aug 11, 2023 23:43 Post subject: |
|
|
lz57005 wrote: | даркмод нужно учитывать как отдельную сущность |
Именно так даркмод (или черноморд, или мавровид)) и воспринимается даже непосвящёнными во внутреннюю кухню. Реализация этого режима в Total Commander сама по себе кривая и половинчатая (ну взять хотя бы на скрине выше чекбоксы и радио-переключатели — это ж вырвиглаз). Поэтому ещё раз повторюсь: надо, мне кажется, в плагине оставлять иконки для кнопок и не придавать большого значения тому, что в недоделанном черноморде они не работают.
Last edited by yozhik on Sat Aug 12, 2023 00:12; edited 1 time in total |
|
Back to top |
|
 |
lz57005

Joined: 05 Mar 2020 Posts: 28
|
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Fri Aug 11, 2023 23:52 Post subject: |
|
|
Loopback
Вот, кстати, только что пришло в голову, проверил и вроде получается вовсе неплохо. При записи следующего вида:
Code: | AddControl "TButton" 1 "?" "%WCMICONS%,56" #Help |
в светлой теме отображается назначенный значок, а в тёмной назначенный текст. Вполне приемлемо.
Добавлено спустя 8 минут:
lz57005 wrote: | взял и изобрёл |
Наверное это потому, что у него x86 на Дельфи, а x64 на Лазарусе, чтоб работало и там, и сям. Получается как в скороговорке «Корабли лавировали, лавировали, да не вылавировали» . |
|
Back to top |
|
 |
lz57005

Joined: 05 Mar 2020 Posts: 28
|
(Separately) Posted: Sat Aug 12, 2023 00:07 Post subject: |
|
|
yozhik именно, мне кажется любой кодер на паскале/лазаре/дельфи охренет с кода который пишется в одно лицо уже 30 лет, пусть и с комментами |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1530
|
(Separately) Posted: Sat Aug 12, 2023 03:20 Post subject: |
|
|
Ну вроде бы что-то и получилось, хотя все-таки пришлось самостоятельно отрисовывать кнопку. Насколько это всё надежно надо тестировать.
Поскольку вариант значок+текст в данный момент весьма проблематичен, да и вообще как мне кажется, смысла в нём мало, уберу этот вариант и оставлю только значок. Тогда отдельный параметр для пути к значку будет не нужен, он будет задаваться вместо текста, а то, что его надо интерпретировать как путь к значку - переключателем /I:nn (он будет обязателен). Так оно и логичнее получится. |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Sat Aug 12, 2023 06:23 Post subject: |
|
|
Loopback wrote: | вроде бы что-то и получилось |
Выглядит более чем убедительно. Смотрю на время публикации сообщения и испытываю дополнительное благоговение.
Loopback wrote: | надо тестировать |
Мы уже готовы. Там, кажется, не так много комбинаций для проверки: помимо битности ещё только подстройка размеров под крупные шрифты. Плотность отличную от 96 dpi я только не смогу поглядеть, нет в округе доступных таких экранов, чтоб ещё и с Windows.
Loopback wrote: | значок+текст... смысла в нём мало |
Смысла в нём ещё меньше из-за того, что мы кнопки то не свои создаём, а чужие переделываем. Особо не разгуляешься. Так что совершенно нечувствительная потеря.
Loopback wrote: | переключателем /I:nn (он будет обязателен) |
Теоретически возможен был бы доп. вариант /I (без :nn) для 16px, как наиболее распространённого размера. Хотя я не знаю какие экраны сейчас более распространены, 4К или меньше. Тоталовская WCMICON2.DLL укомплектована 16, 24, 32 и 48px. Последнее, думаю, с прицелом на 4К... В общем, три символа после /I набрать совершенно не в лом. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1530
|
(Separately) Posted: Sun Aug 13, 2023 00:32 Post subject: |
|
|
ModifyDialogs 2023-08-12
Дополнительный параметр убран, теперь путь задается в том же параметре, что и текст, а что будет выводиться определяется наличием переключателя /I (также можно через двоеточие указать размер значка, по умолчанию 16). Метод вывода значка переключается в зависимости от включенной темы (берется из настроек TC, но нужно ещё проверять при значении ключа 1), цвета для отрисовки тоже читаются из конфигурации TC.
Кстати, ещё забыл выложить здесь исправленную версию Tweaks, после этого и этого багрепорта, а там вышло прилично изменений.
Tweaks 2023-06-24
- исправлена работа с переменными в командной записи
- исправлена работа с файлами UTF-16
- исправлен парсинг длинных строк в файлах *.bar
- снят лимит количества пунктов меню |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 257 Location: Электросталь
|
(Separately) Posted: Sun Aug 13, 2023 01:10 Post subject: |
|
|
Loopback wrote: | ModifyDialogs 2023-08-12 |
404 по ссылке  |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1530
|
(Separately) Posted: Sun Aug 13, 2023 01:33 Post subject: |
|
|
yozhik
Поправил... |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|