Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Как программно добавить новый пункт меню в PopupMenu?   Найти похожие ветки 

 
azl ©   (2007-09-19 18:22) [0]

Здравствуйте, уважаемые мастера.
Помогите, пожалуйста, разобраться в следующем:
Есть у меня 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 18:31) [1]

В справке по TMenu очень подробные примеры


 
oldman ©   (2007-09-19 18:42) [2]


> Но это только добавляется пункт меню. А как сделать, чтобы
> при нажатии на этот пункт происходило какое-то событие?


Надо добавить событие...


 
azl ©   (2007-09-19 18:47) [3]


> Германн ©

Что-то ничего в справке Delphi 2006 я не нашел с примерами.


> oldman ©

А пример можно?


 
oldman ©   (2007-09-19 18:50) [4]


> azl ©   (19.09.07 18:47) [3]
> > oldman ©
> А пример можно?


Компонет.Событие:=НужнаяФункция...
Что, хелп отменили специальным постановлением совнаркома?


 
azl ©   (2007-09-19 19:04) [5]


> oldman ©

Спасибо, что хоть не матом. Было бы все так просто в хелпе найти, я бы не спрашивал.


 
Джо ©   (2007-09-19 19:35) [6]

> А как сделать, чтобы при нажатии на этот пункт происходило
> какое-то событие?

Создаем обработчик события (метод, описанный в типе события, т.е., с нужными параметрами, типом вызова, возвращаемым результатом). Так как это метод, то это должна быть процедура/функция некоего класса. Для простоты пусть он будет членом класса формы:

 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;


 
Инс ©   (2007-09-19 20:03) [7]

Удалено модератором
Примечание: Предлагаю не флудить.


 
Virgo_Style ©   (2007-09-19 20:24) [8]

Удалено модератором
Примечание: Флуд


 
имя   (2007-09-19 20:59) [9]

Удалено модератором


 
имя   (2007-09-19 22:24) [10]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
15-1189601790
Vrangel
2007-09-12 16:56
2007.10.14
про два DCHP в сети


15-1189725749
delphiForever
2007-09-14 03:22
2007.10.14
и все таки я ее нашел...


15-1190028979
Nucer
2007-09-17 15:36
2007.10.14
Построение RAID-0 массива


15-1174917080
bva
2007-03-26 17:51
2007.10.14
Где купить лицензионную Delphi5,6,7


2-1190047625
Johnnnn
2007-09-17 20:47
2007.10.14
TidPop3