搜索
查看: 1141|回复: 4

总结:listview获取系统目录和图标的两种写法

[复制链接]

39

主题

174

帖子

1037

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1037
发表于 2017-11-8 11:01:32 | 显示全部楼层 |阅读模式
本帖最后由 popdes 于 2017-11-8 11:27 编辑

如题:
功能比较简单, 写给自己 与 自己一样的新人.
功能: 获取系统目录和图标,显示在listview

本来是想能不能显示到listbox控件里, 但是发现listbox是没有imagelist属性的,
Jacen发的有个用treeview树形控件实现explore的代码, 于是想能不能移植到listview中....
昨晚弄了一晚,奈何技术不行,也没弄出个所以然来. 后面慢慢实验, 如果移植出来了也分享出来, 先总结个最基础的代码...

QQ截图20171108105539.png
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="listview获取系统图标列表";right=783;bottom=583;bgcolor=12213772;parent=...)
  4. winform.add(
  5. listview={cls="listview";left=16;top=110;right=373;bottom=556;db=1;dl=1;dr=1;dt=1;edge=1;vscroll=1;z=1};
  6. listview2={cls="listview";left=407;top=109;right=764;bottom=555;db=1;dl=1;dr=1;dt=1;edge=1;vscroll=1;z=2};
  7. static={cls="static";text="方式一";left=24;top=64;right=214;bottom=97;color=16777215;font=LOGFONT(h=-29);transparent=1;z=3};
  8. static2={cls="static";text="方式二";left=411;top=71;right=601;bottom=104;color=16777215;font=LOGFONT(h=-29);transparent=1;z=4}
  9. )
  10. /*}}*/

  11. import fsys;
  12. import fsys.lnk;
  13. import fsys.info;
  14. //获取系统图标列表

  15. //移除列标题
  16. winform.listview.modifyStyle(,0x4000/*_LVS_NOCOLUMNHEADER*/)
  17. winform.listview.insertColumn("1",-1)
  18. winform.listview2.modifyStyle(,0x4000/*_LVS_NOCOLUMNHEADER*/)
  19. winform.listview2.insertColumn("1",-1)   
  20. //win.ui.explorer
  21. import win.imageList;
  22. shImageList = win.imageList.shell( 0/*_SHIL_LARGE*/  )
  23. winform.listview.setImageList( shImageList,1/*_LVSIL_NORMAL*/ )
  24. winform.listview2.setImageList( shImageList,1/*_LVSIL_NORMAL*/ )

  25. //方式一
  26. files,,dirs = ..fsys.list("C:\Users\Administrator\Desktop");
  27. var filename;
  28. var getInfo = ..fsys.info.get;
  29. var toUnicode = ..string.toUnicode;
  30. for(i=1;#files){
  31.                 filename = files[i];
  32.                 var sfi = getInfo(files[filename]    ,0x10/*_SHGFI_USEFILEATTRIBUTES*/ | 0x4000/*_SHGFI_SYSICONINDEX*/);
  33.                 winform.listview.addItem( {
  34.                             text = toUnicode(filename);
  35.                             iImage = sfi.iIcon;
  36.                     } )
  37.                }


  38. //方式二
  39. var lnk = fsys.lnk();
  40. fsys.enum( fsys.getSpecial(0 /*_CSIDL_DESKTOP*/ ) , "*.*",
  41.         function(dir,filename,fullpath,findData){
  42.                 if(filename){
  43.                   // lnk.load(fullpath);//加载快捷方式
  44.                    //console.log("快捷方式:"+filename, "实际路径:"+lnk.path )
  45.                    //路径如果用filename,得到的图标中快捷方式会没图标
  46.                    //var sfi = fsys.info.get(filename, 0x4000/*_SHGFI_SYSICONINDEX*/ | 0x10/*_SHGFI_DISPLAYNAME*/)
  47.                    var sfi = fsys.info.get(fullpath, 0x4000/*_SHGFI_SYSICONINDEX*/ | 0x10/*_SHGFI_DISPLAYNAME*/)
  48.                    //显示图标
  49.                     winform.listview2.addItem( {
  50.                             text = filename;//sfi.szDisplayName;不显示后缀
  51.                             iImage = sfi.iIcon;
  52.                     } )
  53.                 }
  54.         },false
  55. );


  56. winform.enableDpiScaling();
  57. winform.show();

  58. win.loopMessage();
  59. return winform;
复制代码

! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

2

主题

11

帖子

108

积分

培训班

积分
108
发表于 2017-11-13 10:53:55 | 显示全部楼层
不错,感谢分享!
回复

使用道具 举报

0

主题

7

帖子

48

积分

新手入门

Rank: 1

积分
48
发表于 2017-11-17 09:32:46 | 显示全部楼层
真是太感謝了, 很嫩的新手 正在學習中

請問一下 : 要如何將 listview 中的 item 一次全部刪除  ?   雖然我看了 庫  中有 [0xFFFFFF98/*_LVN_DELETEALLITEMS*/]  的描述, 還是不知道如何使用

還請惠賜範例
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-17 12:41:49 | 显示全部楼层
tea2017 发表于 2017-11-17 09:32
真是太感謝了, 很嫩的新手 正在學習中

請問一下 : 要如何將 listview 中的 item 一次全部刪除  ...

winform.listview.clear() 就可以了,库函数文档里有的。
其实在几乎所有清空的函数,基本都是叫 clear() ,要不就是 removeAll等等,写多了就不困惑了。
回复

使用道具 举报

0

主题

7

帖子

48

积分

新手入门

Rank: 1

积分
48
发表于 2017-11-17 13:33:38 | 显示全部楼层
Jacen.He 发表于 2017-11-17 12:41
winform.listview.clear() 就可以了,库函数文档里有的。
其实在几乎所有清空的函数,基本都是叫 clear( ...

真是感謝有你 !
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-12-15 17:55 , Processed in 0.078125 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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