aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 22444|回复: 4

玩listview自绘之内置进度条

[复制链接]

38

主题

129

回帖

1045

积分

荣誉会员

积分
1045
发表于 2018-4-28 23:48:22 | 显示全部楼层 |阅读模式
有时候listview中可能需要一个进度条显示, 于是我们可以根据listview自绘中操作列值进行设置,演示代码如下:

QQ截图20180428234726.jpg

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="listview中添加进度条演示";right=945;bottom=474)
  4. winform.add(
  5. button={cls="button";text="(点击这里随机更新一次第二行的进度值)";left=0;top=392;right=944;bottom=472;font=LOGFONT(h=-21);z=2};
  6. 流程编辑框={cls="listview";left=0;top=0;right=946;bottom=384;edge=1;font=LOGFONT(name='FontAwesome';h=-19);fullRow=1;vscroll=1;z=1}
  7. )
  8. /*}}*/

  9. import win.fontAwesome;
  10. import win.graphics;
  11. import win.imageList;
  12. var imagelist = win.imageList(5,34);
  13. winform.流程编辑框.setImageList( imagelist,1/*_LVSIL_SMALL*/ );
  14. winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/)
  15. winform.流程编辑框.insertColumn("中断",80,,0x2/*_LVCFMT_CENTER*/)
  16. winform.流程编辑框.insertColumn("备注",300,,0x0/*_LVCFMT_LEFT*/)
  17. winform.流程编辑框.insertColumn("功能",100,,0x0/*_LVCFMT_LEFT*/)
  18. winform.流程编辑框.insertColumn("参数",300,,0x0/*_LVCFMT_LEFT*/)
  19. winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/)
  20. winform.流程编辑框.insertColumn("",1,,0x2/*_LVCFMT_CENTER*/)
  21. //自适应列宽度
  22. winform.流程编辑框.adjust = function(cx,cy){
  23.     winform.流程编辑框.fillParent(5/*列序号*/);
  24. }


  25. winform.流程编辑框.addItem( {
  26.         text={'\uF00c';'\uF1db';30;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'}
  27. } )
  28. winform.流程编辑框.addItem( {
  29.         text={'\uF00d';'\uF05e';100;"直线运动";'{["速度"]=300;["模式"]="连续运动";["是否等待"]="是";}';'\uF01a'}
  30. } )
  31. winform.流程编辑框.addItem( {
  32.         text={'\uF00c';'\uF1db';200;"调用子程序";'{["调用子程序"]="连续读传感器";["是否等待"]="是";}';'\uF01a'}
  33. } )
  34. winform.流程编辑框.addItem( {
  35.         text={'\uF00c';'\uF1db';50;"调用子程序";'{["调用子程序"]="回字形对准算法";["是否等待"]="是";}';'\uF01a'}
  36. } )
  37. winform.流程编辑框.addItem( {
  38.         text={'\uF00c';'\uF1db';150;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'}
  39. } )
  40. winform.流程编辑框.addItem( {
  41.         text={'\uF00c';'\uF1db';120;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'}
  42. } )
  43. winform.流程编辑框.addItem( {
  44.         text={'\uF00d';'\uF05e';10;"直线运动";'{["速度"]=300;["模式"]="连续运动";["是否等待"]="是";}';'\uF01a'}
  45. } )
  46. winform.流程编辑框.addItem( {
  47.         text={'\uF00c';'\uF1db';70;"调用子程序";'{["调用子程序"]="连续读传感器";["是否等待"]="是";}';'\uF01a'}
  48. } )
  49. winform.流程编辑框.addItem( {
  50.         text={'\uF00c';'\uF1db';260;"调用子程序";'{["调用子程序"]="回字形对准算法";["是否等待"]="是";}';'\uF01a'}
  51. } )
  52. winform.流程编辑框.addItem( {
  53.         text={'\uF00c';'\uF1db';130;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'}
  54. } )

  55. //自绘
  56. winform.流程编辑框.onnotify = function(id,code,ptr){
  57.         if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){
  58.                 var lvcd = winform.流程编辑框.getNotifyCustomDraw(code,ptr);
  59.                 if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/)
  60.                         return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/
  61.                 elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){
  62.                         return 0x20/*_CDRF_NOTIFYITEMDRAW*/;
  63.                 }
  64.                 elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){
  65.                         //注意这里 iSubItem 的索引自0开始( 其他函数通常自1开始 )
  66.                         
  67.                         var cvs = win.graphics.canvas(); // 创建一个画布
  68.                     cvs.fromHDC(lvcd.nmcd.hdc); // 传入 hDC
  69.                     var nItem = lvcd.nmcd.dwItemSpec+1;
  70.                     var nSubItem = lvcd.iSubItem;
  71.                     var rc = owner.getItemRect(nItem,nSubItem);
  72.                     if(nSubItem == 3){
  73.                            
  74.                             var RetRc = ::RECT(rc.left+1,rc.top+6,rc.right-tonumber(owner.getItemText(nItem,3)),rc.bottom-6);
  75.                             cvs.brush.color = 0x00ff00;
  76.                             cvs.fillRect(RetRc)
  77.                                    
  78.                     }
  79.                     cvs.pen.color = 0xebebeb; // 定义画笔的颜色
  80.                     cvs.drawEdge(rc);
  81.                         
  82.                     lvcd.update()
  83.                     cvs.destroy();
  84.                     
  85.                     return 0/*_CDRF_DODEFAULT*/
  86.                 }
  87.         }
  88. }
  89. //演示更新进度
  90. winform.button.oncommand = function(id,event){
  91.         winform.流程编辑框.setItemText(tostring(math.random(10,280)),2,3);
  92. }

  93. winform.show()
  94. win.loopMessage();
复制代码

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-4-29 03:57:23 | 显示全部楼层
感谢分享,这都看不出来是系统的listview控件了,很好的例子!

5

主题

7

回帖

183

积分

一级会员

积分
183
发表于 2018-4-29 10:40:50 | 显示全部楼层
Jacen.He 发表于 2018-4-29 03:57
感谢分享,这都看不出来是系统的listview控件了,很好的例子!



Jacen,代码复制到编辑器里很多时候变这样了。
我这win10系统

点评

手动复制就没事了  发表于 2018-4-29 12:26

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-4-29 14:32:53 | 显示全部楼层
dsp2138 发表于 2018-4-29 10:40
Jacen,代码复制到编辑器里很多时候变这样了。
我这win10系统
编辑器已经把有问题的空格标红提示了,遇到这种替换一下吧。
复制的时候,不要点discuz论坛的那个【复制代码】按钮,直接自己复制我试了没这个问题。

大家在论坛发代码的时候,也可以直接在aardio编辑器里右键点代码,点“复制全部到HTML” ,然后粘贴到论坛就没这个问题了。

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

本版积分规则

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

GMT+8, 2024-10-4 19:23 , Processed in 0.065806 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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