2009-09-09 66 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