Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  17:57[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83781

19-07-2021 01:13
Вопрос относится к доработке класса TRyMenu (http://www.delphikingdom.com/asp/viewitem.asp?catalogid=511).

Передо мной сейчас стоит особая задача: необходимо добиться такого поведения, чтобы при выборе пункта контекстного меню Меню не закрывалось, что облегчило бы выбор другого пункта меню при желании. В этом случае предполагаю, что для скрытия меню пользователь должен будет увести в сторону курсор мыши. Такое поведение нужно не всегда, а только в особых случаях.

Например:


type
  TMdiChild = class(TForm)
...
    PopMenuNote: TMenuItem;
    PopMenuVrsn: TMenuItem;
    PopMenuAltVrsn: TMenuItem;...
  end;
...
  RyMenu.Add(PopMenuNote);
  RyMenu.Add(PopMenuVrsn);
  RyMenu.Add(PopMenuAltVrsn);


Для элементов PopMenuNote и PopMenuVrsn меню должно закрываться сразу же при выборе какого-либо пункта меню, а для элемента PopMenuAltVrsn, меню не должно закрываться пока пользователь не выберет все желаемые пункты меню.

Я так полагаю, необходимо будет ввести дополнительный параметр в процедуру TRyMenu.Add(Item: TMenuItem).

Прошу вашей помощи в доработке класса TRyMenu.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

23-07-2021 06:08
Ну и правильно, что вы испытываете трудности при создании такого длинного отмечаемого списка в меню. Те правила работы, которые заложили разработчики "меню",  подсказывают программисту, что если он испытывает излишние трудности, при разработке стандартного интерфейса, то ему стоит задуматься, правильно ли он всё делает.
  И здесь стоит не "бороться с интерфейсом", а задать себе вопросы конструктивного характера:
  -список (AV, BYZ, ...), вообще говоря, является настроечным, для основного окна отображающего текст. С помощью него определяются те закладки, которые потом будут отображаться. Поэтому, может стоит выделить этому списку отдельную панель навигации, отдельное окно просмотра и т.д.?
  -вдруг кому-то из пользователей захочется не только просмотреть такой список, но и узнать, что каждая строка обозначает.
  -зачем "закапывать" навигацию по списку так глубоко в меню? 
  -зачем размещать в меню такой длинный список, если он выходит за границы экрана и его всё равно невозможно просмотреть весь.
 
  В качестве примера отображения отмечаемого списка в меню. В браузере Opera версии 12, есть меню с галочками, как у вас:

Меню
    Панели инструментов
        v Боковые панели  F4
          Главная панель
        v Панель закладок
          Панель вкладок
        v Панель состояния
        v Панель адреса
          Панель навигации
          ————————
          Настройка


  В нём показывается список "панелей", которые можно отмечать, а нижней строкой - "настройка". При выборе строки "настройка" вызывается модальное окно со списком тех же панелей, но которые можно отмечать, как по отдельности, так и скопом.

22-07-2021 05:42 | Комментарий к предыдущим ответам
Посмотрел, правда без звука (может там полагающая информация?)
Мне кажется, актуален ответ от  Den Sarych.
Ведь можно решить показом модального окна, изображающего панель подменю, с закрытием при потере фокуса.

22-07-2021 04:40
>>>А ... зачем? В чём соcтоит цель "особой задачи"?

См. видеоролик в качестве ответа:
https://drive.google.com/file/d/1jggRjO4SbIKWETIXpXl6nPGF1yNKnEgd/view?usp=sharing

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 - не лучшая идея;
  - "меню" используется именно для выбора единственного и применяемого сразу действия;
  - если требуется выбрать несколько значений параметров настройки, то практичнее установить значения в отдельном окне, а уже затем их все применить скопом, при его закрытии.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Два кольца, два конца, посередине гвоздик.
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования