Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TrayIcon zur Laufzeit aktualisieren (https://www.delphipraxis.net/83516-trayicon-zur-laufzeit-aktualisieren.html)

Reinhard Kern 15. Jan 2007 17:57

Re: TrayIcon zur Laufzeit aktualisieren
 
Zitat:

Zitat von woggly4
Zitat:

Zitat von Reinhard Kern
Zitat:

Zitat von woggly4
Könnte mir denn bitte jemand sagen, wie ich das hinbekomme, dass sich das Icon ändert, obwohl ich die Icons aus der Imagelist hole? Oder ist das gar nicht möglich?

Hast du es denn mit Application.Icon.Handle probiert?

Gruss Reinhard

Ja, ich habe das als Timer laufen. Sodass alle 15 Sekunden das Icon überprüft wird und geändert wird (jedenfalls SOLL das so funktionieren) Aber ich verstehe nicht, warum das Programm mit Shell_NotifyIcon zurecht kommt, wenn ich das Programm in den Systray packe. Das Symbol verändert sich auch, wenn ich das Programm hervorrufe und dann wieder in Tray packe... Ich möchte nur diesen Schritt übergehen. Also so: a) Icon a wird angezeigt und in systray gepackt b) icon a ändert sich in b - es wird aber noch das icon a im tray angezeigt. c) programm wird aus dem tray geholt und wieder reingepackt d) icon b ist nun auch im systray zu erkennen... Ich möchte halt nur Schritt c auslassen!

Hallo,

das ist ein Auszug aus einer funktionierenden Systray-Klasse, aber Achtung, bei mir stehen in TBIconList schon HIcon Handles, keine TIcons!

Delphi-Quellcode:
procedure TRKSystray.TaskBarAnimateIcon (TB : integer);
begin
IconAnimateTime := TB;
CurrentIcon := 1;
Anim_Timer.Interval := IconAnimateTime;
if IconVisible then Anim_Timer.Enabled := true;
end;

procedure TRKSystray.Timer (Sender : TObject);
var NextIcon : HIcon;
begin
if not IconVisible then exit;
CurrentIcon := CurrentIcon + 1;
NextIcon := TBIconList[CurrentIcon];
if NextIcon = 0 then
  begin
  CurrentIcon := 1;
  NextIcon := TBIconList[CurrentIcon];
  end;
SetupTNID (0, NextIcon, '');
Shell_NotifyIcon (NIM_MODIFY, @tnid);
end;

procedure TRKSystray.SetupTNID (NMsg : integer; I : HIcon; T : ShortString);
var Flags : integer;
begin
FillChar (tnid,sizeof(TNOTIFYICONDATA),0);
tnid.cbSize := sizeof(TNOTIFYICONDATA);
tnid.Wnd := Parent.Handle;
tnid.uID := 121;
Flags := 0;
if NMsg > 0 then
  begin
  Flags := Flags + NIF_MESSAGE;
  tnid.uCallbackMessage := WM_TASKBAREVENT;
  end;
if I > 0 then
  begin
  Flags := Flags + NIF_ICON;
  tnid.hIcon := I;
  end;
if Length (T) > 0 then
  begin
  Flags := Flags + NIF_TIP;
  StrPLCopy (tnid.szTip, SystrayTextBuffer, 63);
  end;
tnid.uFlags := Flags;
end;
Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz