Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TaskIcon wird unter Vista nicht gelöscht. (https://www.delphipraxis.net/134578-taskicon-wird-unter-vista-nicht-geloescht.html)

RaSoWa1 25. Mai 2009 10:29


TaskIcon wird unter Vista nicht gelöscht.
 
Hallo,

mit folgendem Code generiere und entferne ich in der Taskbar ein Icon:
Delphi-Quellcode:
procedure TaskBarAddIcon(Hnd: HWnd; CallbackMsg: UINT; Icon: TIcon; Cap: string);
var  NIData: TNotifyIconData;
begin
  Fillchar(NIData,Sizeof(NIData),0);
  NIData.cbSize          := Sizeof(NIData);
  NIData.Wnd             := Hnd;
  NIData.uID             := 1;
  NIData.uFlags          := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  NIData.uCallbackMessage := CallbackMsg;
  NIData.hIcon           := Icon.Handle;
  strcopy(NIData.szTip, PChar(Cap));
  Shell_NotifyIcon(NIM_ADD, @NIData);
end;

procedure TaskBarFreeIcon(Hnd: HWnd);
var NIData: TNotifyIconData;
begin
  FillChar(NIData,Sizeof(NIData),0);
  NIData.cbSize := Sizeof(NotifyIconData);
  NIData.Wnd    := Hnd;
  NIData.uID    := 1;
  Shell_NotifyIcon(NIM_DELETE, @NIData);
end;
Problem:
Nach der Freigabe wird das Icon in der Taskbar nicht gelöscht. Es verschwindet erst wenn ich mit der Maus darüber fahre. Unter XP kannte ich dieses Verhalten nicht.
Liegt es am Vista?
Wie kann ich Vista dazu bringen die Icon zu aktualisieren?

Gruß Klaus

Luckie 25. Mai 2009 10:31

Re: TaskIcon wird unter Vista nicht gelöscht.
 
Stimmt das Handle? Was sagt GetLastError?

Tyrael Y. 25. Mai 2009 10:54

Re: TaskIcon wird unter Vista nicht gelöscht.
 
Das ist kein Fehler im eigentlichen Sinn.
Dieses Verhalten kenne ich seit Windows98 auf allen Win-Systemen.

Der Bereich wurde nur noch nicht neu gezeichnet mehr nicht.

Luckie 25. Mai 2009 10:58

Re: TaskIcon wird unter Vista nicht gelöscht.
 
Also ich kenne das Verhalten nur, wenn man einen Prozess mit einem Icon in der TNA abschiesst und er so keine Möglichkeit mehr hat das Icon zu entfernen. Ansonsten löschen alle meine Programme ihr Icon sauber aus der TNA, wenn ich sie beende, ohne irgendwelche Klimmzüge mit Neuzeichnen usw.

RaSoWa1 25. Mai 2009 11:07

Re: TaskIcon wird unter Vista nicht gelöscht.
 
Die Anwendung läuft im Hintergrund und wird aus einer Prozedur mit "PostMessage(Application.Handle, WM_CLOSE, 0, 0)" beendet.

Handle ist immer "Application.Handle"

GetLastError (habe ich gerade geprüft) liefert unmmittelbar nach TaskBarFreeIcon im OnClose: 1447 "Das Fenster hat keine Bildlaufleiste".
Eigenartig!

Gruß Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.

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