Einzelnen Beitrag anzeigen

Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#11

Re: TrayIcon zur Laufzeit aktualisieren

  Alt 15. Jan 2007, 17:57
Zitat von woggly4:
Zitat von Reinhard Kern:
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
  Mit Zitat antworten Zitat