Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
1-96717
vidiv
2003-01-21 04:55
2003.01.30
Расскажите пожалуйста, что сдесь надо делать...


3-96535
lutikh
2003-01-10 22:22
2003.01.30
Кнопка НАЙТИ ДАЛЕЕ в TFindDialog


3-96556
Makhanev A.S.
2003-01-11 13:46
2003.01.30
Как добавить поле в TTable???


1-96864
Andy_
2003-01-21 11:22
2003.01.30
Возврат данных из DLL


4-97109
Роман_
2002-12-14 19:47
2003.01.30
Как правильно передать параметр в thread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский