Ver Mensaje Individual
  #6  
Antiguo 27-05-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 24
andres1569 Va por buen camino
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
Responder Con Cita