Pergunta

Estou escrevendo um controle de grade que baseei no TcustomControl para que eu possa lidar com toda a estrutura, pintura e navegação. A parte que não consigo descobrir é a seguinte:

No meu construtor, defino o estilo de controle para isso:

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

A idéia é que, se o controle lida com eventos do mouse, posso fazer coisas como seleção de conjuntos, etc. Notei, embora o controle nunca receba o foco. Por acaso, tenho um TCombobox no formulário e ele está claramente focado quando o formulário é criado. Não importa quantas vezes eu clique na minha grade, o foco permanece no ComboBox.

É claro que isso também tem implicações para o meu manuseio de eventos de teclado.

Portanto, a questão é: como é determinado que o foco deve mudar para um controle quando você clica nele?

Foi útil?

Solução

O CustomControl deve chamar o SetFocus quando for clicado.

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top