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中显示 的相关文章

  • 带有简单光标适配器项目的列表视图已选中,但在滚动期间未选中

    我有一个问题 我无法在 SO 上找到答案 所有问题都在 SO 上解决 其中有太多不同的问题并且不起作用 问题是 1 ListView中被点击的行 点击后标记为蓝色背景和复选框 在滚动后失去了被点击的标记 选中的复选框和颜色 2 甚至更多 在
  • react-native limit 列表项

    我在用Flatlist https facebook github io react native docs flatlist html来自反应本机和ListItem https react native training github i
  • Android Studio 音乐播放器无法从 SD 卡读取,只能读取内存

    如果这被证明是一个愚蠢的问题 我深表歉意 这可能是一个快速解决方案 但我就是无法弄清楚 我正在 android studio 中构建一个音乐播放器 尽管我确实实现了 getExternalStorageDirectory 并在清单文件中添加
  • 获取ListView可见项

    我有一个ListView其中可能包含很多项目 所以它是virtualized和回收物品 它不使用排序 我需要刷新一些值显示 但是当项目太多时 更新所有内容太慢 所以我想只刷新可见项目 我怎样才能获得当前显示的所有项目的列表 我试图调查Lis
  • 具有多个 Item 布局的 ListView 适配器

    我正在考虑向我的 Android 应用程序添加一个带有缩略图的列表视图 左边是缩略图 右边是文字 有没有办法用单独的 xml 文件填充列表视图 例如 我可以为奥地利 英国 美国等提供单独的 xml 并将它们添加到列表视图中吗 我问的原因是
  • 如何从复选框数组中保存布尔状态并在使用 SharedPreferences 加载适配器时加载其状态

    我有一个用于列表视图的 CustomAdapter 我需要使用 SharedPreferences 保存布尔数组中的所有复选框状态 我想将技巧的名称 字符串数组 保存为键和每个技巧的状态 我想到的 SharedPreferences 示例
  • 在 Android 中向下滚动列表视图时强制关闭

    当我尝试在片段活动中向下滚动列表视图时 出现强制关闭错误 其中有 1 个图像视图和 2 个文本视图 我是android的初学者 所以除了android最常用组件的基本场景之外没有太多的知识 没有位图 OOM 错误 因为我也没有使用图像进行了
  • 在flutter中动态显示数据表布局中的JSON数据

    我正在 flutter 中创建动态数据表视图 其中列标题和行值是动态添加的 数据是一个 Json 响应 标题是一个字符串数组 行中要显示的数据也是一个字符串数组 目标是在表视图中显示数据 而不需要任何硬编码值 这就是我尝试显示数据的方法 r
  • C#:如何在虚拟模式下有效过滤(隐藏)ListView 项目?

    C 如何在虚拟模式下有效过滤 隐藏 ListView 项目 我正在寻找一种在虚拟模式下过滤 隐藏 显示 ListView 中的项目的方法 我将我的项目缓存在列表视图项目数组中 如何有效地使其在按下过滤按钮时仅显示特定的列表视图项目 然后在按
  • ASP.NET 列表视图->单击行->执行操作

    我需要以下方面的帮助 我有一个用隐藏代码填充的列表视图 Linq gt Sql ListView1 DataSource from x in database ITEMS select x ListView1 DataBind 项目内容 I
  • Android中如何制作传统蒙古文ListView

    如何在 Android 应用程序中为垂直蒙古文制作水平滚动的 ListView 背景 Android 对世界上许多语言都有相当好的支持 甚至是阿拉伯语和希伯来语等 RTL 语言 但是 没有内置对自上而下语言的支持 例如传统蒙古语 http
  • Android - GC 滞后于列表视图滚动“更大”的图像

    在列表视图中 我想在列表条目上绘制一个图像 这 20 张图像必须缩放以填充垂直模式的宽度 手机分辨率为 480 x 800 像素 SGS2 图像分辨率为 400x400 大小约为 100KB 我已将图像放在可绘制文件夹中 当我滚动列表时 它
  • Android - ListView 不接收带有可点击链接的文本视图的 OnItemClick

    我有一个 ListView 除了许多其他视图之外 每行还包含一个 TextView TextView 呈现可能包含链接的 html 内容 以下代码出现在列表适配器中 m textview setMovementMethod LinkMove
  • 如何允许用户对列表中的项目重新排序?

    我有一个 Android 应用程序 用户可以在其中将项目添加到列表中 并且我希望他们能够按照自己的意愿对列表中的项目进行重新排序 而不是仅仅向他们提供不同的排序顺序 为项目添加位置设置 它们来自数据库 很容易 但是用户可以使用哪种 UI 元
  • 最大化列表视图中的可见行

    这是我的列表中项目的代码 假设我正在夸大这个TextView进入ListView
  • 当用户拖动列表视图项目时检测何时需要滚动

    介绍 我正在实现列表视图项目的重新排列 而不使用 OLE 拖放 PROBLEM 我已经成功解决了大部分任务 除了当用户想要将项目放置在当前不可见的位置时向上 向下滚动之外 问题 我可以使用以下消息向上 向下滚动列表视图 SendMessag
  • 如何在 xamarin.forms 中隐藏列表视图的空行

    我有一个StackLayout with a ListView我有一个添加按钮 我想将其显示在ListView 但是ListView显示许多未使用的行 只是空行 这迫使我的按钮显示在页面底部 我一直在搞乱VerticalOptions一整天
  • 如何设置上拉刷新SwipeRefreshLayout

    我看到很多 ListView 下拉刷新的库 但是当从上到下拉动时它们是工作的 但是从下到上拉动时我如何刷新 我可以用这个做吗滑动刷新布局 http developer android com reference android suppor
  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似
  • Listview里面只有一个Element

    您好 我正在尝试将列表视图放入列表视图中的列表视图中 唯一的问题是只有第一个列表视图正确显示所有元素 此后的每个列表视图仅包含一个元素 UPDATE 创建我自己的不可滚动列表视图解决了这个问题 https stackoverflow com

随机推荐

  • 为支撑小程序接口,配置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