Hola:
Otra solución para lo que plantea Mosorio en el primer mensaje es recorriendo los componentes, averiguar cuáles son DBAware y asignar la propiedad Color, si la tienen. Pare ello nos velamos de la unit TypInfo para averiguar si cierta propiedad existe y para asignarla en tal caso. Tengo un código que hace algo parecido. Adaptado a este caso sería lo siguiente:
Código:
uses TypInfo;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const
ColorCampoRequerido = clYellow;
var
PropInfo : PPropInfo;
ADataSet : TDataSet;
AField : TField;
s : String;
i : Integer;
begin
for i:=0 to ComponentCount - 1 do
begin
// Primero comprobamos que el control es DBAware
PropInfo := GetPropInfo (Components[i].ClassInfo, 'DataSource');
if (PropInfo <> nil) AND (PropInfo^.PropType^.Kind = tkClass) then
begin
// Nos aseguramos que está realmente enlazado a un TDataset
ADataSet := TDataSource(GetOrdProp (Components[i], PropInfo)).DataSet;
if ADataSet <> nil then
begin
// Obtenemos el nombre del campo al que está ligado
PropInfo := GetPropInfo (Components[i].ClassInfo, 'DataField');
if (PropInfo <> nil) then
begin
// Obtenemos el campo al que está ligado y miramos si Required = TRUE
s := GetStrProp(Components[i], PropInfo);
AField := ADataSet.FindField (s);
if (AField <> nil) AND (AField.Required) then
begin
// Comprobamos si el control tiene una propiedad Color y la asignamos
PropInfo := GetPropInfo (Components[i].ClassInfo, 'Color');
if PropInfo <> nil then
SetOrdProp(Components[i], PropInfo, ColorCampoRequerido);
end;
end;
end;
end;
end;
end;
Un saludo