8

現在ユーザーに表示されているフォーム上のすべてのコントロールを見つけるにはどうすればよいですか? つまり、タブで移動でき、ビューから非表示にされないすべてのコントロールを一覧表示します (例: 非表示のタブ シート)。

4

1 に答える 1

16

タブできるコントロールをリストしたいと書いているので、ウィンドウ化されたコントロールについて話していると思います。

次に、簡単に行うことができます

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TWinControl then
      if TWinControl(Components[i]).CanFocus then
        Memo1.Lines.Add(Components[i].Name)
end;

フォームがすべての子を所有し、他のコントロールを所有していないことがわかっている場合。そうでなければ、あなたはしなければなりません

procedure AddVisibleChildren(Parent: TWinControl; Memo: TMemo);
var
  i: Integer;
begin
  for i := 0 to Parent.ControlCount - 1 do
    if Parent.Controls[i] is TWinControl then
      if TWinControl(Parent.Controls[i]).CanFocus then
      begin
        Memo.Lines.Add(Parent.Controls[i].Name);
        AddVisibleChildren(TWinControl(Parent.Controls[i]), Memo);
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddVisibleChildren(Self, Memo1);
end;
于 2012-09-18T11:28:26.970 に答える