Обработка события Click для динамически созданного элемента

  • Автор темы Real-Mulik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Real-Mulik

#1
Вобщем есть MainMenu. Сканирую папку ищу библиотеки, подключаю и добавляю название подключенной библиотеки в меню... все тип-топ, пока не надо задавать обработку событий OnClick. У меня одна и таже процедура будет обрабатывать все пункты меню.. как им динамически указать что мол при OnClick выполнять процедуру Start. Добавление нового жлемента к меню осуществ. след. образом:

Код:
Var Item : TMenuItem;
...
Item := TMenuItem.Create(self);
Item.Caption := ver.name;
Item.Visible := true;
N19.Add(item);
 
Z

zubr

#2
Код:
procedure TForm1.Start(Sender: TObject);
begin
//...........
end;

Item.OnClick:=Start;
 
R

Real-Mulik

#4
Все работает, но появлилась след проблема: Дело в том что у меня создает динамически новые пункты меню. Каждый пункт обрабатывается практически одинаково. В зависимочти от того на какой пункт была нажата клавиша, должна загружаться отдельная библиотека. Как мне узнать на какой именно пункт было нажато пользователем? Помогите - оч нужно!
 
Z

zubr

#5
Что то типа этого:
Код:
procedure TForm1.Start(Sender: TObject);
begin
If TMenuItem(Sender)=Item.Items[0] then
//......
else
If TMenuItem(Sender)=Item.Items[1] then
//............... и т. д.
end;
 
R

Real-Mulik

#6
Почти верно.. правда немного под другой редакцией. Работает так:

Код:
TMenuItem(Sender).caption = 'fffdf'; //- или другие свойства, которые нужны...
Спасибо!
 
S

Sensei

#7
Все работает, но появлилась след проблема: Дело в том что у меня создает динамически новые пункты меню. Каждый пункт обрабатывается практически одинаково. В зависимочти от того на какой пункт была нажата клавиша, должна загружаться отдельная библиотека. Как мне узнать на какой именно пункт было нажато пользователем? Помогите - оч нужно!
Zubr прав.
Лично я в таких ситуация проставляю Динамически созданным объектам "Таги" свойство TAG..

например обработка таким способом
Код:
procedure TForm1.Start(Sender: TObject)
begin
TMenuItem *mi = (TMenuItem)Sender;
switch mi->Tag {
case 0: /*Do something*/ break;
case 1: /*Do something*/ break;
//..........
case 99: /*Do something*/ break;
}
end;
// ---- Зы звиняйте, с++ код лезет в голову :) , тут простой Case на делпхях надо реализовать
 
Статус
Закрыто для дальнейших ответов.