![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как программно добавить новый пункт меню в PopupMenu? [D2005, 2000, XP]
azl © (2007-09-19 18:22:00)Здравствуйте, уважаемые мастера.
Помогите, пожалуйста, разобраться в следующем:
Есть у меня RxSpeedButton1 и RxPopupMenu1. RxSpeedButton1 - DropDownMenu = RxPopupMenu1. Т.е. при нажатии на RxSpeedButton1 выпадает менюшка.
Подскажите, пожалуйста, как программно (например, OnFormActivate) добавить новый пункт меню в RxPopupMenu1 и чтобы при нажатии на вновь созданный пункт меню его Caption присваивался Caption'у RxSpeedButton1.
Я нашел некоторый код, но он не совсем работает.
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu', 0, False, True, MenuItem1Click, 0, 'MenuItem1'));
Add(NewItem('Second Menu', 0, False, True, MenuItem2Click, 0, 'MenuItem2'));
Add(NewItem('Third Menu', 0, False, True, MenuItem3Click, 0, 'MenuItem3'));
Add(NewLine); // Добавляем разделитель
Add(NewItem('Fourth Menu', 0, False, True, MenuItem4Click, 0, 'MenuItem4'));
end;
Если вместо MenuItem1Click-MenuItem4Click написать OnClick, то менюшки добавляются, иначе пишет Undeclared identifier.
Но это только добавляется пункт меню. А как сделать, чтобы при нажатии на этот пункт происходило какое-то событие?
Заранее огромное спасибо за помощь.
(2007-09-19 22:24:00) [1]Удалено модератором
(2007-09-19 20:59:00) [2]Удалено модератором
Virgo_Style (2007-09-19 20:24:00) [3]Удалено модератором
Примечание: Флуд
Инс (2007-09-19 20:03:00) [4]Удалено модератором
Примечание: Предлагаю не флудить.
Джо (2007-09-19 19:35:00) [5]> А как сделать, чтобы при нажатии на этот пункт происходило
> какое-то событие?
Создаем обработчик события (метод, описанный в типе события, т.е., с нужными параметрами, типом вызова, возвращаемым результатом). Так как это метод, то это должна быть процедура/функция некоего класса. Для простоты пусть он будет членом класса формы:
TForm3 = class(TForm)
procedure FormClick(Sender: TObject);
private
procedure OnMenuClick (Sender: TObject);
end;
Пояснение. Метод имеет такие параметры, потому, что в событиеTMenuItem.OnClickописано какproperty OnClick: TNotifyEvent, а TNotifyEvent, в свою очередь, какTNotifyEvent = procedure(Sender: TObject) of object.
Теперь свойству OnClick новосозданного экземпляра TMenuItem мы можем присвоить этот обработчик:
Add(NewItem('First Menu', 0, False, True, OnMenuClick, 0, 'MenuItem1'));
Содержимое обработчика варьируется от того, что, собственно, в нем должно происходить. Например, выводим текст пункта меню:
procedure TForm3.OnMenuClick(Sender: TObject);
begin
if Sender is TMenuItem then
ShowMessage (TMenuItem(Sender).Caption)
end;
azl (2007-09-19 19:04:00) [6]
> oldman ©
Спасибо, что хоть не матом. Было бы все так просто в хелпе найти, я бы не спрашивал.
oldman (2007-09-19 18:50:00) [7]
> azl © (19.09.07 18:47) [3]
> > oldman ©
> А пример можно?
Компонет.Событие:=НужнаяФункция...
Что, хелп отменили специальным постановлением совнаркома?
azl (2007-09-19 18:47:00) [8]
> Германн ©
Что-то ничего в справке Delphi 2006 я не нашел с примерами.
> oldman ©
А пример можно?
oldman (2007-09-19 18:42:00) [9]
> Но это только добавляется пункт меню. А как сделать, чтобы
> при нажатии на этот пункт происходило какое-то событие?
Надо добавить событие...
Германн (2007-09-19 18:31:00) [10]В справке по TMenu очень подробные примеры