Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2010, 12:47   #1
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию popupmenu динам. компоненты

У меня в компоненте popupmenu элементы создаються динамически
Код:
 NewItem:=TMenuItem.Create(self);
                  NewItem.Action:=Action1;
                  NewItem.Caption:=temp;
                  PopupMenu1.Items.Add(NewItem);
Как мне обработать какой элемент был нажат в popupmenu через процедуру Action1.
Horus92 вне форума Ответить с цитированием
Старый 16.07.2010, 13:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не знаю как через Action, но если бы ты поставил
Код:
 NewItem.OnClick:=ClickMethid;
Где ClickMethid обработчик типа TNotifyevent
то в нем можно было бы получить кликнутый элемент через TMenuItem(Sender)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2010, 13:38   #3
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

в ActionExecute - так-же передается Sender
это указатель на объект вызвавший Action
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 16.07.2010, 13:44   #4
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

Да sender передаеться но если написать (sender as TMenuItem).Caption то пишет
Цитата:
invalid class typecast
еще попробывал через hint та же ошибка
вот как делаю вывод в richedit
Цитата:
REdit1.Lines.Text:=StringReplace(RE dit1.Lines.Text,'['+inttostr(numo+1)+']',(sender as TMenuItem).Hint,[rfReplaceAll]);
также если возвращать через TMenuItem(Sender).caption то почему постоянно возвращает странную строку которая точно не присутсвует ни в одной переменной
Цитата:
|ad

Последний раз редактировалось Horus92; 16.07.2010 в 13:54.
Horus92 вне форума Ответить с цитированием
Старый 16.07.2010, 13:56   #5
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Horus92 Посмотреть сообщение
Да sender передаеться но если написать (sender as TMenuItem).Caption то пишет
еще попробывал через hint та же ошибка
вот как делаю вывод в richedit

также если возвращать через TMenuItem(Sender).caption то почему постоянно возвращает странную строку которая точно не присутсвует ни в одной переменной
ну тогда хрен знает

в простых процедурах как Stilet написал - все нормально получается
почему тут nil в Sender-е.... тайна Action
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 16.07.2010, 14:02   #6
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

переделал вместо Action сделал OnClick как сказал Stilet и заработало.
Horus92 вне форума Ответить с цитированием
Старый 16.07.2010, 14:05   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это указатель на объект вызвавший Action
Неправильно.
Это указатель на TBasicAction (если чеснее то на TAction, которая его наследует).
А вот он уже имеет свойство ActionComponent, которое должно указать на компонент вызвавший акцию.
I'm learning to live...

Последний раз редактировалось Stilet; 16.07.2010 в 14:08.
Stilet вне форума Ответить с цитированием
Старый 16.07.2010, 14:10   #8
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Неправильно.
Это указатель на TBasicAction (если чеснее то на TAction, которая его наследует).
А вот он уже имеет свойство ActionComponent, которое должно указать на компонент вызвавший акцию.
трудно сказать, потому как Action1Execute назначается в MenuItem.OnClick.... как обычная процедура
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 16.07.2010, 14:13   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да что тут думать?
Читаем хелп и пробуем пример из него:
Код:
procedure TForm1.Action1Execute(Sender: TObject);
begin
 caption:=TMenuItem(TAction(Sender).ActionComponent).Caption;
end;
Учтя что на этот МенюИтем посажена некая Action, даже нестандартная
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2010, 14:35   #10
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

блин.... надо себе хелп поменять - у меня такого нет
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по созданию динам таблицы Narrator Microsoft Office Access 4 29.04.2010 00:24
динам.память.массив. Ам тя Помощь студентам 0 22.03.2010 19:23
C++ Задачки с динам. массивами pakupalos Помощь студентам 3 28.06.2009 10:12
PopupMenu и динамически созданые компоненты mastersoftna Общие вопросы Delphi 2 11.01.2009 00:11