Как TCustomControl получает фокус ввода?
-
22-09-2019 - |
Вопрос
Я пишу элемент управления grid, который я основал на TCustomControl, чтобы я мог самостоятельно обрабатывать всю структуру, рисование и навигацию.Та часть, которую я, кажется, не могу понять, заключается в следующем:
В моем конструкторе я установил ControlStyle в это:
ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents,
csDoubleClicks, csNeedsBorderPaint, csPannable];
Идея заключается в том, что если элемент управления обрабатывает события мыши, я могу делать такие вещи, как выбор набора и т.д.Однако я заметил, что элемент управления никогда не получает фокуса.Так получилось, что у меня есть TComboBox в форме, и он четко сфокусирован при создании формы.Независимо от того, сколько раз я нажимаю на свою сетку, фокус остается на выпадающем списке.
Это, конечно, имеет последствия и для моей обработки событий клавиатуры.
Итак, вопрос в том, как определяется, что фокус должен смещаться на элемент управления при нажатии на него?
Решение
CustomControl должен вызывать SetFocus для самого себя при нажатии на него.
procedure TMyCustomControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited;
if not (csDesigning in ComponentState) and CanFocus then
SetFocus;