Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Color en Linea DBGRID (https://www.clubdelphi.com/foros/showthread.php?t=93893)

oscarac 25-04-2019 21:25:41

Color en Linea DBGRID
 
se que este tema se ha tratado en innumerable ocasiones pero he probado todos los ejemplos habidos y por haber y no logro encontrar una solucion

tengo una consulta donde jalo el color que quiero que se pinte en el grid de acuerdo a cierta caracteristica (predefinida en el query)m el asunto que el campo qryArticulosColor debe ser 0 o un dato (TColor) que puede ser diferente

la idea es pintar las lineas del grid de acuerdo a un color predeterminado (varios colores)

Código Delphi [-]
procedure TfrmCatalogoArticulo.dbgArticuloDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var Chk : Integer;
begin

  if qryArticulosColor.AsInteger <> 0 then
  Begin
    UnColor := qryArticulosColor.AsInteger;
    dbgArticulo.Canvas.brush.Color := clUnColor;
    dbgArticulo.Canvas.Font.Color := clBlack;
  End
  Else
  Begin
    dbgArticulo.Canvas.Font.Color := clBlack;
    dbgArticulo.Canvas.brush.Color := clWhite;
  End;
  dbgArticulo.Canvas.FillRect(Rect);
end;


y obtengo como resultado esto :




si cambio algunos valores del campo "Color" me sale esto



si bien es cierto pinta toda la linea del color previamente escogido, el texto no esta en negro y lo que no esta asignado color tampoco aparece

ecfisa 25-04-2019 22:14:29

Hola.

Intentalo de este modo:
Código Delphi [-]
procedure TfrmCatalogoArticulo.dbgArticuloDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  gr: TDBGrid;
begin
  gr := TDBGrid(Sender);

  if qryArticulosColor.AsInteger > 0 then
    gr.Canvas.Brush.Color := qryArticulosColor.AsInteger
  else
    gr.Canvas.brush.Color := clWhite;

  gr.Canvas.Font.Color  := clBlack;
  gr.Canvas.FillRect(Rect);
  gr.DefaultDrawColumnCell(Rect, Datacol, Column, State);
end;

Salida ejemplo:


Saludos :)

oscarac 25-04-2019 22:20:04

funciona, pero hay un detalle
no se ve resaltado la linea en que esta el registro activo.

se puede colocar un color diferente cuando el registro sea el activo? y cuando cambie de registro que devuelva el color que tenia originalmente

oscarac 25-04-2019 22:39:41

SOLUCION :

Código Delphi [-]
if gdSelected in State then
  Begin
    dbgArticulo.Canvas.Font.Color := clBlue;
    dbgArticulo.Canvas.Brush.Color := clGray;
  End
  Else
  Begin
    dbgArticulo.Canvas.Font.Color := clBlack;
  End;


gracias mil


La franja horaria es GMT +2. Ahora son las 23:09:06.

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