在Delphi应用程序图标上动态插入数字

6

我使用的是Delphi 10.4。

我想要一种动态插入应用程序图标上数字的方法,以便用户可以知道应用程序完成了多少个任务。这将是动态的,当应用程序完成一个新任务时,它将增加图标上的数字。

类似下面的图片。

这是可能的吗?

我没有任何代码可发布,因为我不知道如何做到这一点。

enter image description here


4
每次需要绘制一个新的图标,然后将其赋值给 TForm.Icon 属性。首先加载一个基本图标到 TBitmap 中,在其上面绘制数字,然后使用 Assign() 方法将其分配给 Icon 属性。 - Remy Lebeau
1
@RemyLebeau:你可以这样做,但不是必须的。自从Windows 7以来,Windows任务栏支持覆盖图标。 - Andreas Rejbrand
@AndreasRejbrand 是的,你可以这样做,但是这种重叠区域非常小(16x16),这会使得在大屏幕上阅读数字变得困难,而且你无法控制覆盖物在主任务栏图标上的位置 - Remy Lebeau
“无法控制放置位置”是一种特性,因为这样你就可以得到标准的放置方式。此外,任务栏按钮本来就很小;你不应该在其中放置太多信息,但一个数字应该能够很好地工作。 - Andreas Rejbrand
1个回答

11

您可能不知道 TTaskbar 任务栏配置组件 及其 OverlayIcon 属性。

例如:

带有任务栏图标覆盖的应用程序屏幕录像。

实现非常简单:

procedure TForm1.btnInfoClick(Sender: TObject);
var
  io: TIcon;
begin
  io := TIcon.Create;
  try
    io.Handle := LoadIcon(0, IDI_INFORMATION);
    Taskbar1.OverlayIcon := io
  finally
    io.Free;
  end;
end;

在您的情况下,您可以创建图标1.png2.png等非编程方式使用这些图标,或者您可以编程创建图标(创建一个CreateOverlayIcon(ANumber: Integer): TIcon函数)。

但是,我应该警告您,TTaskbar组件曾经非常有缺陷。因此,我不会使用它;相反,我会直接使用ITaskbarList3::SetOverlayIcon API。

无论如何,我的建议是将问题分为两个部分:

  1. 创建覆盖图标。
  2. 使用Windows 7任务栏覆盖图标功能将其显示在原始图标之上。

谢谢!创建覆盖图标的问题是,我需要数百个图标,因为我的应用程序所执行的任务数量可以轻松达到500。 - delphirules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接