Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно добавить новый пункт меню в 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 очень подробные примеры


Наверх

Титульная страница Поиск, карта сайта Написать письмо