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

請問我該如何把tray顯示右鍵選單,在任何位置按左鍵關閉它

答題得分者是:pcernet
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-02 02:27:04 IP:61.230.xxx.xxx 訂閱
http://bp3.blogger.com/_RE7dYdcDtCM/RtmtaWL3BrI/AAAAAAAAAKs/MVGLoOakgAc/s1600-h/trayicon.JPG
http://bp2.blogger.com/_RE7dYdcDtCM/Rtmr6GL3BoI/AAAAAAAAAKU/CqswoNBEnFY/s1600-h/trayicon2.JPG
以上為圖示

請問我該如何把tray顯示右鍵選單,在任何位置按左鍵關閉它,改到現在不知道如何來再下手。 <textarea class="delphi" rows="10" cols="60" name="code">unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI, Menus; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; PopupMenu1: TPopupMenu; asdf1: TMenuItem; N2342341: TMenuItem; N1: TMenuItem; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public procedure WndProc(var Msg: TMessage); override; // tray icon 的 call back function { Public declarations } end; const WM_MYTRAYNOTIFY=WM_USER 1; //定義 wm message var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var tray_nid: TNotifyIconData; tray_icon: TIcon; begin tray_icon:= TIcon.Create; tray_icon.LoadFromFile('COLOR_BL.ICO'); tray_nid.cbSize := sizeof(tray_nid); tray_nid.Wnd := self.Handle; // blueicon 設定uID為 200 tray_nid.uID := 200; tray_nid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; // NIF_MESSAGE 設定 message wm_xxx // NIF_ICON 設定 ICON // NIF_TIP 設定 提示訊息 tray_nid.hIcon := tray_icon.Handle; tray_nid.uCallbackMessage := WM_MYTRAYNOTIFY; StrPCopy(tray_nid.szTip, '工具任按鈕提示'); Shell_NotifyIcon(NIM_ADD, @tray_nid); tray_icon.Free; end; procedure TForm1.Button2Click(Sender: TObject); var tray_nid: TNotifyIconData; begin tray_nid.cbSize := sizeof(tray_nid); tray_nid.Wnd := self.Handle; // blueicon 設定為 200 tray_nid.uID := 200; Shell_NotifyIcon(NIM_DELETE, @tray_nid); end; procedure TForm1.WndProc(var Msg: TMessage); var pt: TPOINT; curpos, curaction, curicon: 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(pt); curpos := 'X: ' IntToStr(pt.X) ', Y: ' IntToStr(pt.Y); // 滑鼠的按鍵動作 case Msg.LParam of WM_LBUTTONDOWN: curaction := 'Left Button Down '; WM_RBUTTONDOWN: curaction := 'Right Button Down '; WM_LBUTTONUP: curaction := 'Left Button Up '; WM_RBUTTONUP: begin curaction := 'Right Button up '; popupmenu1.popup(pt.X,pt.Y ); end; WM_MOUSEMOVE: curaction := 'Mouse Move '; WM_LBUTTONDBLCLK: curaction := 'Left Button DoubleClick '; WM_RBUTTONDBLCLK: curaction := 'Right Button DoubleClick '; end; Memo1.Lines.Add(curicon ' ' curaction ' ' curpos); //訊息由目前的圖示,滑鼠位置及滑鼠按鍵 組成 end; inherited; end; end.</textarea>
編輯記錄
17kobe 重新編輯於 2007-09-02 02:29:59, 註解 無‧
17kobe 重新編輯於 2007-09-02 02:31:33, 註解 無‧
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-02 09:45:48 IP:61.218.xxx.xxx 未訂閱
在 tray icon 的 call back function :
var p : TPoint;

GetCursorPos(p);
SetForegroundWindow(Handle);
popupmenu1.Popup(p.x,p.y);
PostMessage(Handle,WM_NULL,0,0);

17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-02 13:41:31 IP:61.230.xxx.xxx 訂閱
我加下列這行就可以了
SetForegroundWindow(Handle);


這行不知道是做什麼用
PostMessage(Handle,WM_NULL,0,0);
系統時間:2024-04-20 7:29:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!