Вопрос

Я пишу элемент управления 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top