• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Real-Mulik

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

Код:
Var Item : TMenuItem;
...
Item := TMenuItem.Create(self);
Item.Caption := ver.name;
Item.Visible := true;
N19.Add(item);
 
Код:
procedure TForm1.Start(Sender: TObject);
begin
//...........
end;

Item.OnClick:=Start;
 
Все работает, но появлилась след проблема: Дело в том что у меня создает динамически новые пункты меню. Каждый пункт обрабатывается практически одинаково. В зависимочти от того на какой пункт была нажата клавиша, должна загружаться отдельная библиотека. Как мне узнать на какой именно пункт было нажато пользователем? Помогите - оч нужно!
 
Что то типа этого:
Код:
procedure TForm1.Start(Sender: TObject);
begin
If TMenuItem(Sender)=Item.Items[0] then
//......
else
If TMenuItem(Sender)=Item.Items[1] then
//............... и т. д.
end;
 
Почти верно.. правда немного под другой редакцией. Работает так:

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

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

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 на делпхях надо реализовать
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab