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.
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:
////////////////////////////////////////////////////////////////////////////////
// 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
Im Form-Create:
Delphi-Quellcode:
// 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);
Er benutzt, genau wie ich, WindowsXP SP2.
Hat vlt jemand ähnlcihe Erfahrungen und kann mir sagen, wie man das Problem löst?