2009-09-09 4 views
4

Я пишу элемент управления сеткой, который я основал на TCustomControl, чтобы я мог обрабатывать всю структуру, рисование и навигация. Бит, что я не могу показаться, чтобы выяснить это:Как TCustomControl получает фокус ввода?

В моем конструкторе, я поставил ControlStyle этому:

ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents, 
    csDoubleClicks, csNeedsBorderPaint, csPannable]; 

Идея заключается в том, что если элемент управления обрабатывает события мыши, что я могу сделать что-то как выбор набора и т. д. Я заметил, что контроль никогда не получает фокуса. У меня, случается, есть TComboBox в форме, и он четко сфокусирован при создании формы. Независимо от того, сколько раз я щелкаю по моей сетке, фокус остается на выпадающем списке.

Это, конечно же, имеет значение для моей обработки событий клавиатуры.

Итак, вопрос в том, как определить, что фокус должен перейти к управлению, когда вы нажмете на него?

ответ

9

CustomControl должен называть SetFocus сам по себе, когда на него нажимается.

procedure TMyCustomControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    inherited; 

    if not (csDesigning in ComponentState) and CanFocus then 
    SetFocus; 
+0

+1 Это то, что я делаю в своих пользовательских элементах управления – Nat

Смежные вопросы