Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > PopupMenu


Автор: _pussbb 7.8.2008, 12:40
создаю динамически PopupMenu
Код

    TMenuItem *item=new TMenuItem(PopupMenu1);
 или так item=NewItem("caption",NULL, false,true,execute,0,"bb");

  /* или так
     item->Caption="jhj";
      item->Tag=0;
    
 */

все нормально работает но мне надо как то вставить функцию обормотки событий execute для того чтобы можно было использовать не один элемент  несколько с разными параметрами в зависимости от передаваемого значения в обработчик или хотя бы взять имя элемента и по его имени уже сделать то что нужно 

Автор: mrbrooks 7.8.2008, 13:39
Цитата(_pussbb @ 7.8.2008,  12:40)
но мне надо как то вставить функцию обормотки событий execute для того чтобы можно было использовать не один элемент  несколько с разными параметрами в зависимости от передаваемого значения в обработчик или хотя бы взять имя элемента и по его имени уже сделать то что нужно

поясни че написал? хоть какие нибудь запятые и точки поставил бы.

тебе что нужно - написать свои обработчики событий что ли?

Автор: _pussbb 7.8.2008, 14:35
что-то вроде того 

Автор: mrbrooks 7.8.2008, 14:56
Код

// эти переменные опиши в классе формы
const int N = 5;
TPopupMenu *pm;
TMenuItem *mi[N];

//при создании формы вставь этот код
pm = new TPopupMenu(this);
for (int i = 0; i < N; i++)
{
   mi[i] = TMenuItem(pm);
   mi[i]->Caption = "поле " + IntToStr(i);
   pm->Items->Add(mi[i]);
}
//допустим меню будет к форме
PopupMenu = pm;
mi[0]->OnClick = mi1Click; // для остальных кнопок событие будет по аналогии

//-------------------------
void __fastcall TForm::mi1Click(TObject *Sender) // описание функции вставь в класс формы.
{
ShowMessage(mi[1]->Caption);
}



Автор: _pussbb 9.8.2008, 15:54
 mrbrooks  насколько я понял по коду ты написал кучу кода заместь этой строки что я дал

NewItem("caption" // название пункта
,NULL, false,true, // всякая фигня типа родиобокс или нет, по умолчанию или нет
execute // сам обработчик нажатия на елементе

,0,
"bb" // а это название елемента к оторому потом можно обращаться 
)
это все есть в с++ 2007 help.
а мне надо чтобы несколько елементов обрабатывались в одной функцией но я знал кокой елемент был выбран. и в зависимости от скажем имени я делал свои операции. 

Автор: Stavsandro 9.8.2008, 17:21
Можно сделать так:

Код
//Здесь мы создаем новый пункт меню
TMenuItem *NewItem = new TMenuItem(PopupMenu);
NewItem->Caption = "Caption";
NewItem->Tag = 1; //А вообще подставь свое значение... по нему ты будешь различать пункты...
NewItem->OnClick = MenuTestClick;
PopupMenu->Add(NewItem);

//Функция - обработчик события OnClick для пункта меню
void __fastcall TForm1::MenuTestClick(TObject *Sender)
{
   //Получаешь указатель на пункт меню, на котором был сделан щелчок
   TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender);
   if(ClickedItem)
   {
      //Смотришь, на каком пункте щелкнули
      int Value = ClickedItem->Tag;
       //Твои действия
   }
}


Вообще, в таком духе можно запрограммировать любое событие...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)