Перекрытие SetFocus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Перекрытие SetFocus

Сообщение VirtUX » 18.08.2010 12:58:26

Хочу, во время получения фокуса компонентом, передать его (фокус) дочернему. Пытаюсь делать это так:
1. Перекрываю процедуру SetFocus;
2. Внутри ппроцедуры пишу:
Код: Выделить всё
procedure TLiteCustomNamedControl.SetFocus;
var
  Form: TCustomForm;
begin
  //inherited SetFocus;
  if Assigned(FNamedControl) then begin  //Здесь FNamedControl - это контрол, которому хочу отдать фокус
    Form := GetParentForm(self);
    Form.FocusControl(TWinControl(FNamedControl));
  end;
end; 

Но эта процедура почему-то не обрабатывается :( Дебагер в нее даже не заходит, при получении компонентом фокуса.
Так где же мне отловить фокус, чтоб отдать его дочернему?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Перекрытие SetFocus

Сообщение Alexx2000 » 18.08.2010 13:17:52

VirtUX писал(а):Так где же мне отловить фокус, чтоб отдать его дочернему?

Например в событии OnEnter, оно как раз и возникает при получении фокуса контролом.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Перекрытие SetFocus

Сообщение VirtUX » 18.08.2010 14:23:11

Alexx2000 писал(а):Например в событии OnEnter

У него нет виртуальной процедуры "SetEnter", чтоб можно было перекрыть в своем компоненте. А если в конструкторе присудить свойству OnEnter свой обработчик, то он ведь будет замещен пользовательским во время использования компоненты...

Добавлено спустя 1 час 30 минут 27 секунд:
Решил так:
в обработчике Paint добавил строку:
Код: Выделить всё
if Focused and Assigned(FNamedControl) then TWinControl(FNamedControl).SetFocus;

Теперь при получении фокуса предком - он передает его "своей дочке".
Надо было сразу так попробывать - боялся пересечиний Invalidate;

Добавлено спустя 1 минуту 54 секунды:
А все же интересно узнать - в какой момент вызывается SetFocus?

Добавлено спустя 10 минут 33 секунды:
Alexx2000
Извините - был не прав. Сейчас наткнулся на виртуальный DoEnter;

Добавлено спустя 58 минут 11 секунд:
DoEnter - не подошел. Дочка теряет фокус при повторной передаче фокуса предку. Остановился на обработчике Paint.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

Рейтинг@Mail.ru