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版本下调试没问题,哈。
即兴写的,如果有的属性写错了,你自己调整一下吧。