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

關於 trayicon 中popupmenu 的怪問題

答題得分者是:nlj859
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-23 11:22:29 IP:61.221.xxx.xxx 未訂閱
各位先進好: 小弟日前使用trayicon 時,發生我的mainForm 縮到最小時,在點選TrayIcon PopupMenu時, Mainform 表單會自己跑了出來,經小弟反覆測試發現一個規則. 1.當我的 Mainform 的Visible設為true時,不會有此問題,但是會發生另一個問題(右下角PopupMenu點選出來後 縮不回去,卡在視窗左下角) 1.當我的 Mainform 的Visible設為false時,點選其他地方時,TrayIcon PopupMenu他會自然消失, 但是點選的時侯,MainForm 表單會自動出現出現,然後一直出現在視窗中央. 不知各位先進有無此問題,可為小弟解答,謝謝...
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-23 12:09:21 IP:219.80.xxx.xxx 未訂閱
hello terence_lee,    
引言: 各位先進好: 小弟日前使用trayicon 時,發生我的mainForm 縮到最小時,在點選TrayIcon PopupMenu時, Mainform 表單會自己跑了出來,經小弟反覆測試發現一個規則. 我的習慣是按滑鼠右鍵出現popupMenu,按左鍵兩下放大MainForm 1.當我的 Mainform 的Visible設為true時,不會有此問題,但是會發生另一個問題(右下角PopupMenu點選出來後 縮不回去,卡在視窗左下角)是右下角吧,為何PopupMenu點選出來後,還要縮回去? Mainform 的Visible設為true時,按下PopupMenu後,MainForm會出來,但是右下角的縮圖一樣存在,這是正常的. 2.當我的 Mainform 的Visible設為false時,點選其他地方時,TrayIcon PopupMenu他會自然消失, 但是點選的時侯,MainForm 表單會自動出現出現,然後一直出現在視窗中央. Mainform 的Visible設為false時,你還要做些判斷動作,否則不會縮到右下角. 不知各位先進有無此問題,可為小弟解答,謝謝...
我的用法是,在Form上拉一個TrayIcon和一個PopupMenu,屬性設定如下: TrayIcon1->PopupMenu=PopupMenu1 TrayIcon1->PopMenuOn=imRightClickUp TrayIcon1->RestoreOn=imLeftDoubleClick TrayIcon1->Visible=true 可否把你的部份設定或程式碼附上來呢? 發表人 - nlj859 於 2004/08/23 12:17:27
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-23 12:41:08 IP:211.74.xxx.xxx 未訂閱
謝謝nlj859大大的回應! 想請問你 Mainform 的Visible設為true時,按下PopupMenu後,MainForm會出來,但是右下角的trayicon為何PopupMenu點選出來後,還要縮回去?. 其實在右下角的PopupMenu點出來後,有可能不想選擇任何功能,但正常情形下,隨便在window 任何一個地方按mouse 一下,功能表就縮回去了,但在我的情況下,他都縮不回去,使用者一定要選一個功能表才能收起來.... 所以如果點選功能表時,mainform 表單原本就會跑上來,那小弟就懂了,小弟還以為別人的點功能表,主form 都不會出來,只有我的才會... 所以我現在方式是把restoreon 設的回popupon的按鍵一樣,然後在OnRestore中加入 frmMain->Hide(),讓他縮小去,只是可惜的是..他是縮到工具列上,而不是 縮到右下角原本的圖示...!!_!! 再次謝謝大大熱烈的回應..^_^
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-23 13:03:17 IP:219.80.xxx.xxx 未訂閱
hello terence_lee,    使用frmMain->Hide();只是把Form隱藏起來而已呀,它並不會縮小在右下角,應該要使用:
TrayIcon1->Minimize();
如果不行的話,就把你PopupMenu,裡面的那幾個item按下之後的程式碼附上來,因為目前為止你都沒提到你的那些程式碼是如何寫的. 另外,請參考一下這篇文章 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=55098 發表人 - nlj859 於 2004/08/23 13:04:39
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-23 15:50:49 IP:61.221.xxx.xxx 未訂閱
謝謝 nlj859 這麼快速的回應...我popupmenu的item是指功能表的功能嗎... 那個部分我都沒有寫程式碼丫...因為就卡在最小化,所以沒往下寫說..... 我只有加 MainForm->Hide();所以都沒有縮到右下角..可是我加了TrayIcon1->Minimize();之後每次點選功能表,都會看到form縮到右下角的那個影子說... 雖然可以假裝看不見,但是~~很明顯說... P.S 我的主FORM(visible=false) 上只有兩個元件一個是popupmenu ,一個是trayicon 而已.. 程式只有加在trayicon上...內容如下: 屬性如下: object TrayIcon1: TTrayIcon Visible = True PopupMenu = PopupMenu1 Hide = True RestoreOn = imLeftClickUp PopupMenuOn = imRightClickUp OnRestore = TrayIcon1Restore OnClick = TrayIcon1Click OnCreate = TrayIcon1Create Left = 32 end 程式碼的部分 void __fastcall TfrmMain::TrayIcon1Restore(TObject *Sender) { frmMain->Hide(); TrayIcon1->Minimize(); } //--------------------------------------------------------------- void __fastcall TfrmMain::TrayIcon1Click(TObject *Sender) { //TrayIcon1->Minimize(); TrayIcon1->Restore(); }
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-23 16:19:43 IP:61.221.xxx.xxx 未訂閱
nlj859大大: 小弟胡亂加了幾句,忽然可以了,以下是我的程式碼 void __fastcall TfrmMain::TrayIcon1Restore(TObject *Sender) { frmMain->Hide(); } void __fastcall TfrmMain::TrayIcon1Click(TObject *Sender) { //讓他第一次跑的時侯,去執行,frmMain->Hide(),接下來第二次, 第三次就不會再跑出主form了,說實在我也不太懂為什麼.... 不過可以 if (blIcon==true) //使用一個全域變數其值設為true { TrayIcon1->Restore(); blIcon=false; } } 再次謝謝nlj859對小弟的啟發與教導^_^
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-23 16:28:58 IP:163.28.xxx.xxx 未訂閱
Hello terence_lee,    我不太懂:"加了TrayIcon1->Minimize();之後每次點選功能表,都會看到form縮到右下角的那個影子"是什麼意思? 不管怎樣,先不用TrayIcon的那些event,試試底下做法: 1.拉一個TrayIcon和PopupMenu到Form上 2.於PopupMenu建立兩個Item,一個為"隱藏"(N1),另一個為"開啟"(N2) 3.Trayicon設定如下: TrayIcon1->PopupMenu=PopupMenu1 TrayIcon1->PopMenuOn=imRightClickUp TrayIcon1->RestoreOn=imNone TrayIcon1->Visible=false 4.Form1上的PopupMenu屬性設為PopupMenu1 5.FormCreate加入
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  N1->Enabled=true;
  N2->Enabled=false;
}
6.N1Click程式如下(點選PopupMenu的"隱藏那個Item"):
void __fastcall TForm1::N1Click(TObject *Sender)
{
  //置於系統列
  if (TrayIcon1->Visible==false)
     {
      N1->Enabled=false;
      N2->Enabled=true;
      TrayIcon1->Visible=true;
      TrayIcon1->Minimize();
     }
}
7.N2Click程式如下(點選PopupMenu的"開啟那個Item"):
void __fastcall TForm1::N2Click(TObject *Sender)
{
  //放置於桌面
  if (TrayIcon1->Visible == true)
  {
    N1->Enabled=true;
    N2->Enabled=false;
    TrayIcon1->Visible = false;
    TrayIcon1->Restore();
  }
}
8.Run 看一下這樣是不是符合你的需求,不是的話,再詳細說明吧. 發表人 - nlj859 於 2004/08/23 16:45:47
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-24 08:29:46 IP:211.74.xxx.xxx 未訂閱
謝謝nlj859大大的回應,小弟測試後ok...^_^
系統時間:2024-04-29 5:48:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!