Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
ВнизПомогите с TMenuItem !!!! Найти похожие ветки
← →
lightix (2003-01-21 15:09) [0]Создаю программно элемента класса TMenuItem с помощью функции NewItem, которая требует для обработчика события указать TNotyfyEvent.
Каким образом можно при выборе элемента меню посадить обработчик с параметрами (или процедуру может как-то можно).
В идеале это выглядит так: при выборе элемента меню я анализирую какой это был пункт меню и в зависимости от этого запускаю ту или иную процедуру.
Или может быть есть другой какой-то способ создания TMenuItem?
П О М О Г И Т Е ! ! !
← →
Игорь Шевченко (2003-01-21 15:11) [1]if Sender = MenuItem1 then
...
else if Sender = MenuItem2 then
...
else
...
← →
lightix (2003-01-21 15:18) [2]Я IF"ами не могу обойтись - у меня неизвестное число пунктов меню... я из Бд забираю наименование и команду которую нужно выполнить при его нажатии....
← →
gek (2003-01-21 15:29) [3]Сделай то же самое через Tag
NewMenItem.Tag:=Items.Count +...
> Я IF"ами не могу обойтись - у меня неизвестное число пунктов
> меню...
Тогда у тебя получается неизвестное количество обработчиков
на пункты меню, что противоречит изложенному выше
Обычно делается одна процедура и зависимости от параметра выполняет то или иное действие
← →
lightix (2003-01-21 15:30) [4]тем более if Sender = MenuItem1 - не получится - элементы меню создаются программно и поэтому доступа к ним из других процедур нет.
← →
Игорь Шевченко (2003-01-21 15:45) [5]lightix (21.01.03 15:30)
Массив из созданных тобой MenuItems и по Sender"у. Tag - индекс в массиве, к примеру.
← →
lightix (2003-01-21 15:59) [6]>Обычно делается одна процедура и зависимости от параметра
>выполняет то или иное действие
Вот мне это и надо, и процедура есть, и параметры, вот только не пойму как создать MenuItem чтобы он вызывал эту процедуру и подставлял нужные параметры........
← →
Skier (2003-01-21 16:02) [7]>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 16:14) [8]Нет, вы меня не поняли.... Сейчас попытаюсь перефразировать вопрос...
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:19) [9]А что нельзя вызвать в OnExecute your_function(A,B) ?
procedure Action1Execute(...);
begin
//...........
your_function(A,B);
//...........
end;
← →
lightix (2003-01-21 16:27) [10]Можно, запросто, но проблема в том что функция NewItem требует в качестве параметра не имя функции которую нужно вызвать при нажатии, а объект типа TNotyfyEvent, и естественно параметры передать таким образом невозможно...
← →
Паша (2003-01-21 16:32) [11]Почему не хочешь, как Skier © (21.01.03 16:02)? А в обработчике становишься на замись базы № TMenuItem(Sender).Tag, и получаешь свои переменные?
← →
lightix (2003-01-21 16:42) [12]Я же ведь не знаю сколько у меня элементов и в каком они порядке выводятся и т.п.
это все содержится в таблицах и может меняться, поэтому в лоб в программе ничего зашивать нельзя.
← →
Романов Р.В. (2003-01-21 16:45) [13]Создай потомка и добавь ему свойства А и В.
Или при создании обекта резервируй память под Record в которую записывай параметры, а указатель на нее помещай в Tag. Но в этом случае придется объкты уничтожать вручную, чтобы освободить память из под Record
← →
lightix (2003-01-21 16:48) [14]Как создать потомка TNotyfyEvent, чтобы у него были еще и параметры? Что то я запутался...
← →
Романов Р.В. (2003-01-21 16:53) [15]Я имел в виду потомка TMenuItem. Это вам ничего не будет стоить, т.к. создаете вы их только в Runtime.
← →
lightix (2003-01-21 16:58) [16]А как насчет создать переменную класса TNotifyEvent и присвоить ей имя нужной процедуры с нужными параметрами?
И передавать эту переменную при создании MenuItem ?
Только немогу найти как именно присвоить.... :(
← →
Паша (2003-01-21 17:51) [17]>Создаю программно элемента класса TMenuItem с помощью функции NewItem
Есть другой способ, пример пошлю мылом
← →
lightix (2003-01-21 17:57) [18]Спасибо! Буду очень благодарен! :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c