Тема: CoolTrayIcon
Показать сообщение отдельно

  #9  
Старый 02.12.2009, 02:18
Markus_13
Познающий
Регистрация: 19.02.2009
Сообщений: 83
С нами: 9065564

Репутация: 50
По умолчанию

имхо - бред - для подобной мелочи юзать какие-то компоненты, есть прекрасная функция в ShellApi - называется Shell_NotifyIcon

Пример приложения, сворачивающегося в трей:
Код:
unit Unit1;
interface
uses Windows,Messages,SysUtils,Forms,ShellApi;
const WM_ICO_0D=WM_USER+13; ticID=12345;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
//месага отсылаемая окну
    procedure wmIco(var msg:TMessage);message WM_ICO_0D;
  end;

var Form1:TForm1;

implementation

//процедура добавления иконки в трэй (разобраться несложно)
procedure trayAdd(win:tHandle;id:cardinal;ico:hIcon;
msg:cardinal;tip:string);var nid:TNotifyIconData;
begin fillChar(nid,sizeOf(tNotifyIconData),0);with nid do
begin cbSize:=sizeOf(tNotifyIconData);wnd:=win;uID:=id;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage:=msg;hIcon:=ico;if length(tip)>63 then
setLength(tip,63);strPCopy(szTip,tip);end;
Shell_NotifyIcon(NIM_ADD,@nid);end;

//процедура удаления иконки
procedure trayDel(win:tHandle;n:Integer);var nid:tNotifyIconData;
begin with nid do begin cbSize:=sizeOf(tNotifyIconData);
wnd:=win;uID:=n;end;Shell_NotifyIcon(NIM_DELETE,@nid);end;

{$R *.dfm}

procedure TForm1.wmIco(var msg:TMessage);begin
//если кликнули по иконке левой или правой кнопкой мыши
if(msg.lParam=$0202)or(msg.lParam=$0205)then begin
//"переключаем" видимость окна
if isWindowVisible(Form1.Handle)then showWindow(Form1.Handle,sw_hide)
else showWindow(Form1.Handle,sw_show);
end;end;

procedure TForm1.FormCreate(Sender: TObject);begin
//добавляем иконку при создании формы
trayAdd(Handle,ticID,application.Icon.Handle,wm_ico_0d,application.Title);end;

procedure TForm1.FormActivate(Sender: TObject);begin
//убираем окно проги с панели приложений
ShowWindow(application.Handle,sw_hide);end;

procedure TForm1.FormDestroy(Sender: TObject);begin
//удаляем иконку при уничтожении формы
trayDel(Form1.Handle,ticid);end;

end.
 
Ответить с цитированием