如上图。。上图是易语言里的高级表格直接带的效果。。delphi里测试了多个grid似乎都不好实现。问题如下1:鼠标点击的时候单元格出现一个黑色的单元格边框效果!
2:鼠标单击单元格的时候。。行标头和列标头字体加粗效果!
3:鼠标左键按住移动的时候。移动到哪个单元格,哪个单元格加一个边框线效果。原来单元格效果取消!

解决方案 »

  1.   

    用 Delphi 的 TStringGrid 对象可以实现这些功能。对象有个 OnDrawCell 事件,用来自己绘制表格内容。事件例程有个 Rect 参数,用来确定 Cell 在表格 canvas 所占的区域。禁止表格线后,可以自己在此区域中画单元格框线,写文字,或者填充 Cell 的底色。TCanvas 有足够的方法来完成这些。鼠标点击某个单元格时,OnDrawCell 事件被引发,对应的 Cell 便自动确定,所以点击处理比较简单。鼠标移动需要借助 TStringGrid 的 OnMouseMove 事件。这时获取的是 X 和 Y 坐标值,借助 MouseToCell 方法可以把坐标值转换成 Cell 的行列值。画单元格框线需要一定技巧,这你懂。
      

  2.   

    StringGrid貌似不好实现图上的那个“买号1—10”的单元格合并效果吧
      

  3.   

    可以用AdvStringGrid,不过要自己写重画事件。
      

  4.   


    能否给个简单的例子。。我也有用advsg试过。。网上有下过一个例子。可是编译的时候有很多BUG通不过
      

  5.   


    hongss: 这问题提得好,实现的确有点麻烦。我想还是要从 canvas 下手,把第一个单元格直到最后一个单元格的 Rect 空间连成一片,应该可以实现。当然要先禁止自动框线。TStringGrid 其实就是在 canvas 上写写画画。要是走极端,可以全部自己写代码实现。利用 TStringGrid 省去很多麻烦,但别忘了最终还是 canvas 作业。
      

  6.   


    如果你决定用AdvStringGrid,我可以给你写个例子。
      

  7.   

    好淫荡的头像 cxgrid也可以实现, 显示band行,设置选中样式即可
      

  8.   


    现在就在用advsg在弄呢。研究一晚上也没法很好的实现。。那个焦点单元格总是有虚线。劳烦前辈给弄个简单的例子研究学习下。
      

  9.   

    用stringgrid我有试过去弄这个效果。。合并单元格那个比较麻烦的。那个直接用advstringgrid很容易实现的。
    直接画的也试过。不是很理想。拉动的时候闪的厉害。所以就放弃自己画的想法了
      

  10.   


    AdvStringGrid设置ShowSelection为False,SelectionRectangle为True即可
      

  11.   

    你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色
      

  12.   

    HideFocusRect设置为False就达到你要的效果
      

  13.   


    AdvStringGrid1.Options := AdvStringGrid1.Options - [goRangeSelect];
      

  14.   


    我用的Adv是低版本,没有这个设置功能,Adv里面写死了Canvas.Pen.Width := 2;可能高版本的有设置;
    要么就只能自己写OnDrawCell事件了。
      

  15.   

    或者自己改Adv的源码,改为:Canvas.Pen.Width := 1;