DBGridEh设置选中行的颜色,查了3天,一脸懵逼,我能找到网上的全是错误的,或许是我的版本太高了,不支持。尤其是参数State总是提示错误,类型不符。

点击单元格,或者单元格获得焦点后,整行被指定的颜色覆盖(如果是设置内容颜色,你自己选择font),正确的也是简单的写法(我最烦动不动就一大篇实现一个简单的功能)。

一、设置光标所在行的颜色

在getcellparams事件中

if DBgrideh1.row=Dbgrideh.sumlist.recno+1 then
backgrond:=clskyblue;  //或者你喜欢的颜色

就这么简单,网上使用

DBGridEh1.Canvas.Font.Color := clRed;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

的全是错误的(在delphi xe10.2版本下),版本7可能会没问题,DBgrid也许能用,但10用不了,控件不是一个类型。

也不要用optioneh中的dgrowselect,这会导致你不能编辑单元格。

------

2018.5.2后续补充

GridsEh.TGridDrawState(State)强制转换类型后,方法就可用了。

------

2018.5.29后续补充

上面的if then语句有些问题,在DBGridEHl的第一页中光条显示正常,但超过表格的最大显示行数后,显示异常。

使用

if Dbgrideh.sumlist.recno=dbgrideh.datarowtorecno(dbgrideh.row)-1 then

则可以正常显示

------

二、设置列的内容的颜色

在drawcolumecell事件中写:

dbgrideh1.columns[n].font.colr:=你喜欢的颜色;

为什么列使用内容颜色,因为你要设置列颜色,会一直延伸到最底下,即使没有数据也会显示,很难看。设置内容,空白处不显示。

三、设置虚线格式的网格状态

在drawdatacell事件中:

DBgrideh1.canvas.drawfocusrect(rect);

自己看看效果吧,还不错。

以上在delphi xe10.2版本下调试没问题,哈。

即兴写的,如果有的属性写错了,你自己调整一下吧。