Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 托盘中显示的最佳图标大小_Delphi_Winapi_Shell_System Tray - Fatal编程技术网

Delphi 托盘中显示的最佳图标大小

Delphi 托盘中显示的最佳图标大小,delphi,winapi,shell,system-tray,Delphi,Winapi,Shell,System Tray,我正在开发一个Delphi程序,它将在“托盘”上显示一个图标。我正在“艰难地”完成它(使用Shell_NotifyIcon api等,而不是组件,原因不在这里)。它工作正常,但有时在某些系统中,图标似乎有点“模糊”。现在,我已经用16x16 bmp、32x32等进行了实验。系统似乎可以将其缩小到所需的大小,但结果会因操作系统版本(或者其他原因)的不同而有所不同 你们中的任何人是否有过使用列表图像中的Shell_NotifyIcon提取并显示在托盘上的BMP的最佳大小和颜色深度的经验?您可能应该包

我正在开发一个Delphi程序,它将在“托盘”上显示一个图标。我正在“艰难地”完成它(使用Shell_NotifyIcon api等,而不是组件,原因不在这里)。它工作正常,但有时在某些系统中,图标似乎有点“模糊”。现在,我已经用16x16 bmp、32x32等进行了实验。系统似乎可以将其缩小到所需的大小,但结果会因操作系统版本(或者其他原因)的不同而有所不同


你们中的任何人是否有过使用列表图像中的Shell_NotifyIcon提取并显示在托盘上的BMP的最佳大小和颜色深度的经验?

您可能应该包括32x32和16x16图标,并在运行时加载相应的图标:

通知区域图标应具有高DPI意识。申请书 应在其屏幕中提供16x16像素图标和32x32像素图标 资源文件,然后使用以确保 图标已加载并适当缩放


(来源:)

为了获得最佳效果,您应该使用部分透明的32bpp图标

该图标使用较小的系统大小。通过调用
GetSystemMetrics
passing
SM\u CXSMICON
获取此信息。例如,如果使用字体缩放,这可能是20px,而不是更常见的16px。我从来没有找到有关这一事实的MS文档,但您可以通过尝试和错误来轻松验证它。这不是一种真正的幸福状态,但事实就是这样


更新:TOndrej指出,
LoadIconMetric
的文档默认通知区图标尺寸较小。我不明白为什么通知图标中没有包含此信息。

建议将单个
*。ico
文件用于应用程序图标<代码>*。ico文件可以存储不同大小的图标,如16、32、256等。您可以在线将不同的图像文件转换为ico格式

对于托盘图标16x16或32x32,ico将适合


官方msdn图标指南:

遗憾的是,这里的文档不起作用。如果你没有放入一个小图标大小的图标,那么你将有别名和可怕的锯齿。我从痛苦的经历中了解到这一点。您可能应该注意,这只适用于Vista和更高版本,或Windows Server 2008和更高版本(
LoadIconMetric
在早期的Windows平台上不可用)。现在仍然有很多WinXP和Server 2003系统。:)如果有人感兴趣,我有优秀的代码,可以在给定资源名称的情况下创建任意大小的图标,这可以在XP和更高版本上使用,但可以利用现有的新功能。如果有兴趣,我可以发布一个问题,并用我自己的代码回答。@Lobuno如承诺的那样,这里是我讨论的代码:嗯。。。GetSystemMetrics(SM_CXICON)在我的系统上给了我32。。。另一方面,GetSystemMetrics(SM_CXSMICON)给了我16。。。帮助文件指出SM_CXSMICON是一个小图标的建议宽度(确保它没有提到“托盘”或“通知栏”)我发布的链接解释说,
LIM_SMALL
对应于
SM_CXSMICON
。代码示例使用了
LIM_SMALL
@TOndrej,LoadIconMetric上的链接是我见过的最接近通知图标小图标祝福的链接。疯狂的是,MSDN没有将这些信息放在通知图标文档上。有什么顺便说一句,你在答案中找到的文字要比你在另一页中引用的文字好得多,伊姆霍。