폼은 하나밖에없는데 트레이로 보내는 버튼을 누르면 폼은 사라지지 않은채 트레이에 아이콘이 나타납니다.
폼을사라지게하려면 어떻게해야하나요?
밑에는 소스입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,ShellApi, Menus, RXShell;
const MY_SHOWFORM_ID = WM_USER+1;
type
TForm1 = class(TForm)
Button1: TButton;
PopupMenu1: TPopupMenu;
dufrl1: TMenuItem;
N1: TMenuItem;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure dufrl1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
iconData : TNotifyIconData;
procedure WndProc ( var Message : TMessage ); override;
procedure ViewPopUp(var AMsg : TWMRButtonDown );
public
{ Public declarations }
end;
var
Form1: TForm1;
TrayI:TNOTIFYICONDATA; //트레이 구조체선언
implementation
{$R *.DFM}
procedure TForm1.ViewPopUp(var AMsg : TWMRButtonDown );
var PtMouse : TPoint;
begin
//현재의 마우스 포인터를 얻는다
GetCursorPos(PtMouse);
//팝업 메뉴를 띄운다.
PopUpMenu1.PopUp(PtMouse.X, PtMouse.Y);
end;
procedure TForm1.WndProc;
var
MouseCo : TPoint;
begin
case Message.Msg of
MY_SHOWFORM_ID:
case Message.lParam of
WM_RBUTTONDOWN:
begin
GetCursorPos(MouseCo);
SetForegroundWindow( Application.Handle );
Application.ProcessMessages;
Popupmenu1.Popup( Mouseco.X, Mouseco.Y );
end;
end;
end;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 폼을 트레이에 넣어준다.
ShowWindow (Application.Handle, SW_HIDE);
// 폼이 안 보임
Application.ShowMainForm:= False;
with IconData do
begin
cbSize := SizeOf ( IconData );
// 델파이에서는 Wnd로 바뀌었음
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := MY_SHOWFORM_ID;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
StrPCopy(szTip, '알람');
end;
Shell_NotifyIcon( NIM_ADD, @IconData );
end;
procedure TForm1.dufrl1Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@IconData);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
form1.show;
end;
end.