Tmainmenu определение пункта по клику

  • Автор темы monsters
  • Дата начала
M

monsters

#1
В компоненте TMainMenu нужно по клику определить название или номер пункта по которому он и производился. Создавать для каждого пункта функцию не подходет так как создаются пункты динамически, и все ссылаются на одну и туже функцию.
 
D

dreamer

#2
ЕМНИП, у TMenuItem должно быть свойство Tag. Можно его определять для каждого из элементов меню, а обработчик нажатия для них навесить общий.
 
M

monsters

#3
ЕМНИП, у TMenuItem должно быть свойство Tag. Можно его определять для каждого из элементов меню, а обработчик нажатия для них навесить общий.
C++:
							i=0;
while (row = mysql_fetch_row(result))
{

TMenuItem *NewItem = new TMenuItem(MainMenu1);
zapros=row[0];
NewItem->Caption=zapros;
NewItem->OnClick=sklad;
NewItem->Tag=i;
MainMenu1->Items->Items[2]->Add(NewItem);
i++;
}
Вот например создаю я в цикле и назначаю для каждого элемента меню Tag. Все меню ссылаются на функцию sklad. Как мне узнать какой именно Tag был выбран(по какому из них кликнули)?
 
D

dreamer

#4
У любого обработчика события UI есть параметр Sender:*Object (ну или не Sender - в зависимости от того, как назовёте), который принимает значение указателя на тот контрол, который отправил сообщение. Т.е. теоретически (я с C++ Builder никогда не работал) нужно привести тип Object к TMenuItem и забрать Tag. Т.е. это будет выглядеть так:
C++:
((*TMenuItem)Sender)->Tag
 
M

monsters

#5
Звучит обнадеживающе, но я ничего не понял. Можете привести пример? Хотябы на делфи, с ним мне приходилось работать раньше.
 
M

monsters

#7
Все, разобрался!
C++:
(TMenuItem*)Sender)->Tag
Тоесть знак звездочки в другую строну от TMenuItem нужно было поставить )
Но мне не сколько даже индекс нужен был, сколько имя кнопочки поэтому сделал так
C++:
(TMenuItem*)Sender)->Caption
dreamer
Большое спасиба! В начале не очень понял =)