Einzelnen Beitrag anzeigen

Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#1

Programmicon verschwendet bei Mouseover aus der TNA

  Alt 17. Apr 2008, 23:06
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?
Sven Kannenberg
  Mit Zitat antworten Zitat