![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с TMenuItem !!!!
lightix © (2003-01-21 15:09:00)Создаю программно элемента класса TMenuItem с помощью функции NewItem, которая требует для обработчика события указать TNotyfyEvent.
Каким образом можно при выборе элемента меню посадить обработчик с параметрами (или процедуру может как-то можно).
В идеале это выглядит так: при выборе элемента меню я анализирую какой это был пункт меню и в зависимости от этого запускаю ту или иную процедуру.
Или может быть есть другой какой-то способ создания TMenuItem?
П О М О Г И Т Е ! ! !
lightix (2003-01-21 17:57:00) [1]Спасибо! Буду очень благодарен! :)
Паша (2003-01-21 17:51:00) [2]>Создаю программно элемента класса TMenuItem с помощью функции NewItem
Есть другой способ, пример пошлю мылом
lightix (2003-01-21 16:58:00) [3]А как насчет создать переменную класса TNotifyEvent и присвоить ей имя нужной процедуры с нужными параметрами?
И передавать эту переменную при создании MenuItem ?
Только немогу найти как именно присвоить.... :(
Романов Р.В. (2003-01-21 16:53:00) [4]Я имел в виду потомка TMenuItem. Это вам ничего не будет стоить, т.к. создаете вы их только в Runtime.
lightix (2003-01-21 16:48:00) [5]Как создать потомка TNotyfyEvent, чтобы у него были еще и параметры? Что то я запутался...
Романов Р.В. (2003-01-21 16:45:00) [6]Создай потомка и добавь ему свойства А и В.
Или при создании обекта резервируй память под Record в которую записывай параметры, а указатель на нее помещай в Tag. Но в этом случае придется объкты уничтожать вручную, чтобы освободить память из под Record
lightix (2003-01-21 16:42:00) [7]Я же ведь не знаю сколько у меня элементов и в каком они порядке выводятся и т.п.
это все содержится в таблицах и может меняться, поэтому в лоб в программе ничего зашивать нельзя.
Паша (2003-01-21 16:32:00) [8]Почему не хочешь, как Skier © (21.01.03 16:02)? А в обработчике становишься на замись базы № TMenuItem(Sender).Tag, и получаешь свои переменные?
lightix (2003-01-21 16:27:00) [9]Можно, запросто, но проблема в том что функция NewItem требует в качестве параметра не имя функции которую нужно вызвать при нажатии, а объект типа TNotyfyEvent, и естественно параметры передать таким образом невозможно...
Skier (2003-01-21 16:19:00) [10]А что нельзя вызвать в OnExecute your_function(A,B) ?
procedure Action1Execute(...);
begin
//...........
your_function(A,B);
//...........
end;
lightix (2003-01-21 16:14:00) [11]Нет, вы меня не поняли.... Сейчас попытаюсь перефразировать вопрос...
AnsiString A="qwerty.exe", B="user1";
TMenuItem *Menu_System =
NewItem("System",NULL,false,true,
Action1->OnExecute,0,"MenuSystem");
^^^^^^^^^^^^^^^^^^Вот это вот обработчик (можно указать любой)
Мне нужно каким-то образом передать в него параметры A и B.
Если бы можно было как-то написать перед определением MenuItem"a типа Action1->OnExecute={my_function(A,B)}
ПОМОГИТЕ, ПЛАН ГОРИТ!!!!!!
Skier (2003-01-21 16:02:00) [12]>lightix
Так не пойдёт ?
if Sender is TMenuItem then begin
case TMenuItem(Sender).Tag of
0 : begin
end; //0
//.................
N : begin
end; //N
end; //case
end; //if
lightix (2003-01-21 15:59:00) [13]>Обычно делается одна процедура и зависимости от параметра
>выполняет то или иное действие
Вот мне это и надо, и процедура есть, и параметры, вот только не пойму как создать MenuItem чтобы он вызывал эту процедуру и подставлял нужные параметры........
Игорь Шевченко (2003-01-21 15:45:00) [14]lightix (21.01.03 15:30)
Массив из созданных тобой MenuItems и по Sender"у. Tag - индекс в массиве, к примеру.
lightix (2003-01-21 15:30:00) [15]тем более if Sender = MenuItem1 - не получится - элементы меню создаются программно и поэтому доступа к ним из других процедур нет.
gek (2003-01-21 15:29:00) [16]Сделай то же самое через Tag
NewMenItem.Tag:=Items.Count +...
> Я IF"ами не могу обойтись - у меня неизвестное число пунктов
> меню...
Тогда у тебя получается неизвестное количество обработчиков
на пункты меню, что противоречит изложенному выше
Обычно делается одна процедура и зависимости от параметра выполняет то или иное действие
lightix (2003-01-21 15:18:00) [17]Я IF"ами не могу обойтись - у меня неизвестное число пунктов меню... я из Бд забираю наименование и команду которую нужно выполнить при его нажатии....
Игорь Шевченко (2003-01-21 15:11:00) [18]if Sender = MenuItem1 then
...
else if Sender = MenuItem2 then
...
else
...