cxgrid行变色

简介:

界面上有一个按钮,点击后cxgrid显示不同数据,当点击按钮取到的记录在另外一张表中存在时则字体显示为红色 
该怎么写,加个标识位,在cxgrid表上 
然后在style中的ongetcontentstyle事件中写处理代码,如下面这样 
  if ARecord is TcxGridDataRow then 
  begin 
    if ARecord.Values[2] = 'Y' then 
      AStyle := DMImpl.cxStyle18; 
  end;

以上代码,点击按钮改变数据后不是马上改变字体 必须要在该行上点击一下才能改变过来

 

procedure TfrmAtt_Operation.grdDataDBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
  inherited;
  if vartostr(ARecord.Values[26])='1' then
    AStyle:=frmDM.cxStyle1;
end;

 

 

---------------------------------------------------------------------------------------------------------------

自画,写在cxGridDBTableView的OnCustomDrawCell事件中:   

  if   (cxGrid1DBTableView1.DataController.DataSet   =   nil)   or   (not   cxGrid1DBTableView1.DataController.DataSet.Active)   then   exit   

  if   (cxGrid1DBTableView1.DataController.DataSet.RecNo   mod   2)   =   0   then   

      ACanvas.Font.Color:=RGB(255,0,255);   

  else   

      ACanvas.Font.Color:=RGB(255,0,0);



=======================================



cxGrid 单元格颜色特效2007年02月03日 星期六 09:48一个表(T)的结构结构如下. 



ID Test 



1 2001 

2 1444 

3 1788 

5 2645 

6 4568 



cxGrid成功连接到该表, 如果要实现单元格特效, 就要在cxGridDBTableView的 OnCustomDrawCell 

写代码. 该事件声明原形为 



type 

TcxGridTableDataCellCustomDrawEvent = procedure(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean) of object; 





参数 Sender: 你要实现特效的TableView; ACanvas: 画布, 这个参数比较重要, 就是用这个参数画出 



特效; AViewInfo: 自定义条件的来源; 从这个参数中获取单元格值; ADone: 设为真就不会Paint. 



下面是以 Test字段的值来控件单元格颜色 



var 

CheckValue: integer; 

cxColumn: TcxGridColumn; 

begin 



cxColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Test'); 

if cxColumn = nil then 

Exit; 



//这个条件用来限制是否只Paint指定的单元格, 去掉则Paint整行. 

if SameText(AViewInfo.Item.Name, cxColumn.Name) then begin 

CheckValue := AViewInfo.GridRecord.Values[gdtvTestTest.Index]; //获取单元格 

//以下是满足条件的字体变色 

if CheckValue >= 4000 then //大于4000为红色 

ACanvas.Font.Color := clRed 

else if CheckValue >= 3000 then //大于3000绿色 

ACanvas.Font.Color := clGreen 

else if CheckValue >= 2000 then //大于2000蓝色 

ACanvas.Font.Color := clBlue; 



//以下是满足条件的数据背景变色 

{if CheckValue >= 4000 then begin //大于4000为红色 

AViewInfo.Focused; 

ACanvas.Brush.Color := clRed 

end 

else if CheckValue >= 3000 then //大于3000绿色 

ACanvas.Brush.Color := clGreen 

else if CheckValue >= 2000 then //大于2000蓝色 

ACanvas.Brush.Color := clBlue; } 



end; 



end; 



------------------------------------------------------------------------------------------

在cxGridDBTableView的OnCustomDrawCell事件中

 

设置行的颜色

var

   ARec: TRect;

begin

   ARec := AViewInfo.Bounds;

   ACanvas.canvas.brush.color:= clGreen;

   ACanvas.FillRect(ARec)

end;

 

设置单元格的颜色

var

   ARec: TRect;

begin

   ARec := AViewInfo.ClientBounds;

   ACanvas.canvas.brush.color:= clGreen;

   ACanvas.FillRect(ARec)

end;

==========================================================

procedure TFm_Rkcx.GD_RkcxBTCustomDrawCell(Sender: TcxCustomGridTableView;



  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;



  var ADone: Boolean);



var ATextToDraw:String;



    ARec: TRect;



begin



  ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];



  ARec := AViewInfo.Bounds;



  if AViewInfo.GridRecord.Values[6]<1000 then



    ACanvas.Canvas.Font.Color := clRed;



  //整行变色:ACanvas.Canvas.brush.color:=clred;  



  {列的颜色交替



    if AViewInfo.Item.Index mod 2 = 0 then



      ACanvas.Canvas.brush.color := clInfoBk



    else



    ACanvas.Canvas.brush.color := clInactiveCaptionText;



  }



  {行的颜色交替



     if AViewInfo.RecordViewInfo.Index mod 2 = 0 then



    ACanvas.Canvas.brush.color := clInfoBk



  else



    ACanvas.Canvas.brush.color := clInactiveCaptionText; 



  } 



  ACanvas.Canvas.FillRect(ARec);



