VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 20253|回复: 35

[分享] 表格控件第三版

[复制链接]
发表于 2012-7-26 23:14:16 | 显示全部楼层 |阅读模式
这次更新的内容不多,多了删除行删除列功能,调整行列的宽度高度值功能,插入功能,但极其耗费精力。因为要考虑到合并单元格,比如删除的行贯穿合并单元格中间,插入的值贯穿合并单元格中间,要调整的行列贯穿合并的单元格,使得这三个操作复杂起来。写表格控件真累,这次不打算更新了。一来精力能力有限,二来确实没什么思路写下去了。有心的人根据这个框架应该还能再写下去。 自制表格控件第三版(20120726).rar (208.53 KB, 下载次数: 820)

点评

我覺得真的新增不多,不過還是謝謝tom789大大的更新~~!! 也謝謝tom789大大的開源~~!! ^0^  发表于 2012-7-27 13:42

评分

参与人数 4威望 +12 人气 +7 收起 理由
ctctuozi + 1 很给力
luoxibin + 2 + 1 很给力,楼主不错
students1 + 8 + 3 赞一个!
Jen + 2 + 2 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

头像被屏蔽
发表于 2012-7-27 08:09:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2012-7-27 17:21:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-27 17:31:17 | 显示全部楼层
麻烦肯定的,我都着磨好久才动手的,也不知有没有bug。加油哈哈。
回复 支持 反对

使用道具 举报

发表于 2012-12-12 17:29:49 | 显示全部楼层
支持进一步更新使其实用化。像Flexcell一样棒。

点评

Jen
Flexcell 链接:www.grid2000.com  发表于 2013-1-9 13:45
回复 支持 反对

使用道具 举报

发表于 2013-1-10 14:20:37 | 显示全部楼层
很好的资料

评分

参与人数 1人气 +1 收起 理由
Jen + 1 很给力!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-1-16 21:56:48 | 显示全部楼层
本帖最后由 Jen 于 2013-1-16 22:01 编辑

你的画分割线相关的编码(pDrawTmpLine)可能会导致内存泄露,闪烁很厉害,写的比较随便。100ms的间隔会减少闪烁,但可能导致不能Pixel to Pixel改变。
Excel的分割线就不闪。Flexcell的分割线也不闪,而且最小改变是Pixel为单位。不知道是怎样做到的。

flexcell_resizeline.png
  1. ScreenDC = GetDC(0)
  2.     OldDrawMode = SetROP2(ScreenDC, R2_XORPEN)
  3.     hPen = CreatePen(0, 4, RGB(150, 150, 150))
  4.     hOldPen = SelectObject(ScreenDC, hPen)


  5.     Case WM_MOUSEMOVE
  6.         '100毫秒响应一次消息
  7.         If GetTickCount - t < 100 Then
  8.             SetROP2 ScreenDC, OldDrawMode
  9.             SelectObject ScreenDC, hOldPen
  10.             DeleteObject hPen
  11.             ReleaseDC 0, ScreenDC
  12.             Exit Sub
  13.         Else
  14.             t = GetTickCount
  15.         End If
  16.         
  17. ‘。。。
  18. Call pDrawTmpLine(ScreenDC, p1.x, p1.y, p2.x, p2.y)    '擦除线
  19. ’。。。
  20. Call pDrawTmpLine(ScreenDC, p1.x, p1.y, p2.x, p2.y)    '擦除线


  21.     SetROP2 ScreenDC, OldDrawMode
  22.     SelectObject ScreenDC, hOldPen
  23.     DeleteObject hPen
  24.     ReleaseDC 0, ScreenDC
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-16 23:39:58 | 显示全部楼层
Jen 发表于 2013-1-16 21:56
你的画分割线相关的编码(pDrawTmpLine)可能会导致内存泄露,闪烁很厉害,写的比较随便。100ms的间隔会减少 ...

你还在研究表格控件啊,真正实用的表格控件太难写了,有时间还是研究其它控件吧...那个写滴答表格控件的人写了六年多...可见确实不简单
回复 支持 反对

使用道具 举报

发表于 2013-1-17 01:07:29 | 显示全部楼层
tom789 发表于 2013-1-16 23:39
你还在研究表格控件啊,真正实用的表格控件太难写了,有时间还是研究其它控件吧...那个写滴答表格控件的人写 ...


是很难。不会写的,也没有能力写。只是感兴趣而已。
在屏幕上画线而不是在UC上画,画下一条线,再擦上条线,怎样才能不闪? @jjcsoft 你怎么看?

点评

常见的程序貌似是用位图画刷+PatBlt做的  发表于 2013-1-17 19:16
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-17 08:06:37 | 显示全部楼层

RE: 表格控件第三版

Jen 发表于 2013-1-17 01:07
是很难。不会写的,也没有能力写。只是感兴趣而已。
在屏幕上画线而不是在UC上画,画下一条线,再擦上 ...

说下我的思路。当改变列宽度时,时时记录分割线横坐标,同时设置一个布尔变量用于指示当前正在改变宽度,注意在需要的时候复位其值。紧着在重画过程中就跟句布尔变量的不同画控件。为假正常画,为真,只画分隔线。你可以试看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-25 15:29

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表