2009-09-09 40 views
4

我正在写一个基于TCustomControl的网格控件,这样我就可以自己处理所有的结构,绘画和导航。我似乎无法弄清楚的一点是:TCustomControl如何接收输入焦点?

在我的构造,我设置ControlStyle这样:

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

的想法是,如果控制手柄鼠标事件,我可以做的事情像设置选择等。我注意到,虽然控制从未收到焦点。我碰巧在窗体上有一个TComboBox,当窗体被创建时,它显然是集中的。无论我在网格中单击多少次,焦点都停留在组合框上。

这当然也会影响我对键盘事件的处理。

所以问题是,它是如何确定当你点击它时焦点应该转移到一个控件上?

回答

9

当点击它时,CustomControl应该自己调用SetFocus。

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

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

+1这就是我在自定义控件中所做的 – Nat 2009-09-09 12:34:14