Thema: Delphi Tryicon in unit ?

Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Tryicon in unit ?

  Alt 23. Apr 2006, 14:49
Hallo,
bei meiner suche wie ich am einfachsten das icon neben der uhr also in der TNa hinbekomme bin ich auf diesen eintrag gestoßen:
http://www.delphipraxis.net/internal...&highlight=tna
den code habe ich so wie er ist in eine unit geschrieben:
Delphi-Quellcode:
unit uTyIcon;

interface

uses windows,Messages,ShellApi,forms,dialogs;

type
  TTryIcon = class
  private
  public
    IconData: TNotifyIconData;
    Handle:hwnd;
    form:TForm;
    procedure init(phandle:hwnd);
    procedure WndProc(var Msg: TMessage);
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;

  end;

implementation

procedure TTryIcon.init(phandle:hwnd);
begin
//Application.ShowMainForm := False; //Programm gar nicht erst anzeigen
  handle:=phandle;
  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 := 'Dies ist ein TNA-Icon';
  //Shell_NotifyIcon(NIM_ADD, @IconData); // fügt das Icon ein end;
end;

// auf Mausklicks reagieren, Fensterprozedur erweitern
procedure TTryIcon.WndProc(var Msg: TMessage);
var
  Point: TPoint;
begin
  if Msg.Msg = WM_USER + 20 then
  begin
    case Msg.lParam of
      WM_RBUTTONDOWN:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(Point);
// PopUpMenu1.PopUp(Point.X, Point.Y);
        end;
      WM_LBUTTONDOWN:
        begin
          //ShowMessage('links runter');
        end;
      WM_LBUTTONDBLCLK:
        begin
          Form.Show;
          // Icon nur anzeigen wenn Fenster minimiert
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end;
  inherited;
end;
// beim Minimieren Fomr verstecken und Icon in die TNA

procedure TTryIcon.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    form.Hide;
    // Icon nur anzeigen wenn Fenster minimiert
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end
  else
    inherited;
end;

end.
doch er macht leider nichts wenn ich ihn aufrufe:
installisieren tue ich die klasse in der create funktion vom form1
hat da jemmand eine kleine idee woran das liegen könnte und wie ich es umgehen kann ?
weil ich würde gerne diesen code auslagern !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat