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

Тема в разделе "Delphi - Компоненты", создана пользователем Real-Mulik, 10 май 2006.

Статус темы:
Закрыта.
  1. Real-Mulik

    Real-Mulik Гость

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

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

    zubr Гость

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

    Item.OnClick:=Start;
     
  3. Real-Mulik

    Real-Mulik Гость

    Я так и думал! Сасибо.
     
  4. Real-Mulik

    Real-Mulik Гость

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

    zubr Гость

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

    Real-Mulik Гость

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

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

    Sensei Гость

    Zubr прав.
    Лично я в таких ситуация проставляю Динамически созданным объектам "Таги" свойство TAG..

    например обработка таким способом
    Код (Text):
    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 на делпхях надо реализовать
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей