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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2013, 23:34   #1
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию Подмена контекстного меню собственным окном

Здравствуйте. Можно ли как-нибудь заменить контекстное меню на свое собственное окно? Мне это нужно для изменения внешнего вида меню. Да, я пробовал перерисовывать нативные элементы меню через OnMeasureItem и OnDrawItem, но этого оказалось не достаточно. Используя этот метод перерисовки, нельзя рисовать за приделами границ элемента меню.
Следующим экспериментом было создание обычного окна и рисование элементов меню прямо на нем. Получилось так, как это было задумано, но тут возникла проблема: необходимость отслеживания различных событий, при которых форма (собственно нарисованное меню) должна закрываться.
Меня интересует, есть ли готовые решения для подобного отслеживания событий? Может есть уже реализованные методы WinAPI, для создания подобных меню? Прошу помощи.

UPD
Была еще идея с отслеживанием события потери фокуса у собственно созданного меню. Однако, меню не должно перетягивать на себя фокус с приложения, вызвавшего его. Может я не до конца разобрался с получением фокуса. Только что наткнулся на некоторое описание флага WS_EX_NOACTIVATE. Буду разбираться с ним. Хотя раньше ничего не получалось.

Последний раз редактировалось kangreon; 30.09.2013 в 23:44.
kangreon вне форума Ответить с цитированием
Старый 01.10.2013, 06:51   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Не совсем понятно где надо заменить контекстное меню. Если в контроле, например TMemo, то отключаем там штатное контекстное меню и вешаем в обработку правого щелчка мыши открытие своего окна.
igh0st вне форума Ответить с цитированием
Старый 01.10.2013, 11:20   #3
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

igh0st
Вызвать контекстное меню из любого места - не проблема, а вот отловить все события, при которых необходимо закрыть меню, уже проблема.
kangreon вне форума Ответить с цитированием
Старый 01.10.2013, 11:51   #4
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Вроде глобальным хуком можно отловить момент появления контекстного меню.
igh0st вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка контекстного меню (Java) guzel20 Помощь студентам 1 16.12.2012 19:12
Не работает локализация для контекстного меню Tolias Общие вопросы .NET 1 23.05.2012 01:51
вызов из контекстного меню Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 12.07.2011 19:03
отключить возможность вызова контекстного меню artemavd Microsoft Office Word 0 04.06.2010 17:50
Как запретить отображение контекстного меню kovalevskivf Microsoft Office Excel 2 10.05.2009 15:18