Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.279
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
DBGrid de color según campo lógico (u otro valor)

Método 1
Cómo modificar los colores en un Grid según el valor de un campo booleano

En el evento GetCellParams pones...

Código Delphi [-]
procedure TnombreFrom.Panel1GetCellParams(Sender: TObject;
  Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);

var
  Resultado: Boolean;

begin
  Resultado := (Sender as TDBGrid).DataSource.DataSet.FieldByName('Campo').AsBoolean;
  if not Resultado then Background := clYellow;
  if not resultado then AFont.Color := clRed;
  if Highlight then AFont.Color := clHighlightText;
end;

Método 2
Cómo cambiar el color de una línea del DBGrid, según el contenido de un campo

En este caso se toma el contenido del primer campo, el cual es lógico. Pero puede ser sustituido por cualquier otro valor. Hasta aquí, similar al anterior.

Primero es necesario declarar un tipo nuevo: TCustomDBGrid

Código Delphi [-]
type TCrakerDB = class(TCustomDBGrid);

Y luego, hay que asignar el evento OnDrawColumnCell

Código Delphi [-]
procedure TForm.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
try
with TCrakerDB(sender) do begin
     if DataLink.Fields[0].Value then
        if DataLink.ActiveRecord = row - 1 then
           Canvas.Brush.Color := clBlack
        else
            Canvas.Brush.Color := $00FFFFC4;
     end;
DBParrilla.DefaultDrawColumnCell(Rect, DataCol, Column, State);
except
end;
end;

Se produce un efecto no deseable: no hay datos que mostrar y sin embargo, la parrilla contiene datos falsos.

Dicho con otras palabras: Al añadir el bloque except evitamos el error que se produce cuándo no hay datos.
No sirve un bloque finally.

Con este código dibujarás la línea que tiene el cursor de color clBlack, y las que cumplan la condición que especifiques con el color $00FFFFC4. El resto de líneas tendrán el color que el DBGrid tenga definido por defecto.
Responder Con Cita