Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.03;
Скачать: 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 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1292794192
Юрий
2010-12-20 00:29
2011.04.03
С днем рождения ! 20 декабря 2010 понедельник


2-1294391122
Pcrepair
2011-01-07 12:05
2011.04.03
Сохранение ранее введенных значений в TEdit


15-1292884948
Германн
2010-12-21 01:42
2011.04.03
Датчик присутствия человека


1-1251675285
Ruzzz
2009-08-31 03:34
2011.04.03
Нужно ли явно освобождать строки и дин.массивы в структуре?


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