Pregunta

Me gustaría todas las filas donde, en particular, el nombre de campo 'Hola' está presente para hacerse de color verde.Probé esto en customdrawcell:

if abstable1.fieldbyname('somename').asstring = 'Hello' then
  cxgrid.canvas.brush.color:=clGreen

Pero no funciona ... ¿Qué estoy perdiendo aquí?

¿Fue útil?

Solución

No intente cambiar los colores de lienzo en la cuadrícula.Más bien, y encuentro esto a Siempre sea verdadero: cambie los colores en el controlador de Ondrawcell de , como en este ejemplo:

procedure T_fmTabSnapList.View1CustomDrawCell(Sender: TcxCustomGridTableView;
  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if abstable1.fieldbyname('somename').asstring = 'Hello' then 
    ACanvas.Brush.Color := clGreen
end;

El CXGRID es solo un contenedor para las vistas.Las vistas son donde se produce toda la pintura. s

Otros consejos

Utilice el evento ONGETCONTENTSTYLEY para las columnas individuales o el objeto de cuadrícula.Los estilos son mucho más fáciles de trabajar que el jugador con el lienzo.

Debe analizar los datos internos para cada fila de vista, más bien, los datos de la posición actual en la tabla.También haga uso del lienzo provisto en el evento OnCustomDRAWCELL ().

procedure TForm1.YourViewCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if(AViewInfo.GridRecord.Values[YourColumn.Index] = 'Hello') then
    ACanvas.Brush.Color := clGreen;
end;

procedure Tfm1.Grid1StylesGetContentStyle(Sender: TcxCustomGridTableView;
  ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
  out AStyle: TcxStyle);
Var
 Style1: TcxStyle;
begin
 if AItem = nil then exit;

 if ARecord.Values[Grid1Med.Index] = true then
   AStyle := cxStyleMed;

 if ARecord.Values[Grid1CP.Index] = true then
   AStyle := cxStyleHost;

 if (ARecord.Values[Grid1Med.Index] = true) and
    (ARecord.Values[Grid1CP.Index] = true) then
   AStyle := cxStyleHostAndCP;

  if not VarIsNull(ARecord.Values[colColor.Index]) then
  begin
    if not Assigned(AStyle) then
      AStyle := TcxStyle.Create(Sender);
    AStyle.Color := ARecord.Values[colColor.Index];
  end;
end;

Aquí hay algún código de trabajo de un programa mío que hace algo similar.

procedure TDoDockets.grDocketsDrawColumnCell(Sender: TObject;
            const Rect: TRect; DataCol: Integer; Column: TColumn;
            State: TGridDrawState);
begin
 with grDockets do
  begin
   if (qDocketsOpenCost.asinteger > 1) and (datacol = 5)
    then canvas.font.color:= clRed;

   if datacol = 9 then // status
    if qDocketsColour.Value <> 0
     then Canvas.font.color:= tcolor (qDocketsColour.Value);

   if datacol = 10 then // attention
    if qDocketsAttention.asinteger = 1
     then canvas.brush.color:= clRed;

   if qDocketsUrgent.asinteger = 1 then canvas.brush.color:= 10092543;
   // light yellow
   DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end
end;

Grdockets es la cuadrícula, y qdockets es la consulta que se muestra dentro de la cuadrícula.Ciertas columnas pueden dibujarse en un color diferente dependiendo del valor que se muestre, y en un caso (qdocketsurgent= 1), se cambia el color de fondo de la línea completa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top