Перекрытие SetFocus

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

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

Ответить
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Перекрытие SetFocus

Сообщение VirtUX »

Хочу, во время получения фокуса компонентом, передать его (фокус) дочернему. Пытаюсь делать это так:
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; 

Но эта процедура почему-то не обрабатывается :( Дебагер в нее даже не заходит, при получении компонентом фокуса.
Так где же мне отловить фокус, чтоб отдать его дочернему?
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

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

Например в событии OnEnter, оно как раз и возникает при получении фокуса контролом.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

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.
Ответить