delphi取得文件图标并在TListView中显示

2023-11-18

{delphi取得文件图标并在TListView中显示
技术要点:
  一、使用SHGetFileInfo函数获取指定扩展名的文件图标。需要引用ShellAPI单元。
  二、使用TStringList来保存扩展名与其图标的索引号。当添加一个文件名至TListView后,
我们已经取得了其图标,再次添加同样扩展名的文件时,不需再次获取其图标,只要从该TStringList中取得其图标索引号即可}

uses
  ShellAPI;

var
  IconList:TStringList;

{ 实现获取图标及将图标添加到TImageList中的过程 }
procedure ListView_SetItemImageIndex(Item: TListItem);
var
  nIndex:Integer;
  Icon:TIcon;
  fileName:string;
  extName:string;
  sinfo:SHFILEINFO;
begin
  if TListView(Item.ListView).SmallImages<>nil then
  begin
    fileName:=Item.Caption;
    extName:=ExtractFileExt(fileName);
    nIndex:=IconList.IndexOf(extName);
    if nIndex>-1 then
    begin
      nIndex:=Integer(IconList.Objects[nIndex]);
      Item.ImageIndex:=nIndex;
    end else
    begin
      FillChar(sinfo, SizeOf(sinfo),0);
      SHGetFileInfo(PChar(extName),FILE_ATTRIBUTE_NORMAL,sinfo,SizeOf(sInfo),
                    SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON);
      if sinfo.hIcon>0 then
      begin
        Icon:=TIcon.Create;
        Icon.Handle:=sinfo.hIcon;
        nIndex:=TListView(Item.ListView).SmallImages.AddIcon(Icon);
        Icon.Free;
        Item.ImageIndex:=nIndex;
        IconList.AddObject(extName,TObject(nIndex));
      end;
    end;
  end;
end;

{ 测试过程 }
procedure TForm1.Button1Click(Sender: TObject);
var
  Item:TListItem;
begin
  Item:=ListView1.Items.Add;
  Item.Caption:=‘c:\test.jpg‘;
  ListView_SetItemImageIndex(Item);
end;

{ 对IconList进行初始化及释放 }
initialization
  IconList:=TStringList.Create;
finalization
  IconList.Free;
end.  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

delphi取得文件图标并在TListView中显示 的相关文章

  • 如何替换 TabAdapter 中选项卡之一的片段?

    虽然我意识到嵌套片段不是一个选择 但我仍然有一个问题 我根本无法找出答案 我正在使用 ActionBarSherlock 的 FragmentsTabPager 示例创建一个界面 在该界面中可以通过滑动而不是单击选项卡来翻阅选项卡 我的问题
  • 如何向 ListView 添加粘性标题?

    我有一个 listView 所以我想添加一个粘性标头 以便它粘在 listView 的顶部 当 listView 中开始不同的类别时 不同的标头会取代它 就像联系人一样 其中 a 为粘性标头位于顶部 直到 b 出现 有没有图书馆可以做 我正
  • 应如何在 WinForms GUI 控件和客户端类之间同步数据?

    什么方法被认为是保持 GUI 控件内的数据结构与应用程序维护的数据结构同步的 标准 例如 在 WinForms 中 如果创建一个 ListView 实例 而不是将其指向表示要出现在列表中的项目的数据结构 则必须以编程方式实例化 ListVi
  • 如何在Android中为很长的列表视图上方设置浮动操作按钮的固定位置?

    我正在开发一个 Android 应用程序 主要用于listview 但我在使用时遇到问题Floating Action Button和 一起Long ListView 我的问题如下 当列表视图只有几个项目时 Floating item看得到
  • android listactivity onCheckedChangeListener

    我正在开发一款应用程序 并且我有一个ListActivity 其选择模式设置为choice mode multiple 现在我想重写方法 当一项被调用时调用该方法选中 未选中 我发现onCheckChanged 方法仅针对RadioGrou
  • 包含详细信息的列表视图

    我有一个显示客户端列表的Listview 我在Listview中添加了一个onClickListner 以便我可以获得单击客户端的详细信息 ListView l ListView findViewById R id jl l setOnIt
  • 在Android中制作一个弹跳的ListView

    我试图让我的列表视图 弹跳 为了解释一下我自己 我希望 ListView 具有与 iOs List View 对象相同的行为 在列表的顶部和底部 用户可以通过滑动手指来浏览列表 这种行为存在于 Android 2 2 三星设备 例如 Gal
  • Android - 我无法刷新/重绘 ListView

    我有一个列出一组书籍的 ListView 用户可以添加一本新书 然后使用 onActivityResult 方法再次显示该书集 在添加一本新书后 我一直在尝试几个小时来刷新这套书 但根本没有运气 这是我尝试过的代码 public class
  • listview getChildAt() 返回 null

    我一直在做一个android项目并陷入了一个问题 我用谷歌搜索但没有找到答案 在我的项目中 有一个名为viewsurahfragment它包含一个 id 为的列表视图lv showquran 我想突出显示指定索引处的列表视图的视图 我正在使
  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 从另一个活动返回时 Android ListView 项目没有响应?

    我从 ArrayAdapter 创建一个 ListView ListView的每一行都有一个ImageView和一个TextView 现在我使用 setOnItemClickListener 处理单击事件 lv getListView lv
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • StableArrayAdapter 与 ArrayAdapter

    我正在看这个ListView教程 列表视图教程 http www vogella com tutorials AndroidListView article html 我想知道创建自己的更好ArrayAdapter 而不仅仅是使用和Arra
  • android listviews:页眉和页脚视图

    在我的 ListActivity 中 我需要页眉和页脚视图 位于列表的顶部和底部 分别用作列表上的上一页和下一页按钮 因为我只想一次仅显示 20 个项目 我通过执行以下操作来设置头视图和脚视图 getListView addHeaderVi
  • 从 android 发送查询到数据库

    我在 Android 上有一个体育运动列表视图 有没有办法将带有所选选项的 MySQL 查询发送到remote同一张表中包含有关该运动的更多信息的数据库 就像 从桌子上选择足球 提前致谢 扎克 Android 的常见数据库类型是 sqlit
  • 如何正确绑定和更新 Xamarin.Forms ListView?

    使用 MVVM 模式 我有一个模型 ViewModel 和视图 其中包含一个 ListView ListView 绑定到 ViewModel 的成员 该成员是 Model 类的 ObservableCollection 我可以使初始显示的绑
  • getView 中的位置索引始终返回 0

    我想实现一个 ListView 其中每行内都有删除按钮 我唯一的问题是 当我单击某些行的 删除 Btn 时 位置 0 的行刚刚被删除 我认为 getView 中的 Position 参数无法更新并且始终为 0 值 我应该怎么办 Thanks
  • 在Android中添加ListView子项文本

    我创建了一个 RSS 阅读器 可以在列表视图中列出项目 我还想在每个项目下面都有一个日期 但我不知道该怎么做 我需要某人的帮助才能使子项文本显示从 RSS 提要检索到的 pubDate 这是我的班级代码 public class RSSRe
  • Android 在列表视图中添加视图

    文档说不支持 listViewObj addView 方法 我想将视图添加到列表末尾而不刷新它 如何做到这一点 您可以通过以下方式向 ListView 添加页脚 View footerView getLayoutInflater infla
  • Android:对于具有 LinearLayout 定义的成员的 ListView,上下文菜单不显示?

    我有一个 ListActivity 和 ListView 并且我已将一些数据绑定到它 数据显示得很好 而且我还为视图注册了一个上下文菜单 当我将列表项显示为简单的 TextView 时 它工作正常

随机推荐

  • 为支撑小程序接口,配置https

    1 从阿里云购买免费的ssl证书 博主太穷 买不起付费的 https common buy aliyun com spm 5176 7968328 1290860 26 59b61232sjkAJj commodityCode cas re
  • Nginx(六)Nginx请求处理机制

    转载自 本文为您解读 Nginx是如何处理请求的 让你从逻辑上有一个清晰的认识 1 处理什么样的请求 处理访问到 Nginx 所在 IP 地址的请求 并且这些请求的 HTTP 头信息中的 Host 为所要处理的域名 如下以80端口为例 如下
  • zabbix使用Omsa来监控Dell服务器的硬件信息

    OMSA介绍 Dell OpenManage Server Administrator OMSA 是一款全面的一对一系统管理解决方案 OMSA可分为两种 集成式界面 基于Web浏览器的图形用户界面 GUI 命令行界面 CLI 通过操作系统访
  • java中如何通过JDBC的方式连接sqlserver2005多实例数据库?

    java语言中 通过jdbc访问sqlserver2005数据库默认实例可以按正常的写法来建立url连接 代码如下 Connection cn DriverManager getConnection jdbc sqlserver 172 1
  • docker安装mongodb提示bash: mongo: command not found

    docker安装MongoDB容器 docker run d p 27017 27017 name mongodb e MONGO INITDB ROOT USERNAME admin e MONGO INITDB ROOT PASSWOR
  • 嵌入式数据库——sqlite3

    前言 数据库是 按照数据结构来组织 存储和管理数据的仓库 是一个长期存储在计算机内的 有组织的 可共享的 统一管理的大量数据的集合 数据库是以一定方式储存在一起 能与多个用户共享 具有尽可能小的冗余度 与应用程序彼此独立的数据集合 可视为电
  • DataGridView实现添加合计行并始终显示在底部

    DataGridView中没有合适的方法来冻结底部的合计行 这里用一种比较简单的方式实现 1 数据部分的DataGridView 不带任何滚动框2 合计部分的DataGridView 带有横向滚动框3 在画面上添加一个纵向滚动框实现的主要思
  • python爬虫网络出错怎么办_python爬虫之headers处理、网络超时问题处理

    1 请求headers处理 我们有时请求服务器时 无论get或post请求 会出现403错误 这是因为服务器拒绝了你的访问 这时我们可以通过模拟浏览器的头部信息进行访问 这样就可以解决反爬设置的问题 importrequests 创建需要爬
  • Rxjava+Retrofit嵌套处理请求,并优雅的处理异常

    前情提示 本文只是一个例子 不做过多讲解 入门知识推荐参考 仍物线大神讲解的Rxjava 如何优雅的处理服务器异常 本文没有对Rxjava进行任何封装 也没有使用retrolambda 因为对于初学者来说 看起来费 不 劲 会 而且也没必要
  • 跳转页面保存输入的信息到url上,Js现实

    Js现实 获取用户点击岗位的次数 params act add id info bx id click num click num 获取岗位选中的值 params params auth role id now id 拼接其他数据 var
  • spring源码--04--IOC原理--XmlBeanFactory(IOC容器)的初始化(不细)

    XmlBeanFactory IOC容器 的初始化 不细 1 验证过程 代码地址 https gitee com DanShenGuiZu learnDemo tree master spring源码学习 spring source lea
  • 【LeetCode专题】二分答案

    本人参考yxc y总的刷题课 总结了二分查找的两个模板 HERE 本专题为二分查找算法的应用 二分答案 目录 LeetCode 875 爱吃香蕉的珂珂 LeetCode 2187 完成旅途的最少时间 LeetCode 6325 修车的最少时
  • unity识别图片颜色并把颜色数量排序

    首先把图片放入工程 拖入组件中 运行就可以看到颜色 这些颜色都是经过排序的 颜色最多的在最前面 视频 源码
  • Linux虚拟机启用时,出现:‘VMware虚拟机中出现无法将(系统文件路径)文件当做CD-ROM映像进行连接。

    启用Linux时 出现如下错误 解决方法 请先关闭虚拟 不然无法选择文件路径 第一步 点击CD DVD IDE 查看所在文件路径是否正确 第二步 选择启动时连接 选择自己所使用的ISO影像文件 M 修改到自己所在的路径 然后重启虚拟机 即可
  • MySQL数据库 之 插入、更新与删除数据

    欢迎大家扫码关注我的微信公众号 一 插入数据 MySQL 中使用 insert 语句来向数据库表中插入新的数据记录 为表的所有字段插入数据 insert into tb name col list values value list 创建一
  • 蓝桥杯-排列序数

    题目 标题 排列序数 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc 7 bcad
  • 关于HFile的存储结构梳理以及快速定位rowkey

    为什么80 的码农都做不了架构师 gt gt gt 一 HFile结构介绍 为了支持数据的随机查询 HFile结构分为六个部分 1 数据块 保存表中的数据 每一个数据块由块头和一些keyValue record 组成 key的值是严格按照顺
  • Ubuntu18.04安装CUDA11.3和cuDNN8.2.0

    今天在服务器上跑代码 发现报错 说是CUDA版本不对 然后看了一下服务器的版本 发现是9 0 这就有问题了啊 3090的显卡得用11 0上的版本啊 所以接着配置一下深度学的环境 记录一下方便以后查阅 Ubuntu18 04安装CUDA11
  • cocos2dx跨平台直播实例-ffmpeg-ios篇

    一 环境 mac 10 12 2 cocos2dx 3 13 1 ffmpeg 3 0 二 新建项目和编译库 cocos2dx按照官网新建一个实例 ffmpeg编译ios库http blog csdn net u013654125 arti
  • delphi取得文件图标并在TListView中显示

    delphi取得文件图标并在TListView中显示 技术要点 一 使用SHGetFileInfo函数获取指定扩展名的文件图标 需要引用ShellAPI单元 二 使用TStringList来保存扩展名与其图标的索引号 当添加一个文件名至TL