문제

특히 특정 필드 이름이 'Hello'가있는 곳에있는 모든 행을 원합니다. 초록.나는 customdrawcell에서 이것을 시도했다 :

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

하지만 작동하지 않습니다 ... 여기에 누락 된

도움이 되었습니까?

해결책

그리드에서 캔버스 색을 변경하려고하지 마십시오.오히려 - 항상 이 예제에서 onDrawCell 핸들러에서 색상을 변경합니다.

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;
.

cxGrid는 뷰를위한 컨테이너 일뿐입니다.뷰는 모든 그림이 발생하는 곳입니다. s

다른 팁

개별 열 또는 그리드 객체에 대해 OnGetContentStyle 이벤트를 사용하십시오.스타일은 캔버스로 엉망이되는 것보다 훨씬 쉽게 작동합니다.

테이블의 현재 위치의 데이터가 아니라 각 뷰 행에 대한 내부 데이터를 볼 필요가 있습니다.또한 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;
.

여기에 무언가가 비슷한 것의 프로그램에서 일하는 코드가 있습니다.

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는 그리드이며 qdockets는 그리드 내에 쿼리가 표시되는 것입니다.표시되는 값에 따라 특정 열이 다른 색상으로 그려 질 수 있으며, 한 경우 (QDocketSurnent= 1), 전체 선의 배경색이 변경됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top