線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1505
推到 Plurk!
推到 Facebook!

System Tray icon上的問題

缺席
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-14 13:26:29 IP:203.198.xxx.xxx 未訂閱
我自已寫了一個Application,只有一張form 當minimize張form後,張form會hide而會在system tray 上出現該application 的icon ,在system tray 上的right click該icon會有popupmenu出現,而當popupmenu出現後,我click其他window物件時,popupmenu仍然存在,怎樣可以將它消失? 段code 應怎樣寫? 發表人 - superlowb 於 2003/06/14 13:27:07 發表人 - superlowb 於 2003/06/14 13:29:29
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-14 16:10:40 IP:61.66.xxx.xxx 未訂閱
在TrayIcon的OnMouseUp事件中 加入SetForegroundWindow(Handle)
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-15 00:03:58 IP:210.0.xxx.xxx 未訂閱
turboted兄 我不是用component(TrayICon),我整個System tray icon都是用code寫出來的,我是用Shell_NotifyIcon API寫出來的,那麼應怎樣解決我以上的問題呢?
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-16 09:48:05 IP:203.198.xxx.xxx 未訂閱
現把我所有code給你看看
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ShellAPI, Menus, StdCtrls;    const WM_MYTRAYNOTIFY=WM_USER +1 ;    type
  TForm1 = class(TForm)
    pm1: TPopupMenu;
    mnuShowFrm: TMenuItem;
    mnuCloseFrm: TMenuItem;
    Memo1: TMemo;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure mnuShowFrmClick(Sender: TObject);
    procedure mnuCloseFrmClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  
  private
    { Private declarations }
  public
    { Public declarations }
    procedure SetSysTrayIcon;
    procedure DelSysTrayIcon;
    procedure WndProc(var Msg:TMessage); override; //Tray icon's call back function
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;    var
  Form1: TForm1;    implementation    uses Unit2;    {$R *.DFM}    { TForm1 }    procedure TForm1.WndProc(var Msg: TMessage);
var lpt:TPoint;
    lCurAction,lCurPos:String;
begin
  if Msg.Msg = WM_MYTRAYNOTIFY then
  begin
    // ICON 的 uID
    {case Msg.WParam of
      200: curicon := 'blue icon mouse action: ';
      300: curicon := 'green icon mouse action: ';
    end;}
    GetCursorPos(lpt);
    lCurpos := 'X: '+IntToStr(lpt.X)+',  Y: '+IntToStr(lpt.Y);
    // 滑鼠的按鍵動作
    case Msg.LParam of
      WM_LBUTTONDOWN:   lCuraction := 'Left Button Down ';
      WM_RBUTTONDOWN:
      begin
        pm1.Popup(lpt.x,lpt.y);
        lCuraction := 'Right Button Down ';
      end;
      WM_LBUTTONUP:     lCuraction := 'Left Button Up ';
      WM_RBUTTONUP:     lCuraction := 'Right Button up ';
      WM_MOUSEMOVE:     lCuraction := 'Mouse Move ';
      WM_LBUTTONDBLCLK: lCuraction := 'Left Button DoubleClick ';
      WM_RBUTTONDBLCLK: lCuraction := 'Right Button DoubleClick ';
    end;
    memo1.Lines.Add(lCuraction + ' ' + lCurpos);
  end;
  inherited;
end;    procedure TForm1.SetSysTrayIcon;
var lTrayIconNfy:TNotifyIconData;
begin
  lTrayIconNfy.cbSize := sizeof(lTrayIconNfy);
  lTrayIconNfy.Wnd := self.Handle;
  // lTrayIconNfy 設定為 200
  lTrayIconNfy.uID := 200;
  lTrayIconNfy.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  // NIF_MESSAGE 設定 message wm_xxx
  // NIF_ICON 設定 ICON
  // NIF_TIP 設定 提示訊息
  lTrayIconNfy.szTip:='Hello World';
  lTrayIconNfy.hIcon := Self.Icon.Handle;
  lTrayIconNfy.uCallbackMessage := WM_MYTRAYNOTIFY;
  //StrPCopy(lTrayIconNfy.szTip,'Test Hit');
  Shell_NotifyIcon(NIM_ADD, @lTrayIconNfy);
end;    procedure TForm1.DelSysTrayIcon;
var lTrayIconNfy:TNotifyIconData;
begin
  lTrayIconNfy.cbSize := sizeof(lTrayIconNfy);
  lTrayIconNfy.Wnd := self.Handle;
  lTrayIconNfy.uID := 200;
  Shell_NotifyIcon(NIM_DELETE, @lTrayIconNfy);
end;    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action:=cafree;
end;    procedure TForm1.FormDestroy(Sender: TObject);
begin
  DelSysTrayIcon;
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  SetSysTrayIcon;
end;    procedure TForm1.mnuShowFrmClick(Sender: TObject);
begin
  Form1.show;
end;    procedure TForm1.mnuCloseFrmClick(Sender: TObject);
begin
  Form1.close;
end;    procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  if (Message.CmdType and $FFF0 = SC_MINIMIZE) or (Message.CmdType and $FFF0 = SC_CLOSE) then
    form1.hide
  else
    inherited;
end;
end.
當minimize張form後,張form會hide而會在system tray 上出現該application 的icon ,在system tray 上的right click該icon會有popupmenu出現,而當popupmenu出現後,我click其他window物件時,popupmenu仍然存在,怎樣可以將它消失? 段code 應怎樣寫? 如果用SetForegroundWindow應把這句code寫在那裡? 發表人 - superlowb 於 2003/06/16 09:57:24
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-15 20:47:17 IP:61.221.xxx.xxx 未訂閱
引言: 我不是用component(TrayICon),我整個System tray icon都是用code寫出來的,我是用Shell_NotifyIcon API寫出來的,那麼應怎樣解決我以上的問題呢? 如果用SetForegroundWindow應把這句code寫在那裡?
SuperLowB 你好: 請參考以下的連結文章
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-05-08 13:05:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!