【发布时间】:2010-09-28 14:32:44
【问题描述】:
如何从具有多个图像的图标中提取特定大小的图像或所有图像?
【问题讨论】:
标签: delphi delphi-2010
如何从具有多个图像的图标中提取特定大小的图像或所有图像?
【问题讨论】:
标签: delphi delphi-2010
您没有说明这样做的目的是什么,并且有多种获取图标的方法,根据目的,一种方法可能比另一种更好。
但是,要从任意文件中提取任意数量的“大”(32x32) 和/或“小”(16x16) 图标*,请使用ExtractIconEx 函数。这使您可以从图标文件 (.ico)、EXE 或 DLL 中提取这两种标准尺寸中的一种或多种图标。一个图标文件可以包含多张图片,这个功能可以让你得到所有的图片。
该函数将写入一个句柄数组,您可以将每个句柄分配给TIcon 实例的Handle 属性。然后,您可以像往常一样使用TIcon methods,如果您以任何其他方式加载TIcon。请注意,Delphi XE 的新功能是能够轻松地将其复制到位图via the Assign method。 That article 还展示了如何访问所有库存(内置/标准)Windows 图标,如果这恰好是您所追求的。
(旁注:我认为TIcon 类允许您通过其LoadFromFile 方法从文件加载 - 这似乎从文档中丢失,但我很确定它存在。从记忆中,只有加载单个图标。)
(*) 其实“大”和“小”都可以 不同于 32x32 和 16x16:使用 这
GetSystemMetrics与SM_CXICON一起使用,SM_CYICON、SM_CXSMICON和SM_CYSMICON标志找出 每种类型的尺寸。
【讨论】:
ExtractIconEx,您将为它提取的每个图标图像创建一个TIcon。然后,您可以通过Assign-ing 到位图来访问图标的图像。 (你得到了一个句柄数组吗?尝试调用ExtractIconEx两次,第一次将nIconIndex设置为-1,两个数组参数nil,它将返回图标的数量。再次调用它该大小的数组。有关详细信息,请参阅 MSDN 文章。)