Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2012, 00:10   #1
Комиссар Катани
Пользователь
 
Регистрация: 29.12.2012
Сообщений: 21
Вопрос Скрытие фокуса у MenuItem

Здравствуйте!

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

Задача
Решил сделать альтернативу главному меню MainMenu. Для этого на форме расположил панель кнопок ToolBar. Кнопки создаются динамически. Для каждой кнопки динамически создаётся котекстное меню PopupMenu и сопоставляется через свойство DropdownMenu каждой кнопки.

Проблема
При нажатии на кнопку появляется меню, первый элемент которого выделен, хотя в момент появления меню курсор мыши расположен над кнопкой, находящейся в нажатом состоянии (картинка прилагается).

Т.е. как я понимаю, для решения этой проблемы необходимо как-то отбирать фокус у котекстного меню?
Изображения
Тип файла: png dropdownmenu.png (3.5 Кб, 58 просмотров)
Комиссар Катани вне форума Ответить с цитированием
Старый 30.12.2012, 00:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предположу, что нужно использовать функции HiliteMenuItem() или SetMenuDefaultItem() из WIN API.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2012, 13:05   #3
Комиссар Катани
Пользователь
 
Регистрация: 29.12.2012
Сообщений: 21
По умолчанию

Спасибо за подсказку! Но, похоже, этот трюк не работает.

Код:
procedure TForm1.OnToolMenuPopup(Sender: TObject);
var
  k : Boolean;
begin
  k:=HiliteMenuItem(Handle,(Sender as TPopupMenu).Handle,0,MF_BYPOSITION+MF_UNHILITE);
  Form1.Caption:=BoolToStr(k,True);
end;
Для отладки результат постоянно возвращает True, однако выделение (highlighting) с первого элемента меню не исчезает.

Пишу на Delphi 6.0 под Windows 7.
Комиссар Катани вне форума Ответить с цитированием
Старый 30.12.2012, 13:24   #4
Комиссар Катани
Пользователь
 
Регистрация: 29.12.2012
Сообщений: 21
По умолчанию

Такой код тоже не снимает выделение:

Код:
procedure TForm1.OnToolMenuPopup(Sender: TObject);
var
  k : Boolean;
  ItemInfo: TMenuItemInfo;
begin
  GetMenuItemInfo((Sender as TPopupMenu).Handle, 0, True, ItemInfo);
  ItemInfo.fState:=ItemInfo.fState or MFS_UNHILITE;
  SetMenuItemInfo((Sender as TPopupMenu).Handle, 0, True, ItemInfo);
  //k:=HiliteMenuItem(PopupList.Window,(Sender as TPopupMenu).Handle,0,MF_BYPOSITION+MF_UNHILITE);
  //Form1.Caption:=BoolToStr(k,True);
end;
Комиссар Катани вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi-7. Кого указывать владельцем MenuItem-а? pro5 Общие вопросы Delphi 4 20.12.2012 09:45
Потеря фокуса Naive JavaScript, Ajax 1 16.11.2010 05:53
смена фокуса Alt Общие вопросы Delphi 2 13.10.2010 11:08
Отключить событие OnClick у MenuItem с SubMenu Juni Компоненты Delphi 0 17.05.2009 12:17
Помогите найти компонент MenuItem muravey Помощь студентам 8 02.11.2007 17:06