Консультация № 70925
14.01.2007, 19:00
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Подскажите пожалйста, как мне сделать программу, при запуске которой появляется иконка в трее, и, щелкнув по этой иконке, появляется меню (общий вид). Заранее спасибо!

Обсуждение

Неизвестный
14.01.2007, 19:16
общий
это ответ
Здравствуйте, Bingo!
В приложении текст программы. На форме - mainmenu с пунктом "выход". Иконка - в файле icon.ico.

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ShellApi, StdCtrls;const MYWM_NOTIFYICON = WM_USER + 100; MyIconID = 100;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; ShowItem: TMenuItem; N1: TMenuItem; Edit1: TEdit; Edit2: TEdit; XiButton1: TXiButton; mxStatusBar1: TmxStatusBar; procedure FormDestroy(Sender: TObject); procedure N1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public procedure MYWMNOTIFYICON(var Message: TMessage); message MYWM_NOTIFYICON; end;var Form1: TForm1;implementation{$R *.dfm}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.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; END;END;procedure TForm1.FormDestroy(Sender: TObject);begin MyTaskBarDeleteIcon(Handle, MyIconID);end;procedure TForm1.N1Click(Sender: TObject);beginclose;end;procedure TForm1.FormCreate(Sender: TObject);begin MyTaskBarAddIcon(Handle, MyIconID, ExtractIcon(Handle,‘icon.ico‘,0) , ‘Example‘);end;end.
Форма ответа