• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

monsters

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

dreamer

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

monsters

ЕМНИП, у 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

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

monsters

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

dreamer



См. функцию TMessing.TargetClick
 
M

monsters

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!