Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определить пункт меню

520
10 апреля 2007 года
inkognitum
155 / / 03.05.2006
Добрый день!
Работаю с динамическим созданием компонентов.
такой вопрос.

я создаю допустим 10 кнопок (динамически)
при наведении на каждую кнопку требуется сформировать для каждой кнопки свой список выпадающего меню который доже формируется динамически.
ни количество кнопок ни количество выпадающих пунктов меню заранее я не знаю.

вопрос:
Как мне привязать за каждой кнопкой событие MousMove и OnClick и там уже узнать координаты кнопки после чего выводить пункты меню.
и как определить в пунктах меню при нажатии какой у пункта меню айдишник.

Получается выбираем кнопку N -> формируем пункты меню -> выбираем пункт M.

Заранее спасибо!
309
11 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Как мне привязать за каждой кнопкой событие MousMove и OnClick и там уже узнать координаты кнопки после чего выводить пункты меню.


Через параметр Sender - указатель на объект, выдавший событие. В цикле или через блок if () {} else if () {} else {} проверяется совпадение адреса Sender с адресами рабочих компонентов.

А лучше создавать объекты типа TPopUpMenu одновременно с кнопками. Тогда можно будет связывать меню с кнопкой через свойство PopupMenu.

520
11 апреля 2007 года
inkognitum
155 / / 03.05.2006
Цитата: el scorpio
Через параметр Sender - указатель на объект, выдавший событие. В цикле или через блок if () {} else if () {} else {} проверяется совпадение адреса Sender с адресами рабочих компонентов.

А лучше создавать объекты типа TPopUpMenu одновременно с кнопками. Тогда можно будет связывать меню с кнопкой через свойство PopupMenu.




Я так и собирался делать! Только не могу понять как определить на какой пункт меню пользователь нажал или отследить его порядковый номер в списке меню!
Меню то будет динамический!

309
11 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Только не могу понять как определить на какой пункт меню пользователь нажал или отследить его порядковый номер в списке меню!


Опять же, назначаем обработчик событию OnClick для всех элементов меню при создании. В обработчике используем параметр Sender.
Определить номер элемента в меню чуть-чуть сложнее:

 
Код:
void __fastcall TForm1::MenuItemClick (TObject *Sender)
{
// Проверяем реальный тип объекта Sender
   if (dynamic_cast <TMenuItem*> (Sender)) (если Sender - это TMenuItem)
   {
      TMenuItem *Item = (TMenuItem*) Sender; // Приводим
      int i = Item->MenuIndex; // получаем номер элемента в меню
// Далее используем этот номер для условий............
   }
}
520
11 апреля 2007 года
inkognitum
155 / / 03.05.2006
Цитата: el scorpio
Опять же, назначаем обработчик событию OnClick для всех элементов меню при создании. В обработчике используем параметр Sender.
Определить номер элемента в меню чуть-чуть сложнее:

 
Код:
void __fastcall TForm1::MenuItemClick (TObject *Sender)
{
// Проверяем реальный тип объекта Sender
   if (dynamic_cast <TMenuItem*> (Sender)) (если Sender - это TMenuItem)
   {
      TMenuItem *Item = (TMenuItem*) Sender; // Приводим
      int i = Item->MenuIndex; // получаем номер элемента в меню
// Далее используем этот номер для условий............
   }
}




Большое спасибо!
А как мне назначить обработчик событию OnClick для всех элементов меню при создании?
Это был один из первых вопросов! :)

246
11 апреля 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: inkognitum
Большое спасибо!
А как мне назначить обработчик событию OnClick для всех элементов меню при создании?
Это был один из первых вопросов! :)


http://forum.codenet.ru/showthread.php?t=26390
Вопрос № 2

10K
11 апреля 2007 года
Archy_74
51 / / 13.12.2006
в билдере неплохой хелпник.


Код:
This example demonstrates how to add and delete menu items to a popup menu at runtime and assign an event handler to the OnClick event.

void __fastcall TForm1::AddButtonClick(TObject *Sender)
{
    const int num_items = 4;
    for (int index = 0; index < num_items; ++index)
    {
        TMenuItem *NewItem = new TMenuItem(PopupMenu1); // create the new item
        PopupMenu1->Items->Add(NewItem);// add it to the Popupmenu
        NewItem->Caption = "Menu Item " + IntToStr(index);
        NewItem->Tag = index;
        NewItem->OnClick = PopupMenuItemsClick;// assign it an event handler

    }
}

void __fastcall TForm1::PopupMenuItemsClick(TObject *Sender)
{
    TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender);
    if (ClickedItem)
    {
        switch (ClickedItem->Tag)
        {
            case 0:
            {
                ShowMessage("first item clicked");
                break;
            }
            case 1:
            {
                ShowMessage("second item clicked");

                break;
            }
            // etc...
        }
    }
}

To edit or destroy an item, grab its pointer via the TMenuItem::Items property.

void __fastcall TForm1::EditButtonClick(TObject *Sender)
{
    const int index = 1;
    TMenuItem *ItemToEdit = PopupMenu->Items->Items[index];
    ItemToEdit->Caption = "Changed Caption";
}

void __fastcall TForm1::DestroyButtonClick(TObject *Sender)
{
    const int index = 2;
    TMenuItem *ItemToDelete = PopupMenu->Items->Items[index];
    delete ItemToDelete;
}
520
11 апреля 2007 года
inkognitum
155 / / 03.05.2006
Всем большое спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог