各位大虾看这里,求一个表格效果的实现!

jixiaohai 2013-03-17 07:28:15



如上图。。上图是易语言里的高级表格直接带的效果。。delphi里测试了多个grid似乎都不好实现。问题如下

1:鼠标点击的时候单元格出现一个黑色的单元格边框效果!
2:鼠标单击单元格的时候。。行标头和列标头字体加粗效果!
3:鼠标左键按住移动的时候。移动到哪个单元格,哪个单元格加一个边框线效果。原来单元格效果取消!

...全文
597 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiba7288 2013-03-19
  • 打赏
  • 举报
回复
引用 17 楼 jixiaohai 的回复:
引用 15 楼 feiba7288 的回复:你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色 大部分功能已经实现。。可是鼠标左键按住移动的时候他是多选多个单元格。有没有办法让他只选中当前鼠标在的单元格。原来的单元格恢复默认状态?
AdvStringGrid1.Options := AdvStringGrid1.Options - [goRangeSelect];
jixiaohai 2013-03-19
  • 打赏
  • 举报
回复
引用 21 楼 feiba7288 的回复:
或者自己改Adv的源码,改为:Canvas.Pen.Width := 1;
OK。搞定效果了。多谢前辈不辞辛苦的教导。。解体。结贴了!!
feiba7288 2013-03-19
  • 打赏
  • 举报
回复
或者自己改Adv的源码,改为:Canvas.Pen.Width := 1;
feiba7288 2013-03-19
  • 打赏
  • 举报
回复
引用 19 楼 jixiaohai 的回复:
引用 18 楼 feiba7288 的回复:引用 17 楼 jixiaohai 的回复:引用 15 楼 feiba7288 的回复:你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色 大部分功能已经实现。。可是鼠标左键按住移动的时候他是多选多个单元格。有没有办法让他只选中当前鼠标在的单元格。原来的单元格恢复默认状态? ……
我用的Adv是低版本,没有这个设置功能,Adv里面写死了Canvas.Pen.Width := 2;可能高版本的有设置; 要么就只能自己写OnDrawCell事件了。
jixiaohai 2013-03-19
  • 打赏
  • 举报
回复
引用 18 楼 feiba7288 的回复:
引用 17 楼 jixiaohai 的回复:引用 15 楼 feiba7288 的回复:你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色 大部分功能已经实现。。可是鼠标左键按住移动的时候他是多选多个单元格。有没有办法让他只选中当前鼠标在的单元格。原来的单元格恢复默认状态? AdvStringGrid1.Options……
OK。搞定。最后一个。。线条粗细能否修改为一个像素?直接默认的好粗。。单元格要是小的话就变成一个黑框了
jixiaohai 2013-03-18
  • 打赏
  • 举报
回复
引用 8 楼 jinghai1776 的回复:
楼主,代码很多呀,实难承受,抱歉。你不妨写写试试,碰到难点我会尽力帮助。真写出来,你的所得就不仅是这个表格了。
用stringgrid我有试过去弄这个效果。。合并单元格那个比较麻烦的。那个直接用advstringgrid很容易实现的。 直接画的也试过。不是很理想。拉动的时候闪的厉害。所以就放弃自己画的想法了
jixiaohai 2013-03-18
  • 打赏
  • 举报
回复
引用 9 楼 feiba7288 的回复:
引用 3 楼 jixiaohai 的回复:引用 1 楼 jinghai1776 的回复:用 Delphi 的 TStringGrid 对象可以实现这些功能。对象有个 OnDrawCell 事件,用来自己绘制表格内容。事件例程有个 Rect 参数,用来确定 Cell 在表格 canvas 所占的区域。禁止表格线后,可以自己在此区域中画单元格框线,写文字,或者填充 Cell ……
现在就在用advsg在弄呢。研究一晚上也没法很好的实现。。那个焦点单元格总是有虚线。劳烦前辈给弄个简单的例子研究学习下。
jixiaohai 2013-03-18
  • 打赏
  • 举报
回复
引用 15 楼 feiba7288 的回复:
你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色
大部分功能已经实现。。可是鼠标左键按住移动的时候他是多选多个单元格。有没有办法让他只选中当前鼠标在的单元格。原来的单元格恢复默认状态?
feiba7288 2013-03-18
  • 打赏
  • 举报
回复
引用 3 楼 jixiaohai 的回复:
引用 1 楼 jinghai1776 的回复:用 Delphi 的 TStringGrid 对象可以实现这些功能。对象有个 OnDrawCell 事件,用来自己绘制表格内容。事件例程有个 Rect 参数,用来确定 Cell 在表格 canvas 所占的区域。禁止表格线后,可以自己在此区域中画单元格框线,写文字,或者填充 Cell 的底色。TCanvas 有足够的方法来完成……
如果你决定用AdvStringGrid,我可以给你写个例子。
静_海 2013-03-18
  • 打赏
  • 举报
回复
楼主,代码很多呀,实难承受,抱歉。你不妨写写试试,碰到难点我会尽力帮助。真写出来,你的所得就不仅是这个表格了。
静_海 2013-03-18
  • 打赏
  • 举报
回复
引用 2 楼 hongss 的回复:
StringGrid貌似不好实现图上的那个“买号1—10”的单元格合并效果吧
hongss: 这问题提得好,实现的确有点麻烦。我想还是要从 canvas 下手,把第一个单元格直到最后一个单元格的 Rect 空间连成一片,应该可以实现。当然要先禁止自动框线。 TStringGrid 其实就是在 canvas 上写写画画。要是走极端,可以全部自己写代码实现。利用 TStringGrid 省去很多麻烦,但别忘了最终还是 canvas 作业。
feiba7288 2013-03-18
  • 打赏
  • 举报
回复
HideFocusRect设置为False就达到你要的效果
feiba7288 2013-03-18
  • 打赏
  • 举报
回复
你还可以用SelectionRectangleColor := clGreen设置矩形边框的颜色
jixiaohai 2013-03-17
  • 打赏
  • 举报
回复
引用 5 楼 feiba7288 的回复:
可以用AdvStringGrid,不过要自己写重画事件。
能否给个简单的例子。。我也有用advsg试过。。网上有下过一个例子。可是编译的时候有很多BUG通不过
feiba7288 2013-03-17
  • 打赏
  • 举报
回复
可以用AdvStringGrid,不过要自己写重画事件。
jixiaohai 2013-03-17
  • 打赏
  • 举报
回复
引用 2 楼 hongss 的回复:
StringGrid貌似不好实现图上的那个“买号1—10”的单元格合并效果吧
哪个不需要实现。。主要是我说的那三个问题
jixiaohai 2013-03-17
  • 打赏
  • 举报
回复
引用 1 楼 jinghai1776 的回复:
用 Delphi 的 TStringGrid 对象可以实现这些功能。对象有个 OnDrawCell 事件,用来自己绘制表格内容。事件例程有个 Rect 参数,用来确定 Cell 在表格 canvas 所占的区域。禁止表格线后,可以自己在此区域中画单元格框线,写文字,或者填充 Cell 的底色。TCanvas 有足够的方法来完成这些。 鼠标点击某个单元格时,OnDra……
大侠能否给个简单的例子。。简单的实现就好了。我自己画总是画的不太理想。前面两个我无法实现的很理想。。第三个方法我是直接就实现不了。。能力有限!
hongss 2013-03-17
  • 打赏
  • 举报
回复
StringGrid貌似不好实现图上的那个“买号1—10”的单元格合并效果吧
静_海 2013-03-17
  • 打赏
  • 举报
回复
用 Delphi 的 TStringGrid 对象可以实现这些功能。对象有个 OnDrawCell 事件,用来自己绘制表格内容。事件例程有个 Rect 参数,用来确定 Cell 在表格 canvas 所占的区域。禁止表格线后,可以自己在此区域中画单元格框线,写文字,或者填充 Cell 的底色。TCanvas 有足够的方法来完成这些。 鼠标点击某个单元格时,OnDrawCell 事件被引发,对应的 Cell 便自动确定,所以点击处理比较简单。鼠标移动需要借助 TStringGrid 的 OnMouseMove 事件。这时获取的是 X 和 Y 坐标值,借助 MouseToCell 方法可以把坐标值转换成 Cell 的行列值。 画单元格框线需要一定技巧,这你懂。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