end;











如果第一个字段的值小于125,用红色背景显示,文字为居中显示







procedure TForm1.cxGrid1DBTableView1CustomDrawCell(



 Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;



 AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);



begin



     if StrToInt(AViewInfo.GridRecord.DisplayTexts[0])<125 then



        begin



           ACanvas.Brush.Color:=clRed;



           ACanvas.FillRect(AViewInfo.Bounds);



           ACanvas.DrawText(AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index], AViewInfo.Bounds, cxAlignHCenter);



           ADone:=true;



        end;



end;  



===================================================

如何使满足条件的数据显示不同的颜色?   
  解决:   
  var   
  AYellowStyle:   TcxStyle;   
    
  procedure   TForm1.FormCreate(Sender:   TObject);   
  begin   
    //行颜色   
    AYellowStyle   :=   TcxStyle.Create(Self);   
    AYellowStyle.Color   :=   $0080FFFF;   
    AYellowStyle.TextColor   :=   clMaroon;   
  end;   
    
  procedure   TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(   
  Sender:   TcxCustomGridTableView;   ARecord:   TcxCustomGridRecord;   
  AItem:   TcxCustomGridTableItem;   out   AStyle:   TcxStyle);   
  begin   
     //  这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示黄色  

     if   ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index]   <   81   then    

        AStyle   :=   AYellowStyle;  

     //或者 ARecord.Values[8]   :cxgrid中第8列的值

     if   vartostr(ARecord.Values[8])   ='已审'   then   
        AStyle   :=   AYellowStyle;   

  end;  

 

===========================================================

 

CXGrid控件整行变颜色

 CXGrid控件整行变颜色当某行符合条件的 时候,给它变色:      if notVarIsNull(AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('Status').Index])then    ifAViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('Status').Index]= '选中' then    begin      ACanvas.Canvas.Font.Color := clBlack;     

ACanvas.Brush.Color := clRed;   

end;

 

 

 

-------- 2012-12-18 -----------------------------

procedure TfrmPur_HeJia.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  ARec: TRect;
begin
  inherited;
  {if ADOQuery1.State in dsEditModes then Exit;
  if (AViewInfo.GridRecord.Values[4] <> Null) and (Pos('有误',AViewInfo.GridRecord.Values[4]) > 0) then
  begin
    ACanvas.Brush.Color := clMaroon;
    //ACanvas.Font.Color := clRed;
  end;
  {if ADOQuery1.State in dsEditModes then Exit;
  if Pos('有误',ADOQuery1.FieldByName('品名').AsString) > 0 then
  begin
    ACanvas.Canvas.Font.Color := clRed;
    ARec := AViewInfo.Bounds;
    ACanvas.Canvas.FillRect(ARec);
  end;}
end;

procedure TfrmPur_HeJia.cxGridDBTableView1DBColumn1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  inherited;
  if ADOQuery1.State in dsEditModes then Exit;
  if (AViewInfo.Value <> Null) and (Pos('有误',AViewInfo.Value) > 0) then
  begin
    ACanvas.Brush.Color := clRed;
    //ACanvas.Font.Color := clRed;
  end;
end;

procedure TfrmPur_HeJia.cxGridDBTableView1DBColumnCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  inherited;
  if ADOQuery1.State in dsEditModes then Exit;
  if (AViewInfo.GridRecord.Values[4] <> Null) and (Pos('有误',AViewInfo.GridRecord.Values[4]) > 0) then
  begin
    ACanvas.Brush.Color := clRed;
    //ACanvas.Font.Color := clRed;
  end;
end;














本文转自鹅倌51CTO博客,原文链接http://blog.51cto.com/kaixinbuliao/1793190: ,如需转载请自行联系原作者





相关文章
|
JavaScript
DOM ------ 鼠标滑过表格的行变色效果
DOM ------ 鼠标滑过表格的行变色效果
解决使用BottomSheetDialog时状态栏变黑的问题
注:发现新版本的design库已经没有这个问题,使用以下代码可能会使底部增加一条灰色的条,请注意。 问题描述 当使用support里的design 库里的BottomSheetDialog时,在6.0的机器上当对话框弹出时系统状态栏会变黑,如下图所示: 一开始以为是我用的姿势不对,试过对style配置状态栏颜色,配置其他可能影响到的属性都没成功,今天google了一下,发现应该是BottomSheetDialog本身实现的问题,见:https://code.google.com/p/android/issues/detail?id=202691。
2581 0
|
C++ 安全 Windows
ListCtrl控件着色
最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。 其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。
1005 0