Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как свернуть программу в трей (http://forum.oszone.net/showthread.php?t=29821)

fossil 13-04-2004 13:17 205931

Как можно сделать чтобы при запуске программа добавляла иконку в трей и при нажатии "Свернуть" сворачивалась в трей?

JCooper 13-04-2004 18:37 205932

fossil
Shell_NotifyIcon

fossil 13-04-2004 20:03 205933

Ну я в курсе. А где и как им пользоваться?
Я находил много статей и исходников по этой теме, но ничего непонятно.. Я вообще так понял что Shell_NotifyIcon это какой-то компонент, но где его брать незнаю. Объясните может на примере каком-нибдуь?

JCooper 13-04-2004 22:13 205934

fossil это апи функция, для ее использования необходимо включить в программу модуль ShellAPI.pas (если пишете на Делфи). Прошу прощения но я сейчас убегаю, подробнее об использовании ф-ции напишу чуть позже :)

fossil 14-04-2004 08:47 205935

хе-хе-хе :) ок..
Уже по этой небольшой статье появились вопросы ;)
Как включить в прогу модуль ShellAPI.pas?
Пишу на Delphi 7

[mzd] 14-04-2004 12:41 205936

В разделе interface подключаешь
Код:

uses ShellAPI

fossil 14-04-2004 13:02 205937

а потом?

[mzd] 14-04-2004 18:13 205938

Код:

type TForm1 = class(TForm)
...
protected
 PROCEDURE MYWMNOTIFYICON(VAR Message: TMessage); MESSAGE MYWM_NOTIFYICON;
...
FUNCTION MyTaskBarAddIcon(wnd: HWND; uID: integer; Icon: HICON; S: STRING): Boolean;
VAR tnid: TNOTIFYICONDATA;
BEGIN
  tnid.cbSize := SizeOf(TNOTIFYICONDATA);
  tnid.Wnd := wnd;
  tnid.uID := uID;
  tnid.uFlags := NIF_MESSAGE OR NIF_ICON OR NIF_TIP;
  tnid.uCallbackMessage := MYWM_NOTIFYICON;
  tnid.hIcon := Icon;
  Lstrcpyn(tnid.szTip, PChar(S), SizeOf(tnid.szTip));
  Result := Shell_NotifyIcon(NIM_ADD, @tnid);
END;

FUNCTION MyTaskBarDeleteIcon(wnd: HWND; uID: integer): Boolean;
VAR tnid: TNOTIFYICONDATA;
BEGIN
  tnid.cbSize := SizeOf(TNOTIFYICONDATA);
  tnid.Wnd := wnd;
  tnid.uID := uID;
  Result := Shell_NotifyIcon(NIM_DELETE, @tnid);
END;

FUNCTION MyTaskBarModifyIcon(wnd: HWND; uID: integer; Icon: HICON; S: STRING): Boolean;
VAR tnid: TNOTIFYICONDATA;
BEGIN
  tnid.cbSize := SizeOf(TNOTIFYICONDATA);
  tnid.Wnd := wnd;
  tnid.uID := uID;
  tnid.uFlags := NIF_MESSAGE OR NIF_ICON OR NIF_TIP;
  tnid.uCallbackMessage := MYWM_NOTIFYICON;
  tnid.hIcon := Icon;
  Lstrcpyn(tnid.szTip, PChar(S), SizeOf(tnid.szTip));
  Result := Shell_NotifyIcon(NIM_MODIFY, @tnid);
END;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
...
MyTaskBarAddIcon(Handle, MyIconID, Application.Icon.Handle, 'Имя проги');
...
end;
...
PROCEDURE TForm1.MYWMNOTIFYICON(VAR Message: TMessage);
VAR Cur: TPoint;
BEGIN
  IF Message.WParam = MyIconID THEN
    CASE Message.LParam OF
      WM_RBUTTONDOWN:
      BEGIN
        GetCursorPos(Cur);
        PopupMenu1.Popup(Cur.X, Cur.Y);
      END;
      WM_LBUTTONUP:
       BEGIN
        GetCursorPos(Cur);
        PopupMenu1.Popup(Cur.X, Cur.Y);
      END;
    END;
END;


fossil 15-04-2004 09:12 205939

Спасибо, но как-то не сразу вылазиет popup?!

[s]Исправлено: fossil, 9:19 15-04-2004[/s]


Время: 20:08.

Время: 20:08.
© OSzone.net 2001-