1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем monsters, 27 фев 2011.

Наш партнер Genesis Hackspace
  1. monsters

    monsters Гость

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

    dreamer Гость

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

    monsters Гость

    Код (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 был выбран(по какому из них кликнули)?
     
  4. dreamer

    dreamer Гость

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

    monsters Гость

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

    dreamer Гость

  7. monsters

    monsters Гость

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

Поделиться этой страницей