C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Обработка OnClick
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



Понял. smile.gif
Oper01
Отправлено: 17.09.2006, 13:59


Станционный диспетчер

Группа: Участник
Сообщений: 145



Спасибо за такой подробный ответ и наглядный пример.
Заработало всё с первого раза и как нужно!

Вернуться в Вопросы программирования в C++Builder