让DBGrid控件能够隔行上色

    技术2022-05-11  80

    让Delphi的DBGrid控件能够在显示的时候可以用不同的颜色区分相邻的记录行,实现办法:  (1)把DBGrid的DefaultDriawing属性设为False;  (2)把DBGrid的Option—>dgRowSelect属性设为True,可以实现选中行行变色;设为False选中单元格变色;  (3)使用如下代码实现: procedure TExample.DBGrid1DrawColumnCell(Sender: TObject;  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);     {在表格的DrawColumnCell事件中实现 } var    iColumn:Integer;  {列循环控制}    iRect:Integer;  {行循环控制} begin   if Odd((Sender as TDBGrid).DataSource.DataSet.RecNo + 1) then     {隔行变色实现}   begin     (Sender as TDBGrid).Canvas.Brush.Color := $00FEC8FF;     (Sender as TDBGrid).Canvas.Font.Color := clBlack;   end;   if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) then   {设置当前所选单元格颜色}    begin     (Sender as TDBGrid).Canvas.Brush.Color := clSkyBlue;     (Sender as TDBGrid).Canvas.Font.Color := clBlack;   end;   with (Sender as TDBGrid).Canvas do  {重画Cell(单元格)的边框}   begin     Pen.Color := clSilver;   {画笔的颜色}     MoveTo(Rect.Right, Rect.Top);   {定位画笔}     LineTo(Rect.Right, Rect.Bottom);    {画竖线}     Pen.Color := clActiveCaption;    {画笔的颜色}     MoveTo(Rect.Left, Rect.Bottom);   {定位画笔}     LineTo(Rect.Right, Rect.Bottom);    {画横线}  (Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State); {生效} end; end;

    最新回复(0)