Tray Icon 처리
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ShellAPI, Menus;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
PopupMenu1: TPopupMenu;
CLOSE1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CLOSE1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
procedure WndProc(var Message: TMessage);override;
procedure ViewPopUp(var AMsg: TWMRButtonDown );
public
{ Public declarations }
end;
var
Form1: TForm1;
IconData : TNotifyIconData;
implementation
{$R *.dfm}
procedure TForm1.WndProc;
begin
case Message.Msg of
WM_USER + 1: case Message.lParam of
WM_LBUTTONDOWN : begin
Show;
end;
WM_RBUTTONDOWN : begin
ViewPopUp(TWMRButtonDown(Message));
end;
end;
end;
inherited;
end;
procedure TForm1.ViewPopUp(var AMsg : TWMRButtonDown );
var PtMouse : TPoint;
begin
//현재의 마우스 포인터를 얻는다
GetCursorPos(PtMouse);
//팝업 메뉴를 띄운다.
PopUpMenu1.PopUp(PtMouse.X, PtMouse.Y);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var TrayIcon : TIcon;
begin
// Tray Icon 그림을 Load한다.
TrayIcon := TIcon.Create;
TrayIcon.LoadFromFile('.\BIKE.ico');
with IconData do begin
cbSize := SizeOf(IconData);
Wnd := Handle; // 델파이에서는 Wnd로 바뀌었음
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 1;
hIcon := TrayIcon.Handle;
szTip := 'Tray Icon Test...';
end;
Hide; //폼을 숨긴다.
Shell_NotifyIcon ( NIM_ADD, @IconData );//트레이 아이콘 생성
TrayIcon.Free; //필요없으므로 해제
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon(NIM_DELETE, @IconData ); //TrayIcon을 없애준다.
Action := CaFree;
end;
procedure TForm1.CLOSE1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
MessageBox(IconData.Wnd, '편견을 버리라니까!!!','편견버리기',1);
end;
procedure TForm1.N2Click(Sender: TObject);
begin
MessageBox(IconData.Wnd, '한번이요~~~','첫번쥑이기',1);
MessageBox(IconData.Wnd, '두번이요~~~','두번째쥑이기',1);
end;
end.