질답게시판에 올라와잇던 트레이 팝업 관련 코드에 팝업메뉴를 붙여봤습니다.
그런데 창이 최소화되었을경우엔 트레이에서 오른쪽 클릭시 팝업이 뜨는데
창이 활성화된 상태에선 제대로 나타나지도 않는군요
왜 이런 현상이 나타나는지 머가 잘못된건지 답변부탁드립니다.
다음은 예제코드입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RxGIF, ExtCtrls, WinHoverButton, Menus, RXShell, StdCtrls, ScktComp,
ComObj,shellapi, RxMenus, Animate, GIFCtrl, ComCtrls;
type
TForm1 = class(TForm)
Popup: TPopupMenu;
TEst1: TMenuItem;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WndProc( var Message : TMessage ); override;
end;
var
Form1: TForm1;
iconData : TNotifyIconData;
implementation
{$R *.DFM}
const MY_SHOWFORM_ID = WM_USER+1;
procedure TForm1.WndProc( var Message : TMessage );
var
p : TPoint;
begin
case Message.Msg of
//아이콘에 더블클릭시
MY_SHOWFORM_ID:
case Message.lParam of
WM_LBUTTONDBLCLK: begin
//Form_HIDE := False;
ShowWindow(Handle, SW_SHOWNORMAL);
end;
WM_RBUTTONDOWN: begin
GetCursorPos(p);
setForegroundWindow( Application.handle);
Popup.Popup(p.x, p.y);
setForegroundWindow( Application.handle);
// 마우스의 위치를 알아내서 그위치에 팝업메뉴를 띄운다
end;
end;
//폼이 최소될때는
WM_SysCommand:
begin
{
if TWMSysCommand(Message).CmdType and $FFF0 = SC_MINIMIZE then begin
TWMSysCommand(Message).CmdType := 0;
ShowWindow(Handle, SW_HIDE);
//Form_HIDE := True;
end;}
end;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
wnd : HWND;
Form_Caption : string;
begin
with IconData do
begin
cbSize := SizeOf ( IconData );
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 1;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon( NIM_ADD, @IconData );
//Form_HIDE := True;
// 프로그램의 아이콘을 트레이에...
end;
end.
//Form_HIDE := False;
----> ShowWindow(Handle, SW_SHOWNORMAL);
이부분을 application.BringToFront;
로 해보세요
end;