どのようには、TCustomControlは、入力フォーカスを受け取るのでしょうか?

StackOverflow https://stackoverflow.com/questions/1398578

  •  22-09-2019
  •  | 
  •  

質問

私は自分自身を塗装し、ナビゲーション、すべての構造を扱うことができますので、私はは、TCustomControlに基づいてグリッドコントロールを書いています。私が把握するように見えることができないことを少しはこれです:

私のコンストラクタで、私はこれにControlStyleを設定します:

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

コントロールハンドルのマウスイベントならば、私はコントロールがフォーカスを受け取ることはありませんことに気づいたもののなどIセットの選択のようなものを行うことができているという考え。私は、フォーム上のTComboBoxを持って起こると、フォームが作成されたとき、それは明らかに焦点を当てています。どんなに私は、グリッド内をクリック回数、コンボボックスにフォーカス滞在ます。

もちろんこれは、同様にキーボードイベントの私の取扱いのための意味を持っています。

質問があるので、

は、どのようにそれはあなたがそれをクリックしたときに、フォーカスがコントロールにシフトする必要があると判断しているのですか?

役に立ちましたか?

解決

それは時にクリックされたときCustomControlが自身にのSetFocusを呼び出す必要があります。

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top