Страница 8 из 130

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

Тут вот что заметил. С включённым TwinKey убор/появление панелей происходят медленно и с быстрым морганием, с отключённых как и описывал ранее.

Добавлено: Сб июн 19, 2010 15:39
MVV
На что забиндишь команду в ТК, на то и будет - например, стандартная клавиша - F10. По Alt не будет - это системная клавиша.

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

А о поведении TWinKey лучше спрашивать не у меня.

Добавлено: Сб июн 19, 2010 18:52
Victor_Dobrov
MVV - спасибо за TCFS2, утилита замечательная!

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

например, если кнопки 32 пикселя (условие tcini(Buttonbar, Buttonheight, 37), то пусть выполняется что-то вида tciniWrite(Buttonbar, Buttonheight, 25)...

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

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

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

А при чем тут знак вопроса? Ты написал, что есть проблема, я сказал, что с ней не ко мне. :)

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

Добавлено: Сб июн 19, 2010 22:00
MVV
Итак, управляющий главным меню модуль для Autorun.wdx:

Autorun_HideMenu 1.1.5

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

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



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

Добавлено: Вс июн 20, 2010 01:38
Flasher
MVV
Отлично, супер! Изображение В нашем случае отдельный одноимённый инишник не нужен, если его задача состоит только в переопределении команд.
Почему всплывающее меню сделал вертикальным типа контекстного? Как-то неудобно, когда меню выскакивает у курсора мыши. Сверху той же строчкой было бы как-то удачней и по фокусировке и по восприятию, если ещё и учесть наличие односимвольных заглавий. Кстати вот что на ум пришло: появление главного (горизонтального) меню при подводе курсора к верхнему краю окна. Или опять скажешь "геморрой с сидящем в трее сканером позиции курсора"?Изображение

Добавлено: Вс июн 20, 2010 08:28
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)
Но я лично не не стал уменьшать кнопки в полноэкранном режиме, а наоборот немного увеличил - места больше, можно позволить более удобный размер.

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

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

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

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

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

Добавлено: Вс июн 20, 2010 14:15
MVV
В цитированном тобой предложении я смысл вижу.
- Видишь вон там суслика? И я не вижу. А он есть.

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


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

Autorun_HideMenu 1.1.5

Добавлено: Вс июн 20, 2010 14:47
Flasher
MVV писал(а):В цитированном тобой предложении я смысл вижу.
Т.е. даже после моих конкретных доводов, почему это предложение не вяжется с логикой? Однако..
MVV писал(а):Уговорил, буду пропускать мимо ушей половину твоих вопросов, раз чисто технические ответы тебе неинтересны.
Опять нелогичный вывод. Мне интересны технические ответы, которые либо объясняют, почему тот или иной момент сложно или невозможно реализовать, либо те вопросы, которые нуждаются в разборе синтаксиса. А получать информацию плана "это добавить в коде моей программе можно в таком-то виде, но я этим заниматься не собираюсь" думаю вообще никому не интересно.
MVV писал(а):Тебе опять повезло - все решилось без проблем
Хм. А до этого мне когда везло? :)

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

:D