搜索
查看: 1308|回复: 3

listview画每行边框的方法

[复制链接]

35

主题

166

帖子

968

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

积分
968
发表于 2018-2-9 16:05:40 | 显示全部楼层 |阅读模式
QQ图片20180209160442.png
下面的代码

有个问题: 为什么最后一行没有外边框啊, 还有如果我鼠标来回点击每个行, 然后会发现偶尔有些时候边框就没了???

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=945;bottom=474)
  4. winform.add(
  5. 流程编辑框={cls="listview";left=0;top=0;right=946;bottom=350;edge=1;font=LOGFONT(name='FontAwesome';h=-19);fullRow=1;z=1}
  6. )
  7. /*}}*/

  8. import win.fontAwesome;
  9. import win.graphics;
  10. import win.imageList;
  11. var imagelist = win.imageList(5,34);
  12. winform.流程编辑框.setImageList( imagelist,1/*_LVSIL_SMALL*/ );
  13. winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/)
  14. winform.流程编辑框.insertColumn("中断",80,,0x2/*_LVCFMT_CENTER*/)
  15. winform.流程编辑框.insertColumn("备注",300,,0x0/*_LVCFMT_LEFT*/)
  16. winform.流程编辑框.insertColumn("功能",100,,0x0/*_LVCFMT_LEFT*/)
  17. winform.流程编辑框.insertColumn("参数",300,,0x0/*_LVCFMT_LEFT*/)
  18. winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/)
  19. //自适应列宽度
  20. winform.流程编辑框.adjust = function(cx,cy){
  21.     winform.流程编辑框.fillParent(5/*列序号*/);
  22. }
  23. winform.流程编辑框.addItem( {
  24.         text={'\uF00c';'\uF1db';"X轴前进到对准位置";"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'}
  25. } )
  26. winform.流程编辑框.addItem( {
  27.         text={'\uF00d';'\uF05e';"Z轴缓慢前进";"直线运动";'{["速度"]=300;["模式"]="连续运动";["是否等待"]="是";}';'\uF01a'}
  28. } )
  29. winform.流程编辑框.addItem( {
  30.         text={'\uF00c';'\uF1db';"连续读传感器值直到大于0.8";"调用子程序";'{["调用子程序"]="连续读传感器";["是否等待"]="是";}';'\uF01a'}
  31. } )
  32. winform.流程编辑框.addItem( {
  33.         text={'\uF00c';'\uF1db';"对准操作";"调用子程序";'{["调用子程序"]="回字形对准算法";["是否等待"]="是";}';'\uF01a'}
  34. } )


  35. //自绘
  36. winform.流程编辑框.onnotify = function(id,code,ptr){
  37.         if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){
  38.                 var lvcd = winform.流程编辑框.getNotifyCustomDraw(code,ptr);
  39.                 if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/)
  40.                         return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/
  41.                 elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){
  42.                         return 0x20/*_CDRF_NOTIFYITEMDRAW*/;
  43.                 }
  44.                 elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){
  45.                         //注意这里 iSubItem 的索引自0开始( 其他函数通常自1开始 )
  46.                        
  47.                         var cvs = win.graphics.canvas(); // 创建一个画布
  48.                     cvs.fromHDC(lvcd.nmcd.hdc); // 传入 hDC
  49.                     var nItem = lvcd.nmcd.dwItemSpec;
  50.                     var nSubItem = lvcd.iSubItem;
  51.                     var rc = owner.getItemRect(nItem,nSubItem);
  52.                     cvs.pen.color = 0xebebeb; // 定义画笔的颜色
  53.                     cvs.drawEdge(rc);
  54.                         lvcd.update()
  55.                         cvs.destroy();
  56.                         return 0/*_CDRF_DODEFAULT*/
  57.                 }
  58.         }
  59. }



  60. winform.show()
  61. win.loopMessage();
复制代码
!
回复

使用道具 举报

35

主题

166

帖子

968

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

积分
968
 楼主| 发表于 2018-2-9 16:24:17 | 显示全部楼层
用下面的代码替换画edge可以实现画任意颜色
  1. cvs.pen.color = 0xff0000//0xebebeb; // 定义画笔的颜色
  2.                     //cvs.drawEdge(rc);
  3.                     //左上到右上
  4.                     cvs.moveTo(rc.left, rc.top); // 落笔
  5.                 cvs.lineTo(rc.right, rc.top); // 提笔
  6.                     //右上到右下
  7.                     cvs.moveTo(rc.right, rc.top); // 落笔
  8.                 cvs.lineTo(rc.right, rc.bottom); // 提笔
  9.                     //右下到左下
  10.                     cvs.moveTo(rc.right, rc.bottom); // 落笔
  11.                 cvs.lineTo(rc.left, rc.bottom); // 提笔
  12.                 //左下到左上
  13.                     cvs.moveTo(rc.left, rc.bottom); // 落笔
  14.                 cvs.lineTo(rc.left, rc.top); // 提笔
  15.                
复制代码
!
回复

使用道具 举报

35

主题

166

帖子

968

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

积分
968
 楼主| 发表于 2018-4-28 01:00:13 | 显示全部楼层
找到上面发生问题的地方了. 原来是操作的行号不对, 稍加修改即可.
将自绘的那个代码修改为
  1. //自绘
  2. winform.流程编辑框.onnotify = function(id,code,ptr){
  3.         if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){
  4.                 var lvcd = winform.流程编辑框.getNotifyCustomDraw(code,ptr);
  5.                 console.log( "------------------------" )
  6.                 console.log( lvcd.nmcd.dwDrawStage )
  7.                 if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/){
  8.                         return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/
  9.                 }
  10.                 elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){
  11.                         return 0x20/*_CDRF_NOTIFYITEMDRAW*/;
  12.                 }
  13.                 elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){
  14.                         //注意这里 iSubItem 的索引自0开始( 其他函数通常自1开始 )
  15.                         
  16.                     var cvs = win.graphics.canvas(); // 创建一个画布
  17.                     cvs.fromHDC(lvcd.nmcd.hdc); // 传入 hDC
  18.                     var nItem = lvcd.nmcd.dwItemSpec+1;
  19.                     var nSubItem = lvcd.iSubItem;
  20.                     
  21.                     var rc = owner.getItemRect(nItem,nSubItem);
  22.                     cvs.pen.color = 0xebebeb; // 定义画笔的颜色
  23.                     cvs.drawEdge(rc);
  24.                     lvcd.update()
  25.                         
  26.                     cvs.destroy();
  27.                     return 0/*_CDRF_DODEFAULT*/
  28.                 }
  29.         }
复制代码

运行后结果如下:

这次拖动和点击都不会产生上述问题了.

但是   最后一列怎么就没有边框了呢? 我又试着给var nSubItem = lvcd.iSubItem;增加+1 , 发现应该不是这个问题,+1之后一个边框都不显示了. 晕, 论坛里有人研究过没?

点评

这个用IE组件都很方便啊,只是弄个边框,不需要啥html5特性  发表于 2018-4-28 11:43
!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-8-19 23:53 , Processed in 0.062500 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表