PDA

Ver la Versión Completa : Cambiar color filas DBGrid


Iskariote0087
23-01-2006, 09:34:33
Hola tengo un pequeño problema.
Dependiendo del valor de una variable quiero q el registro q grabo en el DBGrid se grabe con un color o con otro, casi lo consigo pero en vez de cambiar un solo registro me cambian todos y eso NO NO. Lo estoy haciendo asi:

En el evento DrawColumnCell
if linea=0 then
DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

Con esto me cambia todo el DBGrid, hay alguna forma de que me cambie una sola linea.
Lo que quiero consegir es cada linea este de un color diferente para que se distingan bien.Que tal una ayudita.Gracias

Un saludete
Iskariote

tuto
23-01-2006, 09:50:15
Yo eso lo tengo en un TstringGrid de la siguiente forma;

if (Pos('DIFERENTE', Sgrid1.cells[0,row]) > 0) then
begin
Sgrid1.canvas.brush.Color := clred;
Sgrid1.canvas.fillrect(rect);
Sgrid1.canvas.textrect(rect, rect.left, rect.top, Sgrid1.Cells[col,row]);
end;

Espero te pueda ayudar o guiar.

;-)

Neftali [Germán.Estévez]
23-01-2006, 12:31:28
Revisa los hilos que aparecen al final de la página o realiza una búsqueda en los foros; Es un tema que ya se ha tratado muchas veces.

Iskariote0087
23-01-2006, 13:56:52
Gracias por vuestras contestaciones, pero algo no estoy haciendo bien.Despues de revisar con detenimiento algunos hilos he tomado una idea bastante buena, hago lo siguiente:
if linea=0 then
DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color:=clWindowText;

Pero este codigo me cambia todas las lineas no solo una. Es mas cuando la variable Linea tiene 1 todas las lineas me las pone de un color y si viene con 0 me las pone de otro. algo se me queda en el tintero y no se que es.Alguna alma caritativa que me eche un cable???????
Un saludete
Iskariote

josem
23-01-2006, 15:16:26
Hola, espero que este ejemplo te sirva.

Saludos
Jose Miguel

procedure TFMntInventario.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
iDif : Extended;
iFile: Extended;
begin
// Cambia color a Existencia por debajo del minimo
if ( Dt1.TInventario.FieldByName('ExistAct').AsInteger <
Dt1.TInventario.FieldByName('ExistMin').AsInteger ) then begin
DBGrid1.Canvas.Font.Color := clRed;
end;

// Cambia color a inventario inactivo
if ( SoloNumeros(Dt1.TInventario.FieldByName('Activo').AsString, 0) = '0' ) then begin
DBGrid1.Canvas.Font.Color := clSilver;
end;
if ( FCampoJPG( Dt1.TInventario, 'ActivaVencto' )) then begin
iDif := StrToDate(FormatFecha(Dt1.TInventario.FieldByName( 'FecVcto' ).AsString)) - Date;
iFile := StrToInt(SoloNumeros(Dt1.TInventario.FieldByName( 'AvisoVcto' ).AsString, 0));
// Cambia color a inventario vencido
if ( SoloNumeros( Dt1.TInventario.FieldByName('ActivaVencto').AsString, 0) = '1' ) then begin
if ( Abs( iFile ) >= iDif ) then begin
DBGrid1.Canvas.Brush.Color := $004080FF;
end;
end;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Neftali [Germán.Estévez]
23-01-2006, 15:57:01
(1) Leed la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), por favor.
(2) Utilizad TAG's en los mensajes (sobre todos los de delphi); Seleccionáis el trozo de texto correspondiente a código Delphi y pulsáis sobre el icono que hay en la barra del editor (no es tan difícil...).