| 
| 
 | Вопрос # 3 442/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!В приложении имеется главное меню, в одном из его элементов (пусть это будет MMain) необходимо во время работы программы создать несколько пунктов. Создаваемые пункты находятся в массиве MContent. Каждому пункту задаётся событие onClick.
 Проблема в том, что в данном случае выполняется одни и те же для всех пунктов действия в onClick. Как задать onClick так, чтобы в нём учитывался номер элемента в массиве?
 Приложение:Переключить в обычный режим interface type  TForm1 = class(TForm)    MainMenu: TMainMenu;    MMain: TMenuItem;    procedure FormCreate(Sender: TObject);    procedure MContentClick(Sender: TObject);  public    MContent: Array of TMenuItem;    N: Integer;  end; implementation procedure TForm1.FormCreate(Sender: TObject);var  i: Integer;begin  N := 10;  setLength(MContent, N);  for i := low(MContent) to high(MContent) do  begin    MContent[i] := TMenuItem.Create(MainMenu);    MContent[i].Caption := intToStr(i);    MContent[i].onClick := MContentClick;  end;  MMain.Add(MContent);end; procedure TForm1.MContentClick(Sender: TObject);begin end;
|  |   Вопрос задал: Mihon (статус: Посетитель)Вопрос отправлен: 24 ноября 2009, 21:17
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: VJe@n Здравствуйте, Mihon!
 Добавьте в цикле создания меню строку: MContent[i].Tag := 100+i;
 В обработчике MContentClick:
 case (sender as TMenuItem).Tag
 ... // действия соотвествующие номеру тега (выбранному пунтку меню)
 end;
 
 аналогично можно использовать Имя: MContent[i].Name := 'MN'+IntToStr(i);
 
|  | Ответ отправил: VJe@n (статус: 1-ый класс)Время отправки: 24 ноября 2009, 21:29
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо, то что требовалось! |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 24 ноября 2009, 23:33; участников в обсуждении: 2. 
|   | Roma_no_off (статус: Посетитель), 24 ноября 2009, 23:27 [#1]:Честно говоря, с таким вопросом не сталкивался, но все же предположу, что MainMenu - это класс (очевидно), он в себе содержит список объектов (возможно типа TObject), дак вот у каждого компонента, содержащего такой список, должно быть свойство Components, а метод AddItem (или что-то подобное) добавляет элемент в этот список. Отсюда несложно уяснить, что достаточно создать экземпляр класса TMenuItem в Run-Time и его событию onClick присвоить обрабочик MenuItemClick(Sender: TObject). Может все и не так, но смысл точно таков.
 |  
|   | VJe@n (статус: 1-ый класс), 24 ноября 2009, 23:33 [#2]:Roma_no_off: похоже вы неправильно прочли вопрос. 
 У меня сегодня радость!Я сегодня сделал гадость! :)
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |