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

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

работа с popupmenu в runtime


Страницы:   1 2

RUu ©   (2011-01-05 03:28:00) 

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

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

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


Anatoly Podgoretsky   (2011-01-09 10:31:00) [1]

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


RUu   (2011-01-09 08:22:00) [2]

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


Anatoly Podgoretsky   (2011-01-05 13:43:00) [3]

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

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


Юрий Зотов   (2011-01-05 13:36:00) [4]

> знаки &

StripHotKeys.

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


Anatoly Podgoretsky   (2011-01-05 12:07:00) [5]

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

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


Anatoly Podgoretsky   (2011-01-05 12:05:00) [6]

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

TMenuItem + F1


KilkennyCat   (2011-01-05 07:20:00) [7]

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


>  знаки &


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


RUu   (2011-01-05 07:14:00) [8]

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


KilkennyCat   (2011-01-05 07:02:00) [9]


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

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


RUu   (2011-01-05 06:49:00) [10]

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'


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

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


KilkennyCat   (2011-01-05 06:16:00) [12]


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

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


RUu   (2011-01-05 05:52:00) [13]

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


KilkennyCat   (2011-01-05 05:37:00) [14]

для создания есть еще 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:15:00) [15]

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


Германн   (2011-01-05 05:13:00) [16]


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

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


RUu   (2011-01-05 05:02:00) [17]

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


Германн   (2011-01-05 04:34:00) [18]


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

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


RUu   (2011-01-05 04:29:00) [19]

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


Германн   (2011-01-05 03:46:00) [20]

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


Страницы:   1 2

Наверх

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