|
Вопрос # 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: похоже вы неправильно прочли вопрос.
У меня сегодня радость!
Я сегодня сделал гадость! :)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|