Autor Beitrag
Stevie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85

Windows 7
Delphi XE Professional
BeitragVerfasst: Mo 02.06.03 13:15 
Hi,

ich hab folgendes Problem: Ich hab mein Programm bereits aus der Taskleiste in den Tray verbannt. Jetzt möchte ich bei einem bestimmten Ereignis das Icon verändern. Am besten wäre eine kleine Animation. Ich hab das schon versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
myIcon.LoadFromFile('NewMail.ico'); <-- var myIcon: TIcon;
TrayIcon.hIcon := myIcon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @TrayIcon);

Das Icon ändert sich nicht und wenn ich das Fenster wiederherstelle, kann ich es nicht wieder minimieren.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mo 02.06.03 13:53 
Kann dir nur soviel sagen - der Code ist korrekt - bis auf eine Kleinigkeit ...

Wo werden die restlichen Eigenschaften von TrayIcon gesetzt ?
Da gehört ja noch einiges dazu - ganz wichtig cbSize usw.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.06.03 13:55 
Hallo,

wo genau ist die Variable TrayIcon definiert? In der Procedure oder global zum Beispiel in der Form Deklaration?

Gruß
Tino
Stevie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85

Windows 7
Delphi XE Professional
BeitragVerfasst: Mo 02.06.03 13:56 
Die hab ich ja schon vorher gesetzt, wenn ich das Programm starte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TfrmMyProgram.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  with TrayIcon do begin
    cbSize := SizeOf(TrayIcon);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'Mein Programm';
  end;
  Shell_NotifyIcon(NIM_ADD, @TrayIcon);
end;

Tino hat folgendes geschrieben:
In der Procedure oder global zum Beispiel in der Form Deklaration?


Global deklariert.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mo 02.06.03 14:01 
TrayIcon ist also keine lokale Variable ... aha ...

Ups ...

Hast du dir schon mal angeschaut, was Handle für einen Wert hat ?
Unter C++ z.B. bekommt man für HWND=NULL wenn es nicht sichtbar ist (hide) !

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Stevie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85

Windows 7
Delphi XE Professional
BeitragVerfasst: Mo 02.06.03 14:05 
Nee, hab ich noch nicht nachgeschaut, aber das Anlegen des Icons funzt ja. Ich kann das Icon nur nicht wieder ändern. Oder klappt das nur, wenn das Fenster bzw. die Applikation wieder aktiv/sichtbat ist? Ich probier mal was aus...
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 02.06.03 14:08 
Das Record TrayIcon müsste also noch gültige Werte haben. Dann sollte es eigentlich auch funktionieren.

Gruß
Tino
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mo 02.06.03 14:10 
Eigentlich nicht - und du änderst ja auch nicht das Hwnd ... also eigentlich - wie am Anfang gesagt, paßt alles.

Einzig und alleine beim Anlagen muß das Fenster sichtbar sein (oder besser gesagt ein gültiges Handle haben).

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.