2012-09-18 38 views
8

¿Cómo puedo encontrar todos los controles en un formulario que actualmente están visibles para el usuario? es decir, enumerar todos los controles a los que se puede aplicar pestañas y que no están ocultos a la vista (por ejemplo, en una hoja de pestañas no visible).Buscar todos los controles que son visibles para el usuario

+2

La parte anterior al 'i.e.' no coincide exactamente con la parte posterior. Por ejemplo, antes de eso, los 'controles' no necesitan ventana, y pueden ser deshabilitados. Después de eso, tienen que estar tanto en ventanas como habilitados. –

Respuesta

14

Dado que usted escribe que desea enumerar los controles que puede tabular, supongo que está hablando de controles con ventana.

A continuación, puede hacerlo simplemente

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; 

si sabe que la forma es titular de todos sus hijos y no hay otros controles. De lo contrario, debe hacer

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; 
Cuestiones relacionadas