Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Luni
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 11
#1

Узнать по какому итему Mainmenu произошел клик.

14.05.2012, 01:31. Просмотров 1070. Ответов 12
Метки нет (Все метки)

Доброго времени суток.
Суть в том что элементы меню могут добавляться, и поэтому необходимо узнать какой именно элемент был кликнут.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 01:31
Ответы с готовыми решениями:

Клик по MainMenu?
Программно по пункту по одному хотел.

MainMenu узнать Items конкретного пункта
Здравствуйте, как считать в переменную Items конкретного пункта меню, при этом...

CheckGroup узнать по какой строке клик
Всем доброго времени суток. Что прописать в событие onClick что бы определить...

Как в WM_COMMAND узнать, по какой из кнопок произошел клик?
Если у меня в клиентской области расположены девять дочерних окон("Button"),...

Узнать, по какому контролу был клик мышкой
На форме несколько компонентов. Как узнать, по которому был сделан очередной...

12
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
14.05.2012, 01:59 #2
Sender
0
Avazart
Эксперт С++
7699 / 5608 / 543
Регистрация: 10.12.2010
Сообщений: 25,189
Записей в блоге: 17
14.05.2012, 02:53 #3
C++
1
2
3
4
5
6
//---------------------------------------------------------------------------
void __fastcall TForm3::N11Click(TObject *Sender)
{
ShowMessage( ((TMenuItem*)Sender)->Caption );
}
//---------------------------------------------------------------------------
2
Luni
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 11
14.05.2012, 15:19  [ТС] #4
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
5
6
//---------------------------------------------------------------------------
void __fastcall TForm3::N11Click(TObject *Sender)
{
ShowMessage( ((TMenuItem*)Sender)->Caption );
}
//---------------------------------------------------------------------------
Куда ето всунуть? ибо на клик каждого элемента вставлять не катит
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
14.05.2012, 15:22 #5
Создаешь обработчик клика на любой пункт меню и вставляешь в него
C++
1
((TMenuItem*)Sender)->то что нужно
Другим пунктам меню присваиваешь этот же обработчик
1
Luni
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 11
14.05.2012, 15:28  [ТС] #6
В том то и проблема что со временем пунктов меню может стать больше, и там не будет этого кода)
Спасибо за подсказку, но придется отказаться от задумки.
0
Avazart
Эксперт С++
7699 / 5608 / 543
Регистрация: 10.12.2010
Сообщений: 25,189
Записей в блоге: 17
14.05.2012, 15:34 #7
В том то и проблема что со временем пунктов меню может стать больше, и там не будет этого кода)
Непонятно, разве код на все меню не универсальный?
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
14.05.2012, 15:36 #8
Ну и пусть себе становится больше. какая разница? в рантайме тоже можно присвоить обработчику динамически созданного пункта меню либо обработчик клика другого пункта либо просто функцию
0
nick42
Практикантроп
4238 / 2271 / 384
Регистрация: 23.09.2011
Сообщений: 4,854
14.05.2012, 15:38 #9
- это не есть проблема; СОЗДАЕШЬ один, а потом его присваиваешь каждому вновь создаваемому "пункту меню". Или никогда так не пробовал (Sender - это нарицательное имя любого объекта, от которого пришел запрос на обработку)?
0
Luni
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 11
14.05.2012, 15:41  [ТС] #10
Цитата Сообщение от Avazart Посмотреть сообщение
Непонятно, разве код на все меню не универсальный?
К примеру есть пункт меню "Выбор года", при клике на который появляется список годов соответственно, если кинуть Sender на клик "Выбор года" шоумессэдж показывает "Выбор года" и не открывает меню

Добавлено через 58 секунд
Цитата Сообщение от nick42 Посмотреть сообщение
- это не есть проблема; СОЗДАЕШЬ один, а потом его присваиваешь каждому вновь создаваемому "пункту меню". Или никогда так не пробовал (Sender - это нарицательное имя любого объекта, от которого пришел запрос на обработку)?
А можно поподробней пожалуйста как реализовать перенос кода?
0
Avazart
Эксперт С++
7699 / 5608 / 543
Регистрация: 10.12.2010
Сообщений: 25,189
Записей в блоге: 17
14.05.2012, 16:16 #11
К примеру есть пункт меню "Выбор года", при клике на который появляется список годов соответственно, если кинуть Sender на клик "Выбор года" шоумессэдж показывает "Выбор года" и не открывает меню
Так не присваивайте обработчик тому итему, в чем проблема?
0
nick42
Практикантроп
4238 / 2271 / 384
Регистрация: 23.09.2011
Сообщений: 4,854
14.05.2012, 16:30 #12
Вам нужен универсальный обработчик кликов на пунктах меню? Пишете его в общем виде (применяя Sender как здесь советовали) к самому первому пункту (допустим N1... N1Click(TObject *Sender)); создавая новые пункты меню прописываете для них:
C++
1
newPunkt[i]->OnClick = N1Click ;
Следовательно, из всех кликов по пунктам меню обращение будет происходить в эту функцию. А в ней пишете ветвления по признаку
Цитата Сообщение от Luni Посмотреть сообщение
((TMenuItem*)Sender)->Caption
1
Luni
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 11
14.05.2012, 16:33  [ТС] #13
Цитата Сообщение от nick42 Посмотреть сообщение
Вам нужен универсальный обработчик кликов на пунктах меню? Пишете его в общем виде (применяя Sender как здесь советовали) к самому первому пункту (допустим N1... N1Click(TObject *Sender)); создавая новые пункты меню прописываете для них: Код C++
1 newPunkt[i]->OnClick = N1Click ;
Спасибо огромное то что надо)
0
14.05.2012, 16:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 16:33

AdvSmoothMenu (клик по итему)
Здравствуйте,как можно отловить клик по итему в компоненте AdvSmoothMenu (Из...

Двойной клик по итему ListBox-а
Подскажите пожалуйста как мне повесить команду (ICommand) на двойной клик по...

Определение объекта, по которому произошел клик
$(document).click(function(e){ //и тут код } В обработчике необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru