Hola. Puedes hacer un procedimiento con los parámetros que necesites tener en cuenta y/o cambiar
Código Delphi
[-]
procedure CambiarPropiedad(Contenedor: TForm; NumeroElemento: Integer; NuevoColor: TColor, Activar:Boolean);
var i:Integer;
begin
for i := 0 to (Contenedor.ComponentCount - 1) do
begin
if (Contenedor.Components[i] is TEdit)
then begin
if TEdit(Contenedor.Components[i]).Name = 'Edit+IntToStr(NumeroElemento)
then begin
TEdit(Contenedor.Components[i]).Color := NuevoColor;
TEdit(Contenedor.Components[i]).Enabled := Activar;
end;
end;
end;
end;
Esto está bien para 2 o 3 clases de componentes, pero si son 6 o mas clases de componentes que quieres cambiar sus propiedades,
es mejor aprovecharse de la RTTI (esa gran desconocida)
Código Delphi
[-]
procedure CambiarPropiedad(Contenedor: TForm; Clase: String; NuevoColor: TColor; Activar:Boolean);
var i:Integer;
PropInfo: PPropInfo;
begin
for i := 0 to (Contenedor.ComponentCount - 1) do
begin
if Contenedor.Components[i].ClassNameIs(Clase)
then begin
PropInfo := TypInfo.GetPropInfo(Contenedor.Components[i].ClassInfo, 'Color') ;
if Assigned(PropInfo)
then begin
TypInfo.SetOrdProp(Contenedor.Components[i], PropInfo, LongInt(NuevoColor));
PropInfo := TypInfo.GetPropInfo(Contenedor.Components[i].ClassInfo, 'Enabled') ;
if Assigned(PropInfo) then
TypInfo.SetOrdProp(Contenedor.Components[i], PropInfo, LongInt(Activar));
end;
end;
end;
end;