2012-09-18 13 views
8

ユーザーは現在表示されているフォーム上のすべてのコントロールを見つけることができますか?すなわち、非表示のタブシート上のように、タブすることができ、かつ表示から隠すことのできないすべてのコントロールを列挙する。ユーザーに表示されるすべてのコントロールを見つけよう

+2

'の前の部分は、その後の部分と正確に一致しません。たとえば、「コントロール」の前にウィンドウを表示する必要はなく、無効にすることもできます。その後、ウィンドウを開いて有効にする必要があります。 –

答えて

14

タブすることができるコントロールをリストしたいと書いたので、私はあなたがウィンドウコントロールについて話していると仮定します。フォームは、そのすべての子供なし他のコントロールを所有していることを知っていれば

次に、あなたは単に

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; 
関連する問題