Страница 1 из 2

как создать пункт в меню с галочками (чекбоксами)

Добавлено: Сб окт 08, 2011 14:25
VJet
хотелось бы создать пункт в меню, который:
а. после первого нажатия выполнял бы первый скрипт и напротив него появлялась бы галочка.
б. после второго нажатия выполнялся бы второй скрипт и галка бы пропадала.
т.е. чтобы все получилось как с "Панель инструментов: вкл/выкл" на картинке.

(список с такими пунктами будет размещен в меню "Запуск")
заранее спасибо за любой совет в нужную сторону.

http://i30.fastpic.ru/big/2011/1008/aa/ ... 589eaa.png

Добавлено: Сб окт 08, 2011 14:36
CaptainFlint
VJet
Нет. Пользовательские команды с состояниями в Тотале не реализованы, это поддерживается только для внутренних команд.

PS: Ссылку на картинку поправил.

Добавлено: Сб окт 08, 2011 14:43
ask-rus
VJet
Да. Можно нарисовать значок с галочкой и без, а скриптом менять.

Добавлено: Пн окт 10, 2011 09:38
Batya
CaptainFlint писал(а):Пользовательские команды с состояниями в Тотале не реализованы
А может уже настала пора сильно попросить Гислера это сделать?
На нашем форуме в который раз поднимается вопрос о реализации такой возможности. И каждый раз в качестве ответа предлагаются "танцы с бубном". На оффоруме идея выдвигалась?

Добавлено: Пн окт 10, 2011 09:39
Flasher
Batya
По принципу "нажал-отжал" с флагом в ini?

Добавлено: Пн окт 10, 2011 10:03
MVV
И как тотал будет узнавать, что состояние изменилось, и надо изменить иконку?

Добавлено: Пн окт 10, 2011 10:14
Flasher
Если - 0, то отжимать, если 1, то вдавливать.
Функция будет активироваться ключом в секциях usercmd.ini/wcmd_lng.ini.

Добавлено: Пн окт 10, 2011 10:17
CaptainFlint
Batya писал(а):А может уже настала пора сильно попросить Гислера это сделать?
Может, и пора, но вряд ли он в 8.0 сподобится (война с Лазарусом, судя по всему, отнимает у него все силы и время). А к 8.5 успеет забыть.

Ну и, само собой, надо сначала прикинуть, как это вообще должно работать, чтобы этим было удобно пользоваться.
MVV писал(а):И как тотал будет узнавать, что состояние изменилось, и надо изменить иконку?
Например, состояния — независимые команды, а в коде кнопки прописаны несколько команд, которые Тотал переключает циклически. Со значками только надо продумать. Например, если команды две, и у второй значок отсутствует, то для неё берётся значок первой и отрисовывается нажатым (и наоборот, для случая, когда начальным должно быть ненажатое состояние). Неясно пока, как запоминать состояния, как контролировать синхронизацию команд в меню/тулбаре/хоткеях (особенно если учесть, что последовательности команд там могут быть разными), как отображать состояния трёх и более команд… В общем, на 8.0 я бы не рассчитывал. Но идея в целом, мне кажется, интересная.

Добавлено: Пн окт 10, 2011 10:24
Flasher
CaptainFlint писал(а):Неясно пока, как запоминать состояния, как контролировать синхронизацию команд в меню/тулбаре/хоткеях (особенно если учесть, что последовательности команд там могут быть разными)
Выше написал как.
CaptainFlint писал(а):как отображать состояния трёх и более команд…
Можно обойтись и без этого извращения. Да и вряд ли у автора появится желание колупаться более чем с двумя командами. Здесь же проводится аналогия с уже существующим функционалом.
Я так вижу, что вообще одна команда нужна. Скрипт должен быть один, и он, кстати, и будет читать значение ключа, чтобы выполнить соотв. действие. Т.е. флаги и для скрипта и для команды должны располагаться в одном месте для верного срабатывания и установки маркера.

Добавлено: Пн окт 10, 2011 10:29
CaptainFlint
Flasher
Вариант с флагами интересен, но он может работать исключительно на скриптах. А мой хорош ещё тем, что позволит переключать и внутренние команды (например, создать команду переключения между пользовательким набором колонок и стандартным режимом станет плёвым делом).

Впрочем, ни на чём пока не настаиваю. Говорю же, это надо тщательно продумать. Явные флаги состояний тоже могут быть полезны, чтобы не дублировать скрипты и команды, когда они оказываются почти одинаковыми.

Добавлено: Пн окт 10, 2011 10:44
Flasher
CaptainFlint писал(а):А мой хорош ещё тем, что позволит переключать и внутренние команды (например, создать команду переключения между пользовательким набором колонок и стандартным режимом станет плёвым делом).
А команды как записывать? Через пробел? А если вн. команда поддерживает параметры?
CaptainFlint писал(а):Явные флаги состояний тоже могут быть полезны, чтобы не дублировать скрипты и команды, когда они оказываются почти одинаковыми.
В том-то и дело.

Добавлено: Пн окт 10, 2011 10:49
MVV
А если команда не отработала и переключать состояние не нужно? Тонкий это момент, без путаниц не обойдёшься.

Думаю, более полезной была бы возможность изменения значка пункта меню на лету. Например, возможность указания пути к значку в usercmd.ini. И чтобы тотал не кэшировал такой значок. Тогда скриптом можно было бы переключать значки при вызове команды.

Хм, а ведь по идее можно подменять иконки и флажки пунктов меню непосредственно перед его отображением... Правда, нужно будет точно определить, какой именно пункт меню соответствует какой команде.

Добавлено: Пн окт 10, 2011 11:04
Flasher
MVV писал(а):А если команда не отработала и переключать состояние не нужно?
Значит, это проблема того, кто написал такую кривую команду.
MVV писал(а):Например, возможность указания пути к значку в usercmd.ini. И чтобы тотал не кэшировал такой значок. Тогда скриптом можно было бы переключать значки при вызове команды.
В unercmd.ini и так можно путь к значку указывать. Ты о чём? Переписывать путь к значку скриптом? Ну, вот это точно лишнее. Да и вообще речь шла о нажатом/отжатом состоянии, значок сам по себе должен быть один.
MVV писал(а):Хм, а ведь по идее можно подменять иконки и флажки пунктов меню непосредственно перед его отображением... Правда, нужно будет точно определить, какой именно пункт меню соответствует какой команде.
Не совсем понял. Приведи пример, плз.

Добавлено: Пн окт 10, 2011 11:13
MVV
В unercmd.ini и так можно путь к значку указывать.
Точно. Тогда требуется лишь научить тотал отображать эти значки в меню.

Не вижу существенной разницы между изменением флага в INI и изменением пути к значку. В любом случае требуется правка INI.
Не совсем понял. Приведи пример, плз.
Это можно реализовать и без Гислера - через TWinKey или другой плагин, который встраивается в обработчик сообщений окна тотала. Менять значки или ставить/снимать галочки в зависимости от тех или иных параметров в каком-то конфиге, или ещё как-нибудь.
Перед отображением каждой менюшки винда посылает окну сообщение, где передаёт дескриптор менюшки, и можно внести изменения прямо перед отображением - например, поменять значок или поставить/снять галочку. Нужно лишь понять, какому пункту меню нужно что-то менять. Пока вижу только 1 вариант - по названию пункта меню.

Добавлено: Пн окт 10, 2011 11:22
Flasher
MVV писал(а):Не вижу существенной разницы между изменением флага в INI и изменением пути к значку.
Разница
а) в кол-ве символов
б) в необходимости плодить значки для команд вкл./выкл.
MVV писал(а):где передаёт дескриптор менюшки
Всё, теперь понял, о чём ты. Мы же с тобой этот вопрос как-то решали. Но для скриптов всё равно флаги нужны. Кстати, не проверял в 8-ке, баг, проявившийся в TcMenuPopup, исправлен?