![]() |
Programmicon verschwendet bei Mouseover aus der TNA
Hallo!
Ich lasse bei meinem Programm, wenn es minimiert wird, dass Icon in die TNA packen. Ein Anwender hat nun das Problem, dass das Icon bei einem Mouseover verschwindet und er kann nicht mehr auf das Programm zugreifen. Ich habe damals mal einen Code dafür gefunden.
Delphi-Quellcode:
uses CoolTrayIcon
Delphi-Quellcode:
const
WM_TASKBAREVENT = WM_USER + 1;
Delphi-Quellcode:
procedure WndProc(var Msg: TMessage); override;
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
Delphi-Quellcode:
Im Form-Create:
////////////////////////////////////////////////////////////////////////////////
// auf Mausklicks reagieren, Fensterprozedur erweitern procedure THauptform.WndProc(var Msg: TMessage); var Point: TPoint; begin // WM_USER + 20 ist unsere TNA Icon Nachricht if Msg.Msg = WM_USER + 20 then begin // im lParam steht die Nachricht case Msg.lParam of // rechte Taste für Menü WM_RBUTTONDOWN: begin SetForegroundWindow(Handle); GetCursorPos(Point); PopUpMenu1.PopUp(Point.X, Point.Y); end; // linke Taste WM_LBUTTONDOWN: begin //ShowMessage('links runter'); end; // Doppelklick WM_LBUTTONDBLCLK: begin // Fenster anzeigen Hauptform.Show; // Icon entfernen Shell_NotifyIcon(NIM_DELETE, @IconData); end; end; end // Taskbar wurde im System registriert, Icon einfügen else if Msg.Msg = TaskBarNewReg then begin Shell_NotifyIcon(NIM_ADD, @IconData); end; inherited; end; //////////////////////////////////////////////////////////////////////////////// // beim Minimieren Form verstecken und Icon in die TNA procedure THauptform.WMSysCommand(var Message: TWMSysCommand); begin // Fenster wurde minimiert if Message.CmdType and $FFF0 = SC_MINIMIZE then begin Hide; // Icon in der TNA anzeigen Shell_NotifyIcon(NIM_ADD, @IconData); end else inherited; end; //////////////////////////////////////////////////////////////////////////////// // Beim Beenden Icon entfernen procedure THauptform.FormDestroy(Sender: TObject); begin Shell_NotifyIcon(NIM_DELETE, @IconData); end; //////////////////////////////////////////////////////////////////////////////// // Beim Erstellen des Formulares TNotifyIconData-Struktur initialisieren
Delphi-Quellcode:
Er benutzt, genau wie ich, WindowsXP SP2.
// Message ID für Message merken, die gesendet wird, wenn die Taskbar im
// System registriert wird. TaskBarNewReg := RegisterWindowMessage('TaskbarCreated'); ///IconData Struktur füllen IconData.cbSize := SizeOf(IconData); IconData.Wnd := Handle; IconData.uID := 100; IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP; IconData.uCallBackMessage := WM_USER + 20; IconData.hIcon := Application.Icon.Handle; IconData.szTip := 'VPlan+ v1.2.3 /8'; // Icon einfügen. Bei Bedarf sofort //Shell_NotifyIcon(NIM_ADD, @IconData); Hat vlt jemand ähnlcihe Erfahrungen und kann mir sagen, wie man das Problem löst? |
Re: Programmicon verschwendet bei Mouseover aus der TNA
in aller Regel verschwindet das Icon wenn eine Interaktion mit dem Trayicon erfolgt (Mouseover etc.) und die Nachricht dafür nicht an das angegebene Handle gesendet werden kann. Das kommt vor wenn zum Beispiel das angegebene Handle aus deinem FormCreate nicht mehr existent ist weil intern das Fenster neu erzeugt wurde.
Was mich wundert. Du bindest in den Uses das CoolTrayIcon ein aber am Ende nutzt du die Komponente gar nicht sondern machst trotzdem alles direkt (Icon registrieren etc.). Wenn du die Komponente verwendest sollte dein Problem verschwunden sein weil die Komponente intern ein eigenes Fenster erzeugt was über die ganze Zeit erhalten bleibt und nicht durch Anzeigen des Fensters eventuell neu erstellt wird. |
Re: Programmicon verschwendet bei Mouseover aus der TNA
Mal ganz davon abgesehn, dass du vollkommen Recht hast, habe ich jetzt komplett auf's CoolTrayIcon umgestellt. Das Problem besteht bei diesem User aber immer noch.
|
Re: Programmicon verschwendet bei Mouseover aus der TNA
Hat der User vielleicht Dein Programm komplett geschlossen?
Dann bleibt nämlich manchmal das Icon in der TNA, obwohl das Programm nicht mehr läuft. Erst bei Drüberfahren merkt Windows schliesslich, dass dieses Icon entfernt werden muss. Als guter Tip kommt da immer: "Das Kreuz oben rechts soll das Programm in die TNA minimieren, nicht komplett schliessen". |
Re: Programmicon verschwendet bei Mouseover aus der TNA
Zitat:
Zitat:
|
Re: Programmicon verschwendet bei Mouseover aus der TNA
Zitat:
Nun gehen alle meine TNA-Programm nicht mehr komplett weg, sondern werden in die TNA minimiert. Und ich hab's so eigentlich auch lieber. |
Re: Programmicon verschwendet bei Mouseover aus der TNA
Zitat:
|
Re: Programmicon verschwendet bei Mouseover aus der TNA
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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