Ver Mensaje Individual
  #8  
Antiguo 14-10-2006
Avatar de kovaski
kovaski kovaski is offline
Miembro
 
Registrado: oct 2006
Ubicación: Valencia
Posts: 39
Reputación: 0
kovaski Va por buen camino
Thumbs up ¡solución!

Al fin he dado con la solución al problema .

Aqui la pongo para quien le pueda servir. Gracias fly por tu tiempo e interes.

En primer lugar hay que poner la propiedad "DefDrawBefore" del ib_Grid en "True"(por defecto).

En el "uses" hay que poner "IB_Components".

Tenemos que atacar el evento "OnGetCellProps" del ib_Grid y escribimos lo siguiente:

Código Delphi [-]
procedure TFichaOfertas.IB_Grid1GetCellProps(Sender: TObject; ACol,
  ARow: Integer; AState: TGridDrawState; var AColor: TColor; AFont: TFont);
var
  Datos: string;
  Columnas: TIB_Column;
begin
//Este código es para pintar solo la celda del campo "ESTADO" que tiene la palabra "Activo"
if Tablas.dsOfertas.Active then
  begin
    with Tablas.dsOfertas.Dataset do
    begin
      BufferRowNum:= ib_Grid1.DataRow[ARow];
      if BufferRowNum > 0 then
       begin
        Columnas:= ib_Grid1.GridFields[ib_Grid1.DataCol[ACol]];
         if Assigned(Columnas) and (Columnas.FieldName = 'ESTADO') then
           begin
             Datos:= BufferFieldByName('ESTADO').AsString;
             if Datos = 'Activo' then
              if Acolor = ib_Grid1.Color then
                AColor:= clLime;
           end;
       end;
    end;
  end;
//Este código es para pintar la fila completa que tiene el campo "ESTADO" la palabra "Activo"
if Tablas.dsOfertas.Active then
  begin
    with Tablas.dsOfertas.Dataset do
    begin
      BufferRowNum:= ib_Grid1.DataRow[ARow];
      if BufferRowNum > 0 then
       begin
       Datos:= BufferFieldByName('ESTADO').AsString;
       if Datos = 'Activo' then
         if Acolor = ib_Grid1.Color then
          AColor:= clRed;
       end;
    end;
  end;

end;

Gracias por vuestra ayuda. Saludos .
Responder Con Cita