Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];

Вниз

работа с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
8-1211277723
GreyWolf
2008-05-20 14:02
2011.04.03
Получить серийник soundcard


15-1293004269
Медвежонок ХМЛ
2010-12-22 10:51
2011.04.03
500 кин онлайн от мосфильма


15-1292779384
Германн
2010-12-19 20:23
2011.04.03
Анекдоты из жизни артистов МХАТ


2-1294233741
mefodiy
2011-01-05 16:22
2011.04.03
Ошибки при миграции из D7 в D2010


2-1294224895
nil
2011-01-05 13:54
2011.04.03
загрузка res-файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский