2009-09-09 6 views
4

J'écris un contrôle de grille que je base sur TCustomControl ainsi je peux manipuler toute la structure, la peinture et la navigation moi-même. Le bit que je ne peux pas sembler comprendre est ceci:Comment TCustomControl reçoit-il le focus d'entrée?

Dans mon constructeur, je mis ControlStyle à ceci:

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

L'idée étant que si les poignées de contrôle des événements de la souris, je peux faire des choses comme la sélection de l'ensemble, etc. J'ai remarqué que le contrôle ne reçoit jamais le focus. Il se trouve que j'ai un TComboBox sur le formulaire et il est clairement concentré lorsque le formulaire est créé. Peu importe combien de fois je clique dans ma grille, l'accent reste sur la zone de liste déroulante.

Cela a évidemment des implications pour ma gestion des événements de clavier. Donc, la question est, comment est-il déterminé que le focus devrait passer à un contrôle lorsque vous cliquez dessus?

Répondre

9

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

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

    if not (csDesigning in ComponentState) and CanFocus then 
    SetFocus; 
+0

+1 C'est ce que je fais dans mes commandes personnalisées – Nat