Delphi 中图标的线程加载

2023-12-25

使用Delphi 2009,尝试制作一个启动器。 为了使其“敏捷”,我真的很想在后台线程中加载图标。

我已经使用了这里找到的解决方案:能否从 Vista Shell 获取 48x48 或 64x64 图标? https://stackoverflow.com/questions/1703186/can-48x48-or-64x64-icons-be-obtained-from-the-vista-shell

如果不在线程中运行,这可以正常工作。 一旦我将其放入线程中,某些图标就不会被“获取”,或者成为某种通用图标。 我什至尝试序列化线程(实际上使它们过时),但它产生了相同的结果。

所以,问题是: 如何在线程中加载图标(具有与链接示例相同的可用选项)?

/Lars

编辑: 在 GetIconFromFile 中添加了一些非常基本的错误检查

if SHGetFileInfo( PChar( aFile ),
                FILE_ATTRIBUTE_NORMAL,
                SFI,
                SizeOf( TSHFileInfo ),
                SHGFI_ICON
                  or SHGFI_LARGEICON
                  or SHGFI_SHELLICONSIZE
                  or SHGFI_SYSICONINDEX
                  or SHGFI_TYPENAME
                  or SHGFI_DISPLAYNAME ) <> 0 then
begin
  if not Assigned( aIcon ) then
    aIcon := TIcon.Create;
  aImgList := GetImageListSH( SHIL_FLAG );
  aIndex := SFI.iIcon;
  if aImgList <> 0 then
    aIcon.Handle := ImageList_GetIcon( aImgList, aIndex, ILD_NORMAL );
end;

这没有任何区别。 我仍然得到一些通用图标(不过,仅当在线程中调用时)

编辑2: 线程代码(非常简单):

procedure TIconLoader.Execute;
var
  Item : TGridItem;
  I : TIcon;
begin
  inherited;

  while not terminated do
  begin
    Item := nil;
    if assigned(FOnNeedGridItem) then
    begin
      Synchronize(
          procedure
          begin
            FOnNeedGridItem(Self, Item);
          end
      );
    end;

    if assigned(Item) then
    begin
      GetIconFromFile(Item.FFilename, I, SHIL_EXTRALARGE);
      Synchronize(
          procedure
          begin
            Item.SetIcon(I);
          end
      );
//      I.Free;
    end
    else
      Terminate;
  end;
end;

的文档SHGetFileInfo指定在调用该函数之前必须初始化 COM。由于 COM 初始化是针对每个线程的,因此您需要在线程中初始化 COM。这意味着调用CoInitialize or CoInitializeEx来自Execute线程的方法。

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

Delphi 中图标的线程加载 的相关文章

  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时
  • 在哪里可以找到 Windows 7 UX 指南中推荐的图标/动画?

    Windows 7 UX 指南有很好的插图和图标示例 但我在 SDK 中确实找不到它们 他们藏在某个地方 还是找不到 如果您谈论的是常见的 UI 图标 那么您应该以编程方式获取它们 例如 您可以使用 var errIcon HICON be
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您
  • TListView 中的中心子项目图像

    Is it possible to fix the drawing of subitem images in a TListView so that they are not cut off on the left hand side as
  • 在 Delphi 中的 SOAP 标头中发送简单字符串

    我需要发送这样的东西
  • Visual Studio 2017 - 指定应用程序图标

    我正在尝试将我的图标添加为 Visual Studio 项目中的默认应用程序图标 微软文档 https learn microsoft com en us visualstudio ide how to specify an applica
  • 从创建 UI 的同一线程更新 VCL。为什么?

    我知道我必须调用 Synchronize 来从未创建控件或向窗口发送消息的线程更新 vcl 我经常听到 线程不安全 这个词 但我找不到关于正在发生的事情的实际解释 我知道应用程序可能会因访问冲突而崩溃 但我又不知道为什么 请阐明这个主题 V
  • Delphi 将面板流传输至文件

    今天我有一个关于将表单的一部分流式传输到文件的问题 在此示例中 我使用 Tmemo 而不是文件来查看流 这是我的表格 表单右上角的面板有一些控件 如标签 编辑等 使用 保存面板 按钮将面板保存在 TStream 上 这里是代码 proced
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已
  • 无法使用 Indy 从 Gmail 获取电子邮件

    I use TIdPOP3很多 而且效果很好 除了 GMail 帐户 不知怎的 它永远不起作用 我尝试了不同的组合和端口 无论是否使用 SSL 它总是返回不同的错误 我最近的尝试是在 Gmail 上创建 应用程序特定 密码 并尝试使用此密码
  • 无法在 SAMSUNG GALAXY S7 EDGE 上调试

    为什么我无法在 RAD STUDIO 10 Seattle upd 1 中的 SAMSUNG GALAXY S7 EDGE ANDROID 6 0 1 上调试我的应用程序 当我调试时 设备上的应用程序启动 但 RAD STUDIO Delp
  • 从 C++ .dll 到 Delphi Forms 应用程序的 PostMessage 问题

    我有用 Delphi 7 编写的 Windows 窗体应用程序和使用 MFC 编写的 C dll 目前 我正在尝试实现从 dll 到主可执行文件的基本消息发布 以在进度条上显示用户计算过程 但遇到了几个问题 让我先描述一下我的方法 我在 D
  • 如何以编程方式隐藏桌面图标?

    如何使用 C 以编程方式显示 隐藏桌面图标 我正在尝试创建一个使用小部件的替代桌面 并且我需要隐藏旧图标 您可以使用 Windows API 来执行此操作 以下是 C 示例代码 用于切换桌面图标 DllImport user32 dll S
  • Delphi TTask - PPL 中匿名函数中的变量捕获如何工作?

    我开始深入研究 Delphi D11 PPL 并编写了这个小例子 procedure TForm2 LaunchTasks const cmax 5 Var ltask ITask i j Integer begin for i 1 to
  • 挂钩到文件,实时读取新内容

    我如何连接到另一个程序当前正在使用的文件 该程序不断向该文件写入内容 假设有一个 10 行的文本文件 当我启动我的应用程序时 每次写入程序保存其内容时 它都必须检测并读取其中的任何内容 可以在不不断检查文件大小 日期的情况下完成此操作吗 您
  • 当应用程序最小化时隐藏表单

    我有一个主表单和一个状态表单 当我的应用程序中的工作正在进行时 我会显示它们 如果工作完成我就打电话Hide状态表上出现 状态表消失 当我最小化主窗体而等待窗体可见时 就会出现问题 然后两种形式都被隐藏 这就是我想要的 但是 如果工作完成时
  • Delphi - 引用在运行时创建的组件

    我正在使用 Delphi 5 并且在运行时创建许多面板 然后在面板上创建按钮 显然也是在运行时创建 我需要这样做 因为将来我可能需要动态创建更多面板 按钮组合 我可以完成所有这些 但我不知道如何引用我创建的面板 因为我找不到访问面板组件名称
  • 如何使用 LiveBindings 在 TStringGrid 中显示超过 200 行?

    我有一个TDataSource这是由一个支持TClientDataset绑定到一个TStringGrid 我通过右键单击网格并选择 Link to DB Datasource 然后选择数据源 这为我设置了 LiveBindings 当我运行

随机推荐

  • Spring-data-cassandra 1.3.4 与 Cassandra 3.x 不兼容

    我尝试使用 Spring data cassandra 1 3 4 以及最新的 cassandra driver core 3 0 0 在 Cassandra 2 1 12 作为 DSE 4 8 4 的一部分 上 一切正常 因为相同的 sp
  • React 是否保证“props”对象引用保持稳定?

    最近我看到类似于以下人为示例的代码 const MyComp props gt const prevProps setPrevProps useState props if props prevProps setPrevProps prop
  • 编写一个监听 USB 端口的小实用工具,需要建议

    我有一个可以循环工作的硬件 它配备了专有的软件工具 让用户可以通过 USB 从 PC 控制它 用户定义每个周期的长度 在每个周期开始时 软件工具通过 USB 快速向硬件发出一系列命令 然后进入空闲模式 等待下一个周期 还有第二个硬件需要与第
  • 通过静态类访问 HttpContext 可以“正确”处理不同的请求

    I found 本文 https www quickdevnotes com better approach to use httpcontext outside a controller in net core 2 1 在尝试解决需要非控
  • 图片上传:iPhone客户端-Django-S3

    我有一个关于从客户端 在本例中为 iPhone 应用程序 上传到 S3 的一般性问题 我正在使用 Django 在 EC2 实例上编写 Web 服务 以下方法是将文件上传到 S3 的最低限度方法 对于较小的文件 jpg 或 png def
  • 判断手机是否重启过

    我正在尝试检测自上次设置首选项值以来 Android 设备是否已重新启动 理想情况下 我想在没有android permission RECEIVE BOOT COMPLETED允许 我考虑的一种方法是存储另一个包含某种会话 ID 的首选项
  • 是否有更好的方法来处理穿过反子午线(日界线)的空间多边形?

    TL DR R中处理在纬度 180 处与反子午线相交 重叠的空间多边形并将其沿该子午线切割成两部分的最佳方法是什么 Preface 这将是一篇很长的文章 但只是因为我将包含大量代码和图形来进行说明 我将向您展示我的目标是什么以及我通常如何实
  • 有没有办法改变海龟中文本框的位置?它总是显示在我的左上角,但我希望它出现在底部中心

    import turtle screen turtle Screen global answer answer screen textinput Welcome to the game What s your name Here is 出现
  • 使用 angularjs 将数据附加到 json-ld

    我是 angularjs 的新手 我开始这个项目是为了了解有关这个框架的更多信息 我制作了一个将数据放入 json ld 的应用程序 我的应用程序可以将数据添加到 json ld 但没有我想要的输出格式 这个 gt 这是我的 html和角度
  • MySQL获取最新记录检查两列[重复]

    这个问题在这里已经有答案了 我有这样的结果 我需要获取每个骑师的最新比赛 首先获取比赛的最大日期 然后获取最大比赛编号 结果应该是这样的 注 数据库非常庞大 查询应该非常快 当您说 最大比赛号码 时 您是指最新比赛的号码 日期最近的比赛 还
  • 自定义 HighCharts 中各个系列的颜色

    我正在使用 HighCharts 绘制折线图 并尝试更改每个系列的线条颜色 我确实找到了这个例子here https stackoverflow com questions 5727419 highcharts is it possible
  • iOS - 获取字母的“真实”高度

    我正在尝试在 UIView 上布局文本 黄色区域是带有背景色的UILabel的边框 当我使用 sizeWithFont 时 我得到了这个 它在字母上方有一个非常大的空间 当我使用font pointSize我得到这个 i 这很好 BUT当我
  • MySQL 数据库中有一列 LONGTEXT 的内存消耗

    我正在 MySQL 数据库中创建一个日志表 其中一个字段将仅在大约 5 的日志中使用 并将包含堆栈跟踪和其他供开发人员使用的冗长信息 我正在考虑使用 LONGTEXT 字段 但我想知道使用它是否会使我的数据库增长得非常快 即使该列中有 95
  • 任何生成 xsl:fo 的 javascript(基于网络)所见即所得编辑器

    我很难找到可生成 XSL FO 的 OSS 或基于商业网络 javascript 的 WYSIWYG 编辑器 我希望编辑能够做 向用户呈现常见的文本编辑器界面 与我当前正在输入以向 SO 提交此问题的编辑器不同 用户能够定义 XSL FO
  • 禁用 jQuery UI Datepicker 中的未来日期

    是否可以禁用从今天开始的未来日期 假设今天是 2010 年 10 月 23 日 那么 2010 年 10 月 24 日以后将被禁用 抱歉 我对 jQuery 和 JavaScript 很陌生 确实是的 日期选择器具有 maxdate 属性
  • 反应原生模态,避免在键盘打开时调整视图大小(Android)

    我正在使用react native Modal 其中包含一个View 该视图有一些 TextInput 元素 当键盘弹出时 视图元素全部折叠以适应剩余空间 但我根本不希望视图发生变化 这确实not发生在IOS上 而且 它确实not发生在同一
  • 如何管理多个 apache 服务器上的单个 PHP5 会话?

    您好 我必须从多个网络服务器检索数据 首先 我以用户身份登录我的网站 成功登录后 我必须从不同的网络服务器获取数据并显示 如何与多个服务器共享单个会话 我怎样才能实现这个目标 当我第一次登录时 它会创建会话并将会话 ID 保存在该服务器的临
  • 如何通过环境变量添加气流池?

    就像可以通过名称后面的环境变量设置连接一样AIRFLOW CONN conn id 有没有办法设置池 这样我就可以设置一个本地 Docker 测试环境 并填充所有配置 None
  • AdMob 插页式广告已显示但无法点击

    我有一个应用程序 可以在某些活动关闭时显示插页式广告 我使用不同的活动来展示广告 到目前为止 它正确显示了广告 但当我点击广告时没有任何反应 我已经在许多设备上进行了测试 测试人员报告了相同的行为 日志中没有错误 如果我使用调试版本或上传到
  • Delphi 中图标的线程加载

    使用Delphi 2009 尝试制作一个启动器 为了使其 敏捷 我真的很想在后台线程中加载图标 我已经使用了这里找到的解决方案 能否从 Vista Shell 获取 48x48 或 64x64 图标 https stackoverflow