2012-09-18 19 views
8

我怎樣才能找到所有窗體上說,目前對用戶可見的控件控制?即列出所有可以被標記爲並且不被隱藏的控制(例如,在不可見的標籤頁上)。找出所有用戶可見

+2

前面的部分「即」並不完全匹配它之後的部分。例如,在它之前,'控件'不需要被窗口化,並且它們可以被禁用。之後,它們必須同時啓用並啓用。 –

回答

14

既然你寫的,你要列出可以按Tab鍵,我想你說的是窗口控件的控件。

然後,如果你知道的形式擁有其所有的孩子,沒有其他控件,你可以做簡單的

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;