Вниз
Скачать: CL | DM;

работа с popupmenu в runtime   Найти похожие ветки 

← →
RUu   (2011-01-05 03:28) [0]

Пытаюсь заполнить popupmenu:

var menuItem:TMenuItem;
menuItem:=TMenuItem.Create(PopupMenu1);
menuItem.Caption:="string";
PopupMenu1.Items.Add(menuItem);
menuitem.free;

Получаю ошибку: undeclared identifier: TMenuItem
Я забыл какой-то модуль подключить?


← →
Германн ©   (2011-01-05 03:44) [1]


> Я забыл какой-то модуль подключить?

Menus "епстепственно".


← →
Германн ©   (2011-01-05 03:46) [2]

Только не говори, что у тебя нет Хелпа. Засмеют и запретят/удалят. :)


← →
RUu   (2011-01-05 04:29) [3]

А как назначить обработчик добавленному пункту?


← →
Германн ©   (2011-01-05 04:34) [4]


> RUu   (05.01.11 04:29) [3]
>
> А как назначить обработчик добавленному пункту?
>

А как обычно.
menuItem.OnClick:=TMainForm.miOnClick;


← →
RUu   (2011-01-05 05:02) [5]

Так ведь надо чтобы этот обработчик знал какой именно пункт был нажат, для этого надо передать например номер пункта в параметре, а не получается из-за несоответствия типов TNotifyEvent и простой процедуры.
Здесь-то я в miOnClic как узнаю что было нажато?


← →
Германн ©   (2011-01-05 05:13) [6]


> RUu   (05.01.11 05:02) [5]
>
> Так ведь надо чтобы этот обработчик знал какой именно пункт
> был нажат

Брр.
Так ты "присвой" этот обработчик "этому" пункту меню. И никаких проблем.
А "если" - то это уже второй вопрос. :)


← →
RUu   (2011-01-05 05:15) [7]

Количество пунктов в программе переменное. Под каждый обработчик не напишешь. Это должна быть именно процедура с параметром


← →
KilkennyCat ©   (2011-01-05 05:37) [8]

для создания есть еще NewItem, NewLine


> Это должна быть именно процедура с параметром

и что, лень посмотреть, как это делается обычно? всего-то делов: кинуть попап на форму, дважды кликнуть, вбить какойнить капшион, нажать ентер и снова дважды кликнуть по получившемуся итему... и тогда -
procedure TMain.N221Click(Sender: TObject);

причем, можно еще заполнить свойство tag, и тогда обработчик будет выглядеть на все случаи (да и не только меню):

procedure TMain.GlobalClick(Sender: TObject);
begin
  case (Sender as TComponent).Tag of
      1 :
      2 :
      .....
   else
      ....
   end;
end;


← →
RUu   (2011-01-05 05:52) [9]

Ну я создал эту глобальную процедуру, присвоить не получается.
menuItem.OnClick:=Tform1.GlobalClick(menuItem);
Ошибка: this form of method call only allowed for class methods


← →
KilkennyCat ©   (2011-01-05 06:16) [10]


> Ну я создал эту глобальную процедуру

каким образом?


← →
RUu   (2011-01-05 06:22) [11]

Просто объявил ее на главной форме. А надо как-то по-другому?


← →
RUu   (2011-01-05 06:49) [12]

form2.menuItem:=TMenuItem.Create(form1.PopupMenu1);
form2.menuItem.Caption:=s1;
form2.menuItem.OnClick:=form1.menuclick(form2.menuItem);
form1.PopupMenu1.Items.Add(form2.menuItem);
form2.menuitem.free;

А сейчас ошибка incompatible types "TNotifyEvent" and "procedure, untyped pointer or untyped parameter"


← →
KilkennyCat ©   (2011-01-05 07:02) [13]


> Просто объявил ее на главной форме

как объявил?
ты покажи код, или клещами вытягивать? Объяснение "просто объявил" ничего не объясняет.


← →
RUu   (2011-01-05 07:14) [14]

Это я сделал. Другой вопрос: когда копирую в обрабатывающей процедуре caption вот таким способом:
s:=(sender as tmenuitem).Caption;
откуда-то знаки & берутся в строке, хотя их не было (в остальном строка правильная). От чего это?


← →
KilkennyCat ©   (2011-01-05 07:20) [15]

от того, что ты ломанулся программировать меню, а прочитать про него не хочешь. Там всего-то пара страничек текста, и никаких вопросов не было бы.. дальнейшие сложности лишь с красивым дизайном.


>  знаки &


это символ того, что следующий символ является "горячей клавишей" по Alt


← →
Anatoly Podgoretsky ©   (2011-01-05 12:05) [16]

> RUu  (05.01.2011 03:28:00)  [0]

TMenuItem + F1


← →
Anatoly Podgoretsky ©   (2011-01-05 12:07) [17]

> RUu  (05.01.2011 05:52:09)  [9]

Ох рано ты пришел в Начинающие, надо было сначала хоть что то почитать,
подготовится, а у нас подготовительного класса нет.


← →
Юрий Зотов ©   (2011-01-05 13:36) [18]

> знаки &

StripHotKeys.

Вообще, не вредно было бы посмотреть исходники модуля Menus - там есть полезные функции.


← →
Anatoly Podgoretsky ©   (2011-01-05 13:43) [19]

> Юрий Зотов  (05.01.2011 13:36:18)  [18]

Не надо использовать AutoHotkeys


← →
RUu   (2011-01-09 08:22) [20]

А как совсем отключить hotkeys в popupmenu?


← →
Anatoly Podgoretsky ©   (2011-01-09 10:31) [21]

Только если заменить своими и ничего не делать.



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

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.005 c
2-1294420329
vnutr
2011-01-07 20:12
2011.04.03
Помогите со stringgrid ом


2-1294224905
Unknown_user
2011-01-05 13:55
2011.04.03
SQL запрос


15-1292275795
Юрий
2010-12-14 00:29
2011.04.03
С днем рождения ! 14 декабря 2010 вторник


15-1292611465
PEAKTOP
2010-12-17 21:44
2011.04.03
ОлдФаги, помогите мультик найти !


1-1251461342
dmitry_12_08_73
2009-08-28 16:09
2011.04.03
Проверка видимости контекстного меню




   Наверх