PDA

Ver la Versión Completa : Pintar un dbGRid


sebas78
21-11-2003, 16:01:47
Hola:

quisiera saber como hacer para pintar una celda en especial de un dbgrid segun el color que el usr elige del control de colores
en este momento estoy usando el ste codigo pero no pasa nada

procedure TFPuma0058.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
inherited;
DBItems.Canvas.Brush.color := clred;
DBItems.Canvas.FillRect(rect);
DBItems.defaultdrawdatacell(Rect,Field,State);
end;

eb este caso no uso el componennte de color lo hice asi para probar y no me pinta ninguna celda de rojo. quisiera saber si tengo que poner alguna propiedad del TdbGRid o algo asi.
Gracias!!!!!!!!!!!!!!!!!!

marcoszorrilla
21-11-2003, 16:05:18
Mira este ejemplo que no tengo tiempo para más, a ver si te sirve:


procedure TfrFactAlbaranes.RejaDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin

If Column.FieldName='Marcado' then
Begin

Reja.Canvas.Brush.Color :=ClAqua;
Reja.Canvas.Font.Color:=ClRed;
Reja.Canvas.Font.Style:=([fsBold]);
Reja.DefaultDrawColumnCell(Rect,Datacol,Column,State);
end;

Un Saludo.

sebas78
21-11-2003, 16:48:03
Si te agradesco mucho, el problema es que yo quiero pintar una celda y no toda la columna ademas quiero pintar la celda con el color que tengo almacenado como un integer en la misma celda


Muchas gracias!!!!!!!!!

Xavierator
26-11-2003, 18:36:05
Para que pinte lo que tu quieras, tienes la propiedad DefaultDrawing, que debe estar a false, ya que si esta a true, pinta con el modo por defecto del componente y no te hace ni caso.

Saludos, Xavierator.

jachguate
26-11-2003, 18:48:59
sebas78 comentó:


procedure TFPuma0058.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
inherited;
DBItems.Canvas.Brush.color := clred;
DBItems.Canvas.FillRect(rect);
DBItems.defaultdrawdatacell(Rect,Field,State);
end;




Puedo estar mal, y me baso en que el editor regularmente mantiene bien la correspondencia de nombres entre objetos/eventos creados para este objeto, aunque no es una regla, pero me parece que estas asignando el color a un objeto diferente del que maneja el evejto.

Para evitar esta posibilidad, y si tenes el evento asociado a varias rejillas, creo que podes valerte del Sender, no?

Hasta luego.

;)

jesusomarsanche
22-07-2006, 17:06:36
utilice el codigo expuesto anteriormente pero lo cambie a los eventos del grid
getcolorcelda
getcolortexto

y reviso que la columna de la celda sea la que quiero cambiar el color utilizando acol para la posicion de la columna

procedure Tfrmvalidar.grdpreprogGetColorCelda(Sender: TObject;
Column: TColumn; ARow, ACol: Integer; AState: TGridDrawState;
ABrush: TBrush; AFont: TFont);
begin
if preprog.FieldByName('error').AsInteger = 1 then begin
if grdpreprog.Fields[acol].DisplayName = 'COMPONENTE' then begin
grdpreprog.Canvas.Brush.Color :=claqua;
end;
end;
end;
procedure Tfrmvalidar.grdpreprogGetTextoCelda(Sender: TObject;
Column: TColumn; ARow, ACol: Integer; var Texto: String);
begin
if preprog.FieldByName('error').AsInteger = 1 then begin
if grdpreprog.Fields[acol].DisplayName = 'COMPONENTE' then begin
grdpreprog.Canvas.Font.Color := clRed;
grdpreprog.Canvas.Font.Style := [fsBold];
end;
end;
end;

espero te sea de utilidad