TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Выложу вечерком плагин для Autorun.wdx, позволяющий скрывать строку меню и пользоваться меню, не включая.
Т.е. по Alt вызов выполняться будет? Это по логике так и должно быть, как и в случае с вызовом SysMenu(Alt+Space), DirMenu(Ctrl+D), HistoryMenu(Alt+Down), CommandLine(Shift+Left/Right) и т.п.
MVV писал(а):тогда те, кто субклассил окно после тебя, останутся без сообщений.
Приведи, пож., примеры, в каких случаях это может происходить, чтобы знать наперёд, что это не баг какого-то приложения, а особенность работы этого плагина.

Тут вот что заметил. С включённым TwinKey убор/появление панелей происходят медленно и с быстрым морганием, с отключённых как и описывал ранее.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

На что забиндишь команду в ТК, на то и будет - например, стандартная клавиша - F10. По Alt не будет - это системная клавиша.

Чтобы приводить примеры, надо иметь несколько плагинов, которые субклассят главное окно ТК. Первый запоминает адрес оригинальной оконной функции и подменяет его своим, второй запоминает адрес предыдущего и заменяет своим и т.п. При получении сообщения каждый обрабатывает его и вызывает ту функцию, которую заменял своей. А при выгрузке восстанавливает предыдущую. Но если первый плагин выгрузится первым, он восстановит оригинальную процедуру, и процедуры остальных просто не будут вызываться. Но хуже ситуация, когда второй выгрузится после первого - он восстановит адрес процедуры, которой уже нет. Конечно, если оба плагина живут до закрытия ТК и выгружаются в обратном порядке, ничего страшного не случится.

А о поведении TWinKey лучше спрашивать не у меня.
Victor_Dobrov
Сообщения: 50
Зарегистрирован: Вт июл 15, 2008 19:21

Сообщение Victor_Dobrov »

MVV - спасибо за TCFS2, утилита замечательная!

А можно сделать разный размер кнопок панели инструментов на полном/обычном экране?
т.е. добавить команду, которая бы писала в секцию %COMMANDER_INI% ключ/значение.

например, если кнопки 32 пикселя (условие tcini(Buttonbar, Buttonheight, 37), то пусть выполняется что-то вида tciniWrite(Buttonbar, Buttonheight, 25)...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):На что забиндишь команду в ТК, на то и будет - например, стандартная клавиша - F10. По Alt не будет - это системная клавиша.
Alt+Space тоже системная и при выключенной строке заголовка работает. F9/F10 есть, но они в списке тех гор. клавиш, для которых ТС-шных команд не предусмотрено, поэтому биндить нечего.
MVV писал(а):Чтобы приводить примеры, надо иметь несколько плагинов, которые субклассят главное окно ТК.
Имеешь? Я то почём знаю какие субклассят, а какие нет. Тогда так вопрос поставлю: а возможно ли предположить в какого рода плагинах это может быть предусмотрено? И что там насчёт внешних приложений, или речь может идти только о ТС-шных окнах?
MVV писал(а):А о поведении TWinKey лучше спрашивать не у меня.
А где ты там знак вопроса увидел? Я только указал на визуальные тормоза при обработке ключей и обновлении с помощью TSFS2 вкупе с Твинкей. А где это решать - уже другой вопрос.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Тебе никто не запрещает биндить на F9-F10 что угодно) а Alt+Space открывает системное меню, которое никто не запрещает - а главное мы должны удалить, чтобы оно исчезло - поэтому Alt и не работает... Но тебе повезло, есть легкий способ отображать всплывающее меню на Alt, перехватывая всего 2 сообщения (моя процедура вызывается до процедуры ТК, поэтому я легко могу терять сообщения до того как они дойдут до ТК :)).

Субклассить из внешнего процесса нельзя, так как при субклассинге указывается адрес функции в адресном пространстве процесса.

А при чем тут знак вопроса? Ты написал, что есть проблема, я сказал, что с ней не ко мне. :)
Последний раз редактировалось MVV Сб июн 19, 2010 22:00, всего редактировалось 2 раза.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Тебе никто не запрещает биндить на F9-F10 что угодно)
Причём тут это? :shock:
MVV писал(а):а Alt+Space открывает системное меню, которое никто не запрещает - а главное мы должны удалить, чтобы оно исчезло - поэтому Alt и не работает... Но тебе повезло, есть легкий способ отображать всплывающее меню на Alt, перехватывая всего 2 сообщения (моя процедура вызывается до процедуры ТК, поэтому я легко могу терять сообщения до того как они дойдут до ТК Smile).
И какие же эти два сообщения? :)
MVV писал(а):Субклассить из внешнего процесса нельзя, так как при субклассинге указывается адрес функции в адресном пространстве процесса.
С этим понятно, по плагинам ответь, пож.
MVV писал(а):А при чем тут знак вопроса?
Ну тогда отвечу так на предыдущую реплику: а я и не собираюсь спрашивать об этом тебя, я только вставил ремарку. :)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Итак, управляющий главным меню модуль для Autorun.wdx:

Autorun_HideMenu 1.1.5

Позволяет управлять главным меню окна ТК:
+ скрывать/отображать строку главного меню
+ отображать главное меню программы в виде всплывающего по клавише Alt или команде пользователя

Добавил защиту от выгрузки модуля - так что теперь с сабклассингом проблем быть не должно.



(сохраненный оригинальный текст)
Flasher писал(а):С этим понятно, по плагинам ответь, пож.
Имеешь в виду, какие сабклассят, а какие - нет? Могут сабклассить те, которым нужно обрабатывать сообщения окна ТК, а конкретных примеров назвать не могу.
Flasher писал(а):
MVV писал(а):Но тебе повезло, есть легкий способ отображать всплывающее меню на Alt, перехватывая всего 2 сообщения (моя процедура вызывается до процедуры ТК, поэтому я легко могу терять сообщения до того как они дойдут до ТК Smile).
И какие же эти два сообщения? :)
Первое сообщение - WM_SYSCOMMAND с параметром SC_KEYMENU, которое винда посылает окну при нажатии Alt, а второе посылается при отображении всплывающего меню, и его нужно удалять, а то ТК зачем-то вставляет его себе как главное - сообщение WM_INITPOPUPMENU. Но тебе об этом заботиться не нужно - HideMenu делает это за тебя (да и не удастся это сделать извне в любом случае).
Последний раз редактировалось MVV Вс июн 20, 2010 14:44, всего редактировалось 2 раза.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Отлично, супер! Изображение В нашем случае отдельный одноимённый инишник не нужен, если его задача состоит только в переопределении команд.
Почему всплывающее меню сделал вертикальным типа контекстного? Как-то неудобно, когда меню выскакивает у курсора мыши. Сверху той же строчкой было бы как-то удачней и по фокусировке и по восприятию, если ещё и учесть наличие односимвольных заглавий. Кстати вот что на ум пришло: появление главного (горизонтального) меню при подводе курсора к верхнему краю окна. Или опять скажешь "геморрой с сидящем в трее сканером позиции курсора"?Изображение
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

В винде есть два типа меню - главные и всплывающие. Главные можно только устанавливать для окон, а всплывающие - отображать в любом месте (к слову, подменю главного меню - всплывающие).

Я не считаю, что длинное меню удобнее, к тому же, сомневаюсь, что всплывающее меню можно расположить в строчку. А так все пункты меню сразу "под мышкой", далеко бежать не надо - а желающие могут добавить кнопку на панель для показа менюшки. А клавишникам - и вовсе по барабану, так как все работает так же, как и в обычном меню. А показывать главное меню при нажатии Alt и потом скрывать - ИМХО, извращение (еще и отлавливать придется момент, да и окно каждый раз будет дергаться). Разве что можно извратиться и после каждого пункта разрыв столбца вставлять, но это маразм.

А с геморроем на этот раз проще, так как я перехватываю все оконные сообщения, в том числе и мышиные.


Личное сообщение, ответ на который может быть интересен и другим пользователям TCFS2.
Victor_Dobrov писал(а):Есть возможность добавить в будущие версии запись ключа в ini-файл?

я хотел бы видеть разный размер кнопок панели инструментов на полном/обычном экране.

например, если кнопки 32 пикселя (условие tcini(Buttonbar, Buttonheight, 37), то пусть выполняется что-то вида tciniWrite(Buttonbar, Buttonheight, 25)...
Я думал об этом. Но проблема в том, что TCFS2 предназначена для изменения вида "на лету", а запись в wincmd.ini таковой не является - даже если я запишу что-то туда, ТК не перечитает новую настройку, поэтому в твоем случае размер кнопки просто-напросто не изменится - ты сам можешь проверить это, записав в wincmd.ini значение вручную. А команды для установки на лету определенной настройки из конфига ТК не предоставляет.

В принципе, я заметил, что если отключить панель инструментов и включить ее опять, ТК читает размер из wincmd.ini - так что я подумаю, как добавить команду записи в INI.


В общем, внедрил. Задавать можно как абсолютное значение (без оператора), так и значение, полученное с помощью оператора, примененного к старому значению и параметру (сложение, а также побитные И, ИЛИ, исключающее ИЛИ). Добавил также для примера две команды для увеличения и уменьшения размера кнопок панели инструментов на 1 пиксель, сохраняя состояние панели (то есть, если была выключена, такой и остается).

TCFS2 1.3.5 на wincmd.ru

Также переименовал функцию is_style в style для схожести с tcini и set_tcini.

Итак, чтобы изменить размер кнопок на 20х20, если их размер 32х32, нужно создать команду:

Код: Выделить всё

bbsz32to20=tcm(2901) set_tcini(Buttonbar, Buttonheight, 25) tcm(2901), tcini(Buttonbar, Buttonheight, 37)
Но я лично не не стал уменьшать кнопки в полноэкранном режиме, а наоборот немного увеличил - места больше, можно позволить более удобный размер.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Я не считаю, что длинное меню удобнее, к тому же, сомневаюсь, что всплывающее меню можно расположить в строчку. А так все пункты меню сразу "под мышкой", далеко бежать не надо - а желающие могут добавить кнопку на панель для показа менюшки. А клавишникам - и вовсе по барабану, так как все работает так же, как и в обычном меню. А показывать главное меню при нажатии Alt и потом скрывать - ИМХО, извращение
Ну раз не считаешь, что горизонтальное удобнее, тогда убери его у себя вообще.) Под мышкой, а уж тем более по кнопке - это бред, если ты вызываешь его с клавы по Alt. Я-таки считаю, что всплывающее меню, появляющееся не понять где, если ты не следишь за курсором, это и есть извращение, это сбивает фокусировку, во-первых потому, что юзер привык видеть меню сверху и ждёт, что оно выскочит оттуда; во-вторых меню не будет иметь стабильное размещение относительно курсора, т.е. если курсор подведён ближе к правому краю или к нижнему, то и позиционироваться меню будет с обратной стороны от курсора(причину объяснять не надо), извини, это неудобно; в-третьих, я уже касался этого, односимвольные пункты смотрятся с пустой строчкой в вертикальном меню убого.
А, допустим, такой вариант: появление главного + фокус. Такое-то по логике реально? Только вот и убирать его было бы здорово после активации какого-то пункта, либо при смене фокуса на другие панели или окна.
MVV писал(а):А с геморроем на этот раз проще, так как я перехватываю все оконные сообщения, в том числе и мышиные.
Ок. Организуешь?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Ну раз не считаешь, что горизонтальное удобнее, тогда убери его у себя вообще.) Под мышкой, а уж тем более по кнопке - это бред, если ты вызываешь его с клавы по Alt. Я-таки считаю, что всплывающее меню, появляющееся не понять где, если ты не следишь за курсором, это и есть извращение, это сбивает фокусировку, во-первых потому, что юзер привык видеть меню сверху и ждёт, что оно выскочит оттуда; во-вторых меню не будет иметь стабильное размещение относительно курсора, т.е. если курсор подведён ближе к правому краю или к нижнему, то и позиционироваться меню будет с обратной стороны от курсора(причину объяснять не надо), извини, это неудобно; в-третьих, я уже касался этого, односимвольные пункты смотрятся с пустой строчкой в вертикальном меню убого.
Я считаю, что компактное меню вполне удобно, особенно если нет необходимости держать главное меню открытым - вырубил вообще и радуйся. Меню всплывающее, поэтому для него постоянное место некорректно. А куда подводить курсор - это уже личное дело каждого. А не нравятся односимвольные пункты - не делай таких) не представляю, как можно попасть по такому подменю в нормальном виде.
Flasher писал(а):А, допустим, такой вариант: появление главного + фокус. Такое-то по логике реально?
Вперед,

Код: Выделить всё

run_item(mainmenu_show) msg($112, $F100)
Релизовывать это явно я не буду. Причины - всплывающее меню является временным, и появляться должно моментально, а не после перерисовки всех элементов окна, потесненных его включением.
Flasher писал(а):
MVV писал(а):А с геморроем на этот раз проще, так как я перехватываю все оконные сообщения, в том числе и мышиные.
Ок. Организуешь?
Нет.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А не нравятся односимвольные пункты - не делай таких) не представляю, как можно попасть по такому подменю в нормальном виде.
Ты сам то видишь логику в своих словах? Где я написал, что они мне не нравятся, если ещё и учесть, что я сам их делал? :? Как попасть? А как ты попадаешь по кнопкам управления (свернуть, восстановить, закрыть) ? :? Или ты и по ним промахиваешься? :lol: А односимвольные пункты даже пообъёмней будут..
MVV писал(а):Релизовывать это явно я не буду. Причины - всплывающее меню является временным, и появляться должно моментально, а не после перерисовки всех элементов окна, потесненных его включением.
А оно в режиме выключенных элементов fs нужно и только. Т.е. перерисовки там и не будет. Так что подумай.
MVV писал(а):
Flasher писал(а):Ок. Организуешь?
Нет.
Тогда не пиши, что "проще". Какой мне интерес знать об этом, если оно не предвидится в новом релизе..
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

В цитированном тобой предложении я смысл вижу.
- Видишь вон там суслика? И я не вижу. А он есть.

Уговорил, буду пропускать мимо ушей половину твоих вопросов, раз чисто технические ответы тебе неинтересны. :D


Тебе опять повезло - все решилось без проблем, теперь по умолчанию стоит режим, когда главное меню временно включается при вызове, а потом выключается.

Autorun_HideMenu 1.1.5
Последний раз редактировалось MVV Вс июн 20, 2010 14:51, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):В цитированном тобой предложении я смысл вижу.
Т.е. даже после моих конкретных доводов, почему это предложение не вяжется с логикой? Однако..
MVV писал(а):Уговорил, буду пропускать мимо ушей половину твоих вопросов, раз чисто технические ответы тебе неинтересны.
Опять нелогичный вывод. Мне интересны технические ответы, которые либо объясняют, почему тот или иной момент сложно или невозможно реализовать, либо те вопросы, которые нуждаются в разборе синтаксиса. А получать информацию плана "это добавить в коде моей программе можно в таком-то виде, но я этим заниматься не собираюсь" думаю вообще никому не интересно.
MVV писал(а):Тебе опять повезло - все решилось без проблем
Хм. А до этого мне когда везло? :)
Аватара пользователя
alexey65536
Сообщения: 1056
Зарегистрирован: Пт янв 20, 2006 10:58
Откуда: Taganrog

Сообщение alexey65536 »

Flasher писал(а):А получать информацию плана "это добавить в коде моей программе можно в таком-то виде, но я этим заниматься не собираюсь" думаю вообще никому не интересно.
Летят Холмс и Ватсон на воздушном шаре. Налетела буря, дождь, ветер, ничего не видно, унесло неизвестно куда. Когда немного разъяснилось, внизу показался луг. На нем пастух с коровами. Сыщики спустились ниже, Холмс обратился к пастуху:
- Многоуважаемый сэр, не откажите в любезности, скажите где мы находимся?
Пастух после некоторых раздумий:
- На воздушном шаре, сэр!
Холмс:
- Ватсон, удивительная местность! Здесь программисты пасут коров!
Ватсон:
- Холмс, но как, черт возьми, вы догадались, что этот джентельмен - программист!?
Холмс:
- Элементарно, Ватсон, во-первых, он достаточно долго думал над ответом, во-вторых, его ответ был абсолютно точным, и в-третьих - абсолютно бесполезным!

:D
#199018
Ответить