Форум: "Начинающим";
Текущий архив: 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