Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с 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
...


Наверх

Титульная страница Поиск, карта сайта Написать письмо