老软件工程师都被卡住了,相当有难度的Delphi的DBGrid有关问题
老程序员都被卡住了,相当有难度的Delphi的DBGrid问题

遇到个客户,要求在grid报表里面划连接线,还找了个类似图给我看,就是上图。我在DBGrid里面找了半天也没有找有相应的事件,后来又考虑用dbgrideh或是DBAdvGrid或是AdvStringGrid,都没有找到办法,有办法的员友们给我支支招,感谢了。
------解决思路----------------------
1.override draw cell 的方法,绘图红底圆白底字。
2.override paint方法,在下面写绘制连线的代码。
------解决思路----------------------
------解决思路----------------------
这个方法可行。 DBGrid 是从TCustomControl继承过来的。 覆盖Paint方法, 在最后面加上画连接线的代码
------解决思路----------------------
每次绘制时,按你既定规则定位指定内容所在Cell位置,并按行顺序依次记录。
事实上控件基类TCustomGrid已经有提供VisibleRowCount表明当前网格可见记录数,以及 TopRow表示可视区域第一条的记录行号。
TopRow的基类中位于protected保护域中,但仍然有办法访问的。
结合上面两个属性,可以将处理内容缩小到可视区域,绘制效率也比较高。
遇到个客户,要求在grid报表里面划连接线,还找了个类似图给我看,就是上图。我在DBGrid里面找了半天也没有找有相应的事件,后来又考虑用dbgrideh或是DBAdvGrid或是AdvStringGrid,都没有找到办法,有办法的员友们给我支支招,感谢了。
------解决思路----------------------
1.override draw cell 的方法,绘图红底圆白底字。
2.override paint方法,在下面写绘制连线的代码。
------解决思路----------------------
------解决思路----------------------
这个方法可行。 DBGrid 是从TCustomControl继承过来的。 覆盖Paint方法, 在最后面加上画连接线的代码
------解决思路----------------------
每次绘制时,按你既定规则定位指定内容所在Cell位置,并按行顺序依次记录。
事实上控件基类TCustomGrid已经有提供VisibleRowCount表明当前网格可见记录数,以及 TopRow表示可视区域第一条的记录行号。
TopRow的基类中位于protected保护域中,但仍然有办法访问的。
结合上面两个属性,可以将处理内容缩小到可视区域,绘制效率也比较高。