2012-09-18 4 views
8

Come posso trovare tutti i controlli su un modulo attualmente visibili all'utente? Ad esempio, elenca tutti i controlli che possono essere inseriti e non nascosti alla vista (ad esempio su un foglio non visibile).Trova tutti i controlli visibili all'utente

+2

La parte prima di "i.e." non corrisponde esattamente alla parte successiva. Ad esempio, prima di esso, i "controlli" non devono essere in finestra e possono essere disabilitati. Dopo di ciò, devono essere entrambi finestrati e abilitati. –

risposta

14

Dato che si scrive che si desidera elencare i controlli a cui è possibile assegnare schede, presumo che si stia parlando di controlli con finestra.

Poi si può fare semplicemente

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; 

se si sa che il modulo possiede tutti i suoi figli e non altri controlli. Altrimenti, devi fare

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;