Pregunta

Estoy escribiendo un control de cuadrícula, que me he basado en TCustomControl para que pueda manejar toda la estructura, la pintura y la navegación a mí mismo. El bit que me parece que no puede averiguar es la siguiente:

En mi constructor, me puse ControlStyle a esto:

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

La idea es que si los eventos manijas de control del ratón, lo que puedo hacer cosas como la selección del juego, etc. Me di cuenta sin embargo que el control nunca recibe el foco. Resulta que tengo un TComboBox en el formulario y que se centra claramente cuando se crea el formulario. No importa cuántas veces hago clic dentro de mi parrilla, las estancias se centran en el cuadro combinado.

Por supuesto, esto tiene implicaciones para mi manejo de eventos de teclado también.

Así que la pregunta es, ¿Cómo se determina que el foco debe cambiar a un control cuando se hace clic en él?

¿Fue útil?

Solución

El CustomControl debe llamar a SetFocus sobre sí mismo cuando se hace clic sobre.

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top