Question

Je voudrais que toutes les lignes où, en particulier, le champ nom de "bonjour" est présent pour obtenir de couleur vert.J'ai essayé ce customdrawcell:

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

Mais il l'habitude de travailler...ce qui me manque ici ?

Était-ce utile?

La solution

N'essayez pas de changer la toile les couleurs dans la Grille.Plutôt--et je trouve cela toujours être vrai-changer les couleurs dans le Vue's OnDrawCell gestionnaire, comme dans cet exemple:

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;

Le cxGrid est juste un conteneur pour les Vues.Les vues sont où la peinture se produit.s

Autres conseils

Utiliser le OnGetContentStyle événement de colonnes ou de l'objet de la grille.Les Styles sont beaucoup plus faciles à travailler que de jouer avec la toile.

Vous avez besoin de regarder les données internes pour chaque vue ligne plutôt que les données de la position actuelle dans le tableau.Également utiliser le canevas fourni dans le OnCustomDrawCell() de l'événement.

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;

Voici un code qui fonctionne à partir d'un programme de la mine, qui fait la même chose.

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 est la grille, et qDockets est la requête en cours est affichée dans la grille.Certaines colonnes peuvent être tirés dans une couleur différente en fonction de la valeur affichée, et dans un cas (qDocketsUrgent = 1), l'ensemble de la ligne de la couleur de fond est changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top