Domanda

Sto scrivendo un controllo di griglia che ho basato su TCustomControl in modo da poter gestire tutta la struttura, la pittura e la navigazione me stesso. Il bit che io non riesco a capire è questo:

Nel mio costruttore, ho impostato ControlStyle a questo:

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

L'idea è che se il controllo gestisce gli eventi del mouse, posso fare cose come la selezione del set ecc ho notato però che il controllo non riceve mai la messa a fuoco. Mi capita di avere un TComboBox sulla forma ed è chiaramente concentrata quando si crea la forma. Non importa quante volte si fa clic all'interno della mia griglia, il focus rimane sulla casella combinata.

Questo naturalmente ha implicazioni per la mia gestione degli eventi di tastiera pure.

Quindi la domanda è, come è stabilito che l'attenzione dovrebbe spostarsi a un controllo quando si fa clic su di esso?

È stato utile?

Soluzione

Il CustomControl dovrebbe chiamare SetFocus su se stesso quando si fa clic su.

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top