全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1952
推到 Plurk!
推到 Facebook!

關於PopupMenu的問題???

 
BOOK
一般會員


發表:19
回覆:18
積分:7
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-19 21:36:12 IP:163.28.xxx.xxx 未訂閱
請問: 當我程式最小化成TrayIcon時,我按滑鼠右鍵會Show出自訂的PopupMenu,若我想在任意地方上按滑鼠左鍵使PopupMenu消失,該如何做?? (PS.就像一般常駐程式一樣,雖然在圖示上按右鍵出現PopupMenu,只要移開滑鼠在其他地方按左鍵一下,PopupMenu就會消失) 謝謝!!
china20
一般會員


發表:1
回覆:19
積分:4
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-19 22:20:54 IP:61.16.xxx.xxx 未訂閱
可以用 message來做 const WM_TRAYICON = WM_USER 10; ......... procedure WMTrayIcon(var Message: TMessage); message WM_TRAYICON; procedure TfrmMain.WMTrayIcon(var message: TMessage); var POINT : TPOINT; begin if message.LParam = WM_RBUTTONDOWN then begin //右鍵訊息 end; if message.LParam = WM_LBUTTONDOWN then begin //左鍵訊息 end; end;
BOOK
一般會員


發表:19
回覆:18
積分:7
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-20 11:15:32 IP:163.28.xxx.xxx 未訂閱
對阿,就是不知道左鍵訊息裡要如何寫,才能使PopupMenu表單消失,而此訊息事件不是只能當滑鼠在圖示上才能作用,一般的常駐程式可以當你在畫面上的任一點按左鍵都會使PopupMenu消失說!! (PS.再請問一下,WM_USER 10是什麼意思阿,我看書上有人寫 WM_APP 0 或WM_USER 1這之間有何差別嗎??) 不論如何,謝謝你的幫助!!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-20 11:37:56 IP:163.29.xxx.xxx 未訂閱
程式最小化成TrayIcon時,我按滑鼠右鍵會Show出自訂的PopupMenu,若我想在任意地方上按滑鼠左鍵使PopupMenu消失
  TForm1=class(TForm)
...
    procedure FormCreate(Sender: TObject);
    procedure AppOnMessage(Var Msg:TMsg; var Handled:Boolean);
  private
...    const SC_UDF=$EFF0; //宣告一個System command,不要與原有衝突即可      implementation    {$R *.dfm}    procedure TForm1.FormCreate(Sender: TObject);
begin
//於systemMenu中加入自訂項目
  appendMenu(GetSystemMenu(Application.Handle,false),MF_STRING,SC_UDF,'new1'); 
// 將所有message先導向自訂之procedure
  application.OnMessage:=apponmessage;
end;    procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if msg.message = WM_SYSCOMMAND then //若message為 system command
    if msg.wparam = SC_UDF then  //command type為自訂型態
      showmessage('hi');  //執行你要的程式
end;
程式最小化成TrayIcon時按右鍵,送出WM_SYSCOMMAND之message, 故擴充此message如上即可 GetSystemMenu為一API-- 用來取得systemMenu AppendMenu為一API--為指定之menu增加item MF_STRING--增加之menuitem之顯示為一字串 SC_UDF--新增menuitem之commandtype 'new1'--顯示於popupMenu之Caption WM_USER 10是什麼意思阿,我看書上有人寫 WM_APP 0 或WM_USER 1這之間有何差別嗎 當自訂message時, 為使message編號不與原有之message編號衝突,必須有唯一之ID, WM_USER為目前ID之最大值 你要新增 message時,只要大於WM_USER小於65536即可, 故 1或 10均可 發表人 - ccchen 於 2002/06/20 11:43:38
BOOK
一般會員


發表:19
回覆:18
積分:7
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-20 12:31:03 IP:163.28.xxx.xxx 未訂閱
請問ccchen : 我無法讓已出現的PopupMenu"消失"阿???就是滑鼠移到任何一點(不一定在小圖示上)按滑鼠左鍵PopupMenu就不見了?? 謝謝!!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-06-20 14:10:01 IP:163.29.xxx.xxx 未訂閱
引言: 請問ccchen : 我無法讓已出現的PopupMenu"消失"阿???就是滑鼠移到任何一點(不一定在小圖示上)按滑鼠左鍵PopupMenu就不見了?? 謝謝!!
我是否有誤會你的意思, 前面之程式是否你要的,如果是,你不須做任何其他動作,當滑鼠不在PopupMenu上時按滑鼠左鍵,PopupMenu應自動不見. 想不如此反而更麻煩
wenjung
一般會員


發表:21
回覆:61
積分:21
註冊:2002-04-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-06-26 09:19:32 IP:210.71.xxx.xxx 未訂閱
試一下先點popup menu 的空白位置再點桌面的任一位置應該會不見
EC
一般會員


發表:0
回覆:3
積分:0
註冊:2003-12-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-12 16:08:00 IP:218.175.xxx.xxx 未訂閱
引言: procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean); begin if msg.message = WM_SYSCOMMAND then //若message為 system command if msg.wparam = SC_UDF then //command type為自訂型態 showmessage('hi'); //執行你要的程式 end;
我個人的經驗是 1) 要攔截B001的message 不論呼叫Shell_NotifyIcon時填入的pnid.uCallbackMessage是多少
void __fastcall TForm1::Intercept(TMsg& Msg, Boolean& Handled)
{
if ( 0xB001==Msg.message )
{ SetActiveWindow(Handle);
  TPoint MousePos;
  GetCursorPos(&MousePos);
  PopupMenu1->Popup(MousePos.x, MousePos.y);
  Handled=true;
}
else Handled=false;
}
include file中沒有任何macro被定義為literal B001, 只知道0x8000 through 0xBFFF are Messages reserved for future use by Windows.有誰知道這是什麼message? 2)Application->Intercept; Intercept必須是某個class的member, 不能是獨立的function, 否則不論怎麼cast都過不了
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-12 17:58:04 IP:202.39.xxx.xxx 未訂閱
參考這篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34498 --- Everything I say is a lie.
系統時間:2024-06-02 0:40:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!