Cómo modificar el aspecto de los controles según un estado
Artículo por Club Developers · 31 diciembre 2005
4969 vistas
Podemos usar esta función para indicar si un formulario es o no modificable (cambiando el color de los componentes y su propiedad ReadOnly o Enabled)
Ejemplo de llamada a la función:
Código de la función
Ejemplo de llamada a la función:
delphi
setAspectControl(self, true);
Código de la función
delphi
uses Graphics, Controls, StdCtrls, TypInfo; { Parámetros : } { container : contenedor de los componentes a modificar en función del estado} { estado : si true, los componentes del contenedor son modificables } { si false, los componentes del contenedor serán de sólo lectura } { trueColor : color dado en caso de que los componentes estén activos } { falseColor : color dado en caso de que los componentes estén inactivos } { testTagValue: si true, sólo se tratarán los componentes que tengan su Tag a 0} { si false, se tratarán todos los componentes } procedure setAspectControl(Container: TWinControl; Estado: boolean; trueColor: TColor = clWindow; falseColor: TColor = clBtnFace; testTagValue: boolean = true); var i: integer; color: array[boolean] of TColor; begin color[false] := falseColor; color[true] := trueColor; for i:= 0 to Container.ControlCount - 1 do begin { si testTagValue, sólo controlamos los componentes que tengan la propiedad Tag a 0 } { esto permite no tratar algunos controles sólo modificando su Tag } if (not (Container.Controls[i] is TLabel)) and ((not testTagValue) or (Container.Controls[i].Tag = 0)) then begin { Si el componente contiene otros componentes, hacemos llamada recursiva } if (Container.Controls[i] is TWinControl) and ((Container.Controls[i] as TWinControl).ControlCount > 0) then begin setAspectControl(Container.Controls[i] as TWinControl, Estado, trueColor, falseColor, testTagValue) end else begin { modificamos la propiedad ReadOnly o Enabled } if GetPropInfo(Container.Controls[i].ClassInfo,'ReadOnly') <> nil then SetPropValue(Container.Controls[i],'ReadOnly', not Estado) else if GetPropInfo(Container.Controls[i].ClassInfo,'Enabled') <> nil then SetPropValue(Container.Controls[i],'Enabled', Estado); { modificamos el color } if not (Container.Controls[i] is TButtonControl) and (GetPropInfo(Container.Controls[i].ClassInfo, 'Color') <> nil) then SetPropValue(Container.Controls[i],'Color', Couleur[Estado]); end; end; { control de Tag } end; end;