안녕하세요.
이곳에 많이 방문했는데 등록하는 것은 이번이 처음이네요.
다름이 아니고, 제가 만들려고 하는 것은 application이 처음 실행이 될때는
메인폼이 화면에 보이지않게 실행되면서 system tray에 등록이 되고,
tray에 있는 icon을 더블클릭했을때, 또는 다른
프로그램에서 실행되도록 호출했을때에만, 화면에 보이도록 하게하고 싶습니다.
system tray에 등록하는것까지는 했는데 처음실행시 메인폼을 보이지 않게 하는 부분이 잘되지 않네요. 그래서 다음과 같이 했는데, formpaint event 를 이용하지 않고
다르게 할수 있는지 답변주시면 감사하겠습니다. 화면에 보였다가 없어지니까 좀
신경이 쓰여서요..
procedure Tfmain.FormCreate(Sender: TObject);
begin
// 외부 프로그램에서 호출했는지를 체크하는 부분
if (ParamStr(1) <> 'show') then
gb_create := false
else
gb_create := true;
// system tray에 등록하는 부분
New(NotifyStruc);
NotifyStruc^.cbSize := SizeOf(NotifyStruc^);
NotifyStruc^.Wnd := Handle;
NotifyStruc^.uID := 1;
NotifyStruc^.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
NotifyStruc^.uCallbackMessage := WM_MYMESSAGE; {User defined message}
NotifyStruc^.hIcon := frmc1100.Image1.Picture.Icon.Handle;
NotifyStruc^.szTip := 'test';
{The auto parameter tells it to create the icon on startup}
Shell_NotifyIcon(NIM_ADD,NotifyStruc);
end;
procedure Tfmain.FormPaint(Sender: TObject);
begin
// 외부에서 호출했으면 보이게 실행하고 아니면 보이지 않게 한다.
if (gb_create = false) then begin
application.minimize;
ShowWindow(Application.Handle,SW_HIDE);
gb_create := true;
end
end;
procedure Tfmain.TrayMessage(var Msg: TMessage);
var ClassName : array[0..30] of char;
Title : array[0..20] of char;
WND : HWND;
FirstWnd : HWND;
begin
{If the right or left button is pressed then we display a message}
{If parameter auto used then we make form1 visible and show the}
{program in the taskbar}
if (Msg.LParam=WM_LBUTTONDBLCLK) then begin
SetForegroundWindow(Application.Handle);
ShowWindow(Application.Handle,SW_RESTORE);
end;
end;
델파이 팁모아란에 있는 <[팁] 시작시 최소 상태로 프로그램 실행> 에서
해답을 구했습니다.
application 을 최소상태로 실행한다음, taskbar 에서 없애면 되더라구요.
답변주신분들께 감사드립니다...