Q&A

  • 트레이의 팝업관련 질문입니다.
질답게시판에 올라와잇던 트레이 팝업 관련 코드에 팝업메뉴를 붙여봤습니다.
그런데 창이 최소화되었을경우엔 트레이에서 오른쪽 클릭시 팝업이 뜨는데
창이 활성화된 상태에선 제대로 나타나지도 않는군요
왜 이런 현상이 나타나는지 머가 잘못된건지 답변부탁드립니다.

다음은 예제코드입니다.

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.

1  COMMENTS
  • Profile
    이경범 2003.02.08 20:26
                  WM_LBUTTONDBLCLK: begin
                                     //Form_HIDE := False;
    ---->                                 ShowWindow(Handle, SW_SHOWNORMAL);
    이부분을  application.BringToFront;
    로 해보세요

                  end;