4

TCustomControlに基づいたグリッドコントロールを作成しているので、すべての構造、ペイント、ナビゲーションを自分で処理できます。私が理解できないように見えるビットはこれです:

コンストラクターで、ControlStyleを次のように設定します。

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

コントロールがマウスイベントを処理する場合、セットの選択などを実行できるという考えです。コントロールがフォーカスを受け取らないことに気づきました。フォームにTComboBoxがあり、フォームが作成されるときに明確にフォーカスされます。グリッド内で何度クリックしても、フォーカスはコンボボックスにとどまります。

もちろん、これはキーボードイベントの処理にも影響します。

問題は、コントロールをクリックしたときにフォーカスがコントロールに移動する必要があるとどのように判断されるかということです。

4

1 に答える 1

10

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

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

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
于 2009-09-09T10:16:55.943 に答える