Entwickler-Ecke

Windows API - Tray-Icon während der Laufzeit ändern


Travis - Mo 21.10.02 18:30
Titel: Tray-Icon während der Laufzeit ändern
Hallo Leute,

ich habe schon die komplette Auq.de Datenbank durchsucht, bin aber leider nicht fündig geworden. Wie kann ich das Tray-Icon meines Programms während der Laufzeit ändern?

Schon im voraus Danke,

Travis


Anonymous - Mo 21.10.02 18:46

Mit Shell_NotifyIcon(NIM_MODIFY, @IconData) müßte es funktionieren.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public
  IconData : TNotifyIconData;

...
   
procedure ...
begin
  ...
  IconData.hIcon := Application.Icon.Handle; //neues Icon zuteilen
  ...
  Shell_NotifyIcon(NIM_MODIFY, @IconData); //und aktualisieren
end;


Travis - Mo 21.10.02 19:21

Aber wie mache ich das? Ich muss doch irgendwo den Pfad zu dem Icon angeben, oder wie funktioniert das?

Travis


Delete - Mo 21.10.02 19:34

Über die VCL kommst du in dem Fall wohl mit einer "TIcon"-Variablen gut weg, über die du externe Icons laden kannst (LoadFromFile). Ansonsten stünden dir noch "ExtractIconEx", oder "LoadIcon" (für Icons in den Programm-Ressourcen) bzw. "LoadImage" (auch für externe Icons) zur Verfügung.

Die zuletzt genannten API-Funktionen liefern dir ein Icon-Handle zurück, dass du problemlos an die "hIcon"-Membervariable weiterreichen kannst, wie popov demonstriert hat.
Bei der Variable vom Typ "TIcon" hast du dafür die Eigenschaft "Handle". Das grundlegende Prinzip ist immer das selbe.


Travis - Mo 21.10.02 19:42

Danke für die Antworten. Ich weiß zwar noch nicht genau, ob ich das hinbekomme, aber ich werde es mal versuchen. Ich bin nämlich erst seit kurzem mit Delphi am programmieren und mit der API hab ich eigentlich noch nie etwas gemacht.

Travis


Delete - Mo 21.10.02 19:57

Wie gesagt, wenn du sowieso ein VCL-Programm hast (mit Forms!), dann nimm z.B. eine "TIcon"-Variable:

Quelltext
1:
2:
3:
4:
5:
6:
7:
ico := TIcon.Create;
try
  ico.LoadFromFile('icon.ico');
  IconData.hIcon := ico.Handle;
finally
  ico.Free;
end;

Ich hoffe, das haut so hin - das war nur aus´m Kopf. :?


Travis - Mo 21.10.02 20:21

MathiasSimmack hat folgendes geschrieben:
Ich hoffe, das haut so hin - das war nur aus´m Kopf. :?


Jawoll, es hat funktioniert. Nochmals Danke für die Hilfe!

Travis