• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Обработка события 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);
 
Z

zubr

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

Item.OnClick:=Start;
 
R

Real-Mulik

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

zubr

Что то типа этого:
Код:
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

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

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

Спасибо!
 
S

Sensei

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!