Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

Помогите с 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-96943
cc43294
2003-01-11 15:27
2003.01.30
Не в тему


6-96936
NewGuest
2002-12-06 19:33
2003.01.30
Мастера, раз в D7 не установлены компаненты типа TclientSocket,то


1-96696
Jurij_ch
2003-01-22 00:54
2003.01.30
Стёрт *.pas файл, однако остались *.dfm, *.dfn и *.dcu


8-96894
Sergey V. Shadrin
2002-10-10 12:39
2003.01.30
MDIform & Image


6-96909
Nord-Ost
2002-12-04 10:35
2003.01.30
Снова про сокеты... :-(