« ☆TDrawGridを使ってみる。 | トップページ | ☆ネストしたクラス »

☆ドッキングされたフォーム上のコンポーネントにフォーカスを当てる。

☆TDockTabSetを使ってみる。 で、作ったサンプルで、Form3にパネルとボタンを貼り付け、次のような処理を行います。
procedure TForm3.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := ListBox1.Items.Add('NewItem');
  ListBox1.ItemIndex := I;
  ActiveControl := ListBox1;
end;

実行するとこんな感じです。(ドッキング時)

Focusonlistbox


(フローティング時)

Focusonlistbox2

コードを見ていただくとわかって頂けるかと思いますが、追加したアイテムにフォーカスを当てる処理です。 この処理は、ドッキングしていない状態の時は、動作しますが、ドッキングしているときは 次のようなメッセージが表示されます。

Err

Err2


この問題を解決するために、ドッキングしているかどうかを判断させて次のような処理を行いました。

Form1への追加処理
type
  TForm1 = class(TForm)
   (略)
  public
    procedure FocusOnListBox;
  end;

    (略)

procedure TForm1.FocusOnListBox;
begin
  ActiveControl := Form3.ListBox1;
end;

Button1Clickを次のように変更します。 フォームがドッキングしているかどうかは、Parentがnilかどうかで判断させます。
procedure TForm3.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := ListBox1.Items.Add('NewItem');
  ListBox1.ItemIndex := I;
if Self.Parent = nil then
    ActiveControl := ListBox1
  else
    Form1.FocusOnListBox;
end;
これで問題なく動作しました。

|

« ☆TDrawGridを使ってみる。 | トップページ | ☆ネストしたクラス »