![]() |
AW: Das Problem mit dem vergessenem TrayIcon
Also wenn ich als Anwender einen Prozess über den Taskmanager abschieße, dann muss mir bewusst sein, dass eventuell Müll zurückbleibt, deswegen würde ich mich als Programmierer nur darum kümmern, dass mein Programm aufräumt, wenn es sauber beendet wird.
|
AW: Das Problem mit dem vergessenem TrayIcon
Ach Leute, was soll das? Das Thema wird jetzt in eine Ecke gedrängt wo nicht hingehört, nur um Recht und das letzte Wort zu behalten. Ich sage nein, ich bin im Sommer auf eine Banane ausgerutscht. Ihr: ja im Winter ist es glatt, da rutscht man schon auf schneebedeckten Straße aus. Man kann sagen was mal will, ihr führt eurer eigenes Gespräch. Mach das, aber dann laßt mich da raus.
Ich spreche von einer Langzeitbeobachtung mit meinen und fremden Programmen und ihr kommt mir hier mit terminieren über Taskmanager. |
AW: Das Problem mit dem vergessenem TrayIcon
Ich habe mal in den Code von
Delphi-Quellcode:
(Delphi XE2-U4) geschaut, an welchen Stellen das Icon wieder gelöscht wird, und siehe da, das passiert nicht nur im Destroy:
TTrayIcon
Delphi-Quellcode:
Das Entscheidende wird wohl hier die Reaktion auf die Nachricht
destructor TCustomTrayIcon.Destroy;
begin if not (csDesigning in ComponentState) then begin Refresh(NIM_DELETE); DeallocateHWnd(FData.Wnd); end; ... end; procedure TCustomTrayIcon.SetVisible(Value: Boolean); begin if FVisible <> Value then begin FVisible := Value; if (not FAnimate) or (FAnimate and FCurrentIcon.Empty) then SetDefaultIcon; if not (csDesigning in ComponentState) then begin if FVisible then Refresh(NIM_ADD) else if not (csLoading in ComponentState) then begin if not Refresh(NIM_DELETE) then raise EOutOfResources.Create(STrayIconRemoveError); end; if FAnimate then FTimer.Enabled := Value; end; end; end; procedure TCustomTrayIcon.WindowProc(var Message: TMessage); ... var Point: TPoint; Shift: TShiftState; begin case Message.Msg of WM_QUERYENDSESSION: Message.Result := 1; WM_ENDSESSION: if TWmEndSession(Message).EndSession then Refresh(NIM_DELETE); ... end;
Delphi-Quellcode:
sein, denn normalerweise geht man ja davon aus, dass die Komponente mit dem Form ins Nirwana gezogen wird ... wozu also dieses Reagieren auf diese Nachricht ... scheint eigentlich überflüssig, da die Form aufgrund dieser Nachricht sich ja verabschiedet.
WM_ENDSESSION
Nein, ich verwende diese Komponente :) aber evtl. hilft das diese sporadischen TrayIcon-Hänger zu eliminieren |
AW: Das Problem mit dem vergessenem TrayIcon
Sieht interessant aus. Ich glaube ich bin etwas unvorbereitet in das Thema gerutscht. Seit Jahren denke ich dran, gestern habe ich die Frage gestellt, aber nicht geachtet, dass ich ein passendes Beispiel habe. Was mir aber gerade jetzt einfällt ist die Unregelmäßigkeit mit der das Problem auftritt. Jedes mal wenn das Problem auftrat, suchte ich was Neues. Und eine Zeit lang funktionierte es dann. Inzwischen frage ich mich ob das evtl. an Windows liegt. Auf jeden Fall habe ich jetzt genug neue Anregungen, so dass ich, sollte es wieder vorkommen, gezielter suchen kann.
Und an die Kollegen die glauben, dass ich seit 10 Jahren meine Programme über den Taskmanager beende: schönes Wochenende ;) |
AW: Das Problem mit dem vergessenem TrayIcon
Also, sämtliche Befehle, die das TNA bzw. Systray "refreshen" (bzw. genaugenommen Windows zum Auffrischen desselben auffordern), wie soll das denn funktionieren? Das kann das Programm doch nur, solang es nicht sich selbst beeendet hat, und so lang ist das Trayicon doch aktiv?! Oder kann man das Trayicon schon vorher deaktivieren, "disablen", "visible falsen", was auch immer?
|
AW: Das Problem mit dem vergessenem TrayIcon
Zitat:
|
AW: Das Problem mit dem vergessenem TrayIcon
Ja, Du hast recht, ich las nicht aufmerksam genug die bisherige Diskussion.
Momentan experimentiere ich mit der Version aus der Delphi-Fundgrube (die wohl Popovs Ausführungen zugrundeliegt), es funktioniert allerdings zuverlässig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz