Как 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;