Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Pintar un dbGRid (https://www.clubdelphi.com/foros/showthread.php?t=5455)

sebas78 21-11-2003 15:01:47

Pintar un dbGRid
 
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 15:05:18

Mira este ejemplo que no tengo tiempo para más, a ver si te sirve:

Código:

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 15: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 17: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 17:48:59

Cita:

sebas78 comentó:

Código:

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 16:06:36

ami me funciono de la siguiente forma
 
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

Código:

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


La franja horaria es GMT +2. Ahora son las 13:14:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi