關於 trayicon 中popupmenu 的怪問題 |
答題得分者是:nlj859
|
terence_lee
初階會員 發表:62 回覆:82 積分:28 註冊:2004-07-15 發送簡訊給我 |
各位先進好:
小弟日前使用trayicon 時,發生我的mainForm 縮到最小時,在點選TrayIcon PopupMenu時,
Mainform 表單會自己跑了出來,經小弟反覆測試發現一個規則. 1.當我的 Mainform 的Visible設為true時,不會有此問題,但是會發生另一個問題(右下角PopupMenu點選出來後
縮不回去,卡在視窗左下角) 1.當我的 Mainform 的Visible設為false時,點選其他地方時,TrayIcon PopupMenu他會自然消失,
但是點選的時侯,MainForm 表單會自動出現出現,然後一直出現在視窗中央. 不知各位先進有無此問題,可為小弟解答,謝謝...
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
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 發送簡訊給我 |
謝謝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 發送簡訊給我 |
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 發送簡訊給我 |
謝謝 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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |