Question

Je suis en train d'écrire un contrôle de grille que je basé sur TCustomControl donc je peux gérer toute la structure, la peinture et me navigation. Le bit que je ne peux pas à comprendre est la suivante:

Dans mon constructeur, je mis ControlStyle à ceci:

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

L'idée étant que si le contrôle gère les événements de la souris, je peux faire des choses comme la sélection de jeux, etc. J'ai remarqué cependant que le contrôle ne reçoit jamais la mise au point. J'arrive d'avoir un TComboBox sur la forme et est clairement ciblé lorsque le formulaire est créé. Peu importe combien de fois je clique dans mon réseau, l'accent reste sur la zone de liste déroulante.

Bien sûr, cela a des conséquences pour ma gestion des événements de clavier ainsi.

La question est, comment est-il déterminé que l'accent devrait passer à un contrôle lorsque vous cliquez dessus?

Était-ce utile?

La solution

Le CustomControl doit appeler SetFocus sur lui-même quand il est cliqué sur.

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top