Как TCustomControl получает фокус ввода?

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

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

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

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

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

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

1 ответ

Решение

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

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Другие вопросы по тегам