|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2008, 14:58 | #1 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
Получить ссылку на вызывающий объект
procedure TFormBl.AllControlsKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState); begin case Key of 13 : begin SelectNext(Sender as TWinControl, true, true); Key := 0; end; else begin Inherited end end end; Эта процедура вызывается из нескольких объектов типа Edit. Вопрос - как определить, в какой конкретно объекте возникло событие и откуда оно было вызвано. Я понимаю, что надо копить Sender. но что-то пока туго. Мне надо получить имя объекта или что-то. однозначто его определяющее.
и это пройдет...
|
06.11.2008, 15:03 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Ничего копить не надо.
Вызвавший объект = (Sender as TEdit).Name Для идентификации компонентов формы существует также свойство TAG - вы можете присвоить произвольный, но уникальный номер каждому компоненту и обращаться по этому номеру. Последний раз редактировалось mihali4; 06.11.2008 в 15:05. |
06.11.2008, 15:04 | #3 |
Пользователь
Регистрация: 28.11.2007
Сообщений: 49
|
Используй свойство Tag
|
06.11.2008, 16:09 | #4 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
УГу
спасибо, токма почему то Sender = () - то есть пустой, зараза.
Ладно, буду думать дальше.
и это пройдет...
|
06.11.2008, 18:43 | #5 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
|
07.11.2008, 08:16 | #6 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
()
Эта процедура цепляется как обработчик события OnKeyDown
Соответственно, как я понимаю, она вызывается системой или Дельфи и выполняется ранее приведенный код. Вопрос - как при вызове этого обработчика понять, какой объект его сгенерировал.
и это пройдет...
|
07.11.2008, 09:46 | #7 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
вот нашел
Вот нашел вариант через задние ворота:
Obj := (Sender as TEdit).Hint; if Obj = 'np00' then PageControlNp.Pages[4].Show; перед этим в поле Hint добавил "np00"
и это пройдет...
|
07.11.2008, 09:51 | #8 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
Столкнулся с проблемой, если
Sender типа TComboBox - выдается исключение. Ищу условие обхода этого. Использование try ... finally .... end; Не решает проблемы.
и это пройдет...
|
07.11.2008, 09:54 | #9 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
Вот пока текущее решение
procedure TFormBl.AllControlsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Obj : TComponentName; begin case Key of 13 : begin SelectNext(Sender as TWinControl, true, true); Key := 0; end; else begin if Sender.ClassName = 'TEdit' then try Obj := (Sender as TEdit).Hint; if Obj = 'np000' then PageControlAbonent.Pages[4].Show; finally Inherited end; end end end;
и это пройдет...
|
07.11.2008, 11:06 | #10 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
if Sender.ClassName = 'TComboBox' then |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как уничтожить объект в C# | Никки | Общие вопросы .NET | 7 | 30.10.2014 23:54 |
Вредоносный HTTP-объект | Gauss | О форуме и сайтах клуба | 4 | 16.04.2008 14:33 |
Как получить ссылку на файл с файлообенника? | S(p)@wN | Работа с сетью в Delphi | 0 | 16.08.2007 15:20 |