Oper01 |
Отправлено: 14.09.2006, 20:19 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
Создаю пункты в PopUp Menu вот так
CODE |
TMenuItem *mi;
for (int i = 1; i <= 5; i++)
{
mi = new TMenuItem(this);
mi->Name = "pmp" + AnsiString(i);
mi->Caption = AnsiString(i);
pmt1->Items->Add(mi);
}
|
А как обрабатывать события OnClick созданных элементов.
В поиске были фрагменты кода, но заставить работать не получилось.
Подскажите как это сделать.
Отредактировано Oper01 — 14.09.2006, 20:36 |
|
Admin |
Отправлено: 14.09.2006, 20:38 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так пишите функцию обработки, аналогичную по
параметрам стандартной.
CODE |
void __fastcall TForm1::mi_Click(TObject *Sender)
{
...
}
|
например:
CODE |
//---------------------------------------------------------------------------
void __fastcall TForm1::mi_Click(TObject *Sender)
{
ShowMessage(((TMenuItem*)Sender)->Tag);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TMenuItem *mi;
for (int i = 1; i <= 5; i++)
{
mi = new TMenuItem(PopupMenu1);
mi->Name = "pmp" + AnsiString(i);
mi->Caption = AnsiString(i);
mi->OnClick = mi_Click;
mi->Tag = i;
PopupMenu1->Items->Add(mi);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->PopupMenu = PopupMenu1;
}
//---------------------------------------------------------------------------
|
соответственно а .h файле вставьте
CODE |
public: // User declarations
void __fastcall mi_Click(TObject *Sender);
|
при клике на форме появится это меню,
по нажатию пункта меню получите его номер.
|
|
Grigoriy |
Отправлено: 14.09.2006, 22:53 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Там надо, чтобы функция-обработчик события была одним из методов класса формы (так называемый атрибут __closure), иначе компилятор просто будет ругаться. Поскольку передается один неявный параметр в эту функцию-обработчик — параметр this, указывающий на owner-а экземпляра компонента, принимающего событие.
Кто-нибудь сможет мои утверждения также исправить.
Отредактировано Grigoriy — 14.09.2006, 22:54
|
|
Admin |
Отправлено: 14.09.2006, 23:33 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Не совсем понял.
Приведенный мною код работает.
|
|
Grigoriy |
Отправлено: 14.09.2006, 23:35 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Admin @ 14.09.2006, 23:33) | Не совсем понял.
Приведенный мною код работает. |
Да это я не вам сообщение пишу.
Я вообще концепцию излагаю.
|
|
Admin |
Отправлено: 14.09.2006, 23:36 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Понял.
|
|
Oper01 |
Отправлено: 17.09.2006, 13:59 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
Спасибо за такой подробный ответ и наглядный пример.
Заработало всё с первого раза и как нужно! |
|