업무/DELPHI

Tray Icon 처리

새벽여행 2006. 12. 11. 18:54

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.