2012-09-18 14 views
8

Şu anda kullanıcı tarafından görülebilen formdaki tüm denetimleri nasıl bulabilirim? yani, sekize edilebilen ve görünmeyecek tüm kontrolleri (örn. görünmeyen bir sekme sayfasında) listeleyin.Kullanıcıya görünür olan tüm denetimleri bulma

+2

parçası yapmak zorunda Tam olarak bu bölümle aynı değildir. Örneğin, bundan önce, 'kontroller' pencerelenmesine gerek yoktur ve bunlar devre dışı bırakılabilir. Ondan sonra hem pencereli hem de etkin olmalılar. –

cevap

14

Sekme yapabileceğiniz denetimleri listelemek istediğinizi yazdığınızdan beri, pencereli denetimler hakkında konuştuğunuzu varsayalım. Form tüm çocukları ve başka hiçbir kontrolleri sahibi olduğunu biliyorsanız

Sonra sadece

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; 

yapabilirsiniz. Aksi takdirde, 'yani' önce

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; 
İlgili konular