Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по System tray.После выхода из программы ярлык не исчезает [D7, XP]


Michael5 ©   (2006-02-27 21:14:00) 

Программа добавляет свой ярлык в трей. После закрытия ярлык остается в трее, и исчезает только после наведения на него мышью. Пробовал обновлять рабочий стол в процедуре FormDestroy - не помогает.
Подскажите пожалуйста, как от этого бага избавиться?!

И еще, если это несложно: картинка иконки в трее по умолчанию (стандартная, дельфи). А как добавить свою?

...Взял чей-то готовый компонент, TrayIcon (устанавливает вкладку 'MyComp', [TTrayIcon]), но не понял, как он работает, а то бы тут глупых вопросов не задавал бы...

на всякий случай код добавления в трей:
procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
begin
{обрабатываем события на иконке в трее}
  case Msg.LParam of
     WM_LBUTTONDOWN: Form1.Visible := true;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  try
     with tray do begin
        cbSize := SizeOf(TNotifyIconData);
        Wnd := Form1.Handle;
        uID := 1;
     end;
     Shell_NotifyIcon(NIM_DELETE, Addr(tray));
  finally
     Application.Terminate;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrayIcon := Application.Icon;
  with tray do begin
     cbSize := SizeOf(TNotifyIconData);
     Wnd := Form1.Handle;
     uID := 1;
     uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
     uCallBackMessage := WM_NOTIFYTRAYICON;
     hIcon := TrayIcon.Handle;
     szTip := ('Это мое приложение в трее');
  end;
  Shell_NotifyIcon(NIM_ADD, Addr(tray));
end;

procedure TForm1.GoToTrayButtonClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.ControlWindow(var Msg: TMessage);
begin
  if ((Msg.WParam = SC_MINIMIZE) or (Msg.WParam = 61536)) then //61536 - при нажатии на крестик
  begin
     Form1.Visible := false;
  end
  else
     inherited;
end;


Michael5   (2006-02-28 19:59:00) [1]

Гаврила, спасибо, где искать иконку, понял, и с треем тоже осенило:
На самом деле событие TForm1.FormDestroy при закрытии формы не наступает, а наступает TForm1.OnClose, туда помещаю код, и все работает :)


Гаврила   (2006-02-27 23:01:00) [2]


>procedure TForm1.FormDestroy(Sender: TObject);
>begin
>  try
>     with tray do begin
>        cbSize := SizeOf(TNotifyIconData);
>        Wnd := Form1.Handle;
>        uID := 1;
>     end;
>     Shell_NotifyIcon(NIM_DELETE, Addr(tray));
>  finally
>     Application.Terminate;
>  end;
> end;


По моему, ой

> картинка иконки в трее по умолчанию (стандартная,
> дельфи).

По умолчанию, иконка от твоего Application(.Icon)


Наверх

Титульная страница Поиск, карта сайта Написать письмо