Передо мной сейчас стоит особая задача: необходимо добиться такого поведения, чтобы при выборе пункта контекстного меню Меню не закрывалось, что облегчило бы выбор другого пункта меню при желании. В этом случае предполагаю, что для скрытия меню пользователь должен будет увести в сторону курсор мыши. Такое поведение нужно не всегда, а только в особых случаях.
Для элементов PopMenuNote и PopMenuVrsn меню должно закрываться сразу же при выборе какого-либо пункта меню, а для элемента PopMenuAltVrsn, меню не должно закрываться пока пользователь не выберет все желаемые пункты меню.
Я так полагаю, необходимо будет ввести дополнительный параметр в процедуру TRyMenu.Add(Item: TMenuItem).
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
23-07-2021 06:08
Ну и правильно, что вы испытываете трудности при создании такого длинного отмечаемого списка в меню. Те правила работы, которые заложили разработчики "меню", подсказывают программисту, что если он испытывает излишние трудности, при разработке стандартного интерфейса, то ему стоит задуматься, правильно ли он всё делает.
И здесь стоит не "бороться с интерфейсом", а задать себе вопросы конструктивного характера:
-список (AV, BYZ, ...), вообще говоря, является настроечным, для основного окна отображающего текст. С помощью него определяются те закладки, которые потом будут отображаться. Поэтому, может стоит выделить этому списку отдельную панель навигации, отдельное окно просмотра и т.д.?
-вдруг кому-то из пользователей захочется не только просмотреть такой список, но и узнать, что каждая строка обозначает.
-зачем "закапывать" навигацию по списку так глубоко в меню?
-зачем размещать в меню такой длинный список, если он выходит за границы экрана и его всё равно невозможно просмотреть весь.
В качестве примера отображения отмечаемого списка в меню. В браузере Opera версии 12, есть меню с галочками, как у вас:
Меню
Панели инструментов
v Боковые панели F4
Главная панель
v Панель закладок
Панель вкладок
v Панель состояния
v Панель адреса
Панель навигации
————————
Настройка
В нём показывается список "панелей", которые можно отмечать, а нижней строкой - "настройка". При выборе строки "настройка" вызывается модальное окно со списком тех же панелей, но которые можно отмечать, как по отдельности, так и скопом.
22-07-2021 05:42 | Комментарий к предыдущим ответам
Посмотрел, правда без звука (может там полагающая информация?)
Мне кажется, актуален ответ от Den Sarych.
Ведь можно решить показом модального окна, изображающего панель подменю, с закрытием при потере фокуса.
19-07-2021 11:08 | Комментарий к предыдущим ответам
Первая же ссылка в гугле гласит: https://stackoverflow.com/questions/7570918/c-win32-prevent-context-menu-from-closing
You cannot cancel a win32 menu dismiss. What you can do instead is create a menu-like window that has whatever behaviors you like (including no-auto-dismiss)
Тем не менее, автора данного ответа пытаются поправить, что есть всё-таки хаки, которые работают:
Please see this example: codexpert.ro/blog/tag/wh_msgfilter
На что автор резонно отвечает, что поскольку это хак, то на конкретно взятой системе это может работать, а на другой системе - может быть и нет и гарантировать работоспособность хаков вам никто не будет и не обязан (хотя именно Windows знаменит широкой поддержкой всяческих хаков из широко распространённых программ).
19-07-2021 06:18 | Вопрос к автору: запрос дополнительной информации
>>> необходимо добиться такого поведения, чтобы при выборе пункта контекстного меню Меню не закрывалось, что облегчило бы выбор другого пункта меню ...
>>>... меню не должно закрываться пока пользователь не выберет все желаемые пункты меню.
А ... зачем? В чём соcтоит цель "особой задачи"?
Обычно, для настройки нескольких параметров одновременно из меню, используют вызов простого модального окна с чекбоксами.
И этому есть несколько причин:
- изменение привычного поведения GUI - не лучшая идея;
- "меню" используется именно для выбора единственного и применяемого сразу действия;
- если требуется выбрать несколько значений параметров настройки, то практичнее установить значения в отдельном окне, а уже затем их все применить скопом, при его закрытии.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.