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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2007, 13:26   #1
Lucky13
 
Регистрация: 08.02.2007
Сообщений: 3
По умолчанию Как добавить подменю в системное контекстное меню

Добавил пункт в системное контекстное меню. Теперь нужно, чтобы у него было подменю. Добавить подменю не проблема, вопрос как узнать что пользователь выбрал некоторый пункт подменю, ведь InvokeCommand для подменю не вызывается?

Последний раз редактировалось Lucky13; 08.02.2007 в 13:40.
Lucky13 вне форума Ответить с цитированием
Старый 08.02.2007, 19:47   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, если про добавление пунктов все понятно, тогда обработка не должна вызывать затруднений:

implementation
{$R *.DFM}
const
SC_MyMenuItem = WM_USER + 1;

procedure TForm1.OnMyMenu;
Begin
// Здесь - обработка нажатия на новый пункт меню (подменю)
End;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
// перехват события выбора нового пункта меню (подменю)
if Msg.CmdType = SC_MyMenuItem then
OnMyMenu else
inherited;
end;
mihali4 вне форума Ответить с цитированием
Старый 09.02.2007, 09:18   #3
Lucky13
 
Регистрация: 08.02.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Ну, если про добавление пунктов все понятно, тогда обработка не должна вызывать затруднений:

implementation
{$R *.DFM}
const
SC_MyMenuItem = WM_USER + 1;

procedure TForm1.OnMyMenu;
Begin
// Здесь - обработка нажатия на новый пункт меню (подменю)
End;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
// перехват события выбора нового пункта меню (подменю)
if Msg.CmdType = SC_MyMenuItem then
OnMyMenu else
inherited;
end;
Все бы было ничего, если бы меню было на Form1 как Вы указали. Но не все так просто - меню системное, что появляется при правом клике на файле в проводнике и работать с ним можно только через интерфейс IContextMenu и его наследников.
Lucky13 вне форума Ответить с цитированием
Старый 09.02.2007, 12:27   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
если бы меню было на Form1 как Вы указали
Интересно, где это указано?
Посмотрите внимательнее - перехват осуществляется как раз обращения к системному меню вашего приложения.
А то, о чем вы говорите
Цитата:
что появляется при правом клике на файле в проводнике
к системному меню в его обычном дельфийском понимании не относится.
mihali4 вне форума Ответить с цитированием
Старый 18.03.2007, 22:20   #5
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Но не все так просто - меню системное
Уж не в реестре ли вы добавляете меню если там, то и обрататывать его надо там же(создать араметр с указанием на файл обрабатываемой программы с соотвеиствуюшим ключом)
чайник юзеру не товарищ, а сам себе враг...

Последний раз редактировалось Аlex; 19.03.2007 в 09:54.
Аlex вне форума Ответить с цитированием
Старый 19.03.2007, 20:17   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

через реестр проще всего..
rpy3uH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Встраивание в контекстное меню проводника Никки Общие вопросы Delphi 3 25.06.2008 23:17
Контекстное меню файла... Altera Общие вопросы Delphi 3 29.02.2008 16:57
подменю в MainMenu dante77 Компоненты Delphi 0 20.11.2007 19:25
Создание подменю extatic Помощь студентам 1 07.08.2007 20:51
TMainMenu и его подменю Albenous Компоненты Delphi 3 06.02.2007 07:03