Ich halte das eher für ein Problem von Delphi. Zumindest in meinem Delphi 11.2.
Da du das Icon animierst, wird via Timer DoAnimate aufgerufen (und die Icons werden wie erwartet korrekt in Windows 11 angezeigt).
Wenn du trayicon1.ShowBalloonHint; ausführst
wird FData.uFlags gesetzt:
FData.uFlags := FData.uFlags or
NIF_INFO;
Und während dem DoAnimiate wird dieser Wert im Refresh des TryIcons fortan an Windows übergeben. Da NIF_INFO gesetzt bleibt, wird im Notification Center bei jeder Iconanimation ein "NIF_INFO Wunsch" abgesetzt. Windows zeigt zum Glück nur die ersten 20 an
.
Lösung: Nach Anzeige des Balloons das Flag NIF_INFO aus FData.uFlags entfernen.
Dies hilft bei meinem Delphi 112 und Windows 11:
Delphi-Quellcode:
procedure TCustomTrayIcon.ShowBalloonHint;
var HuFlags : UINT;
begin
HUFlags := FData.uFlags;
FData.uFlags := FData.uFlags or NIF_INFO;
FData.dwInfoFlags := Cardinal(FBalloonFlags);
Refresh(NIM_MODIFY);
FData.uFlags := HUFlags; // nehme hier an, dass Delphi nicht noch mehr ... baut und NF_INFO nicht in HUFlags ist
// alternativ dazu könnte man NF_INFO explizit löschen
end;
Du schreibst, dass frühere Windows Versionen nicht betroffen sind: Ich nehme an, dass frühere Versionen eine erneute gleiche Anfrage ignoriert haben.