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

如何讓新產生的Form可以在工作列上多一個項目?

尚未結案
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-16 15:47:24 IP:203.70.xxx.xxx 未訂閱
Dear All, 請問一下, 我在程式裏產生一個Form時,當MainForm最小化或隱藏到TrayIcon時,所產生的Form也會跟著不見,有沒有什麼辦法,可以讓這種情形不會發生呢? ex:就像在ICQ or MSN Messanger產生一個新的Message Form後,就算主程式隱藏到TrayIcon去,Message Form 依可以在工作列看到,也不會跟著隱藏. 請大家幫個忙吧,謝謝!! Blowfish === Study, Study and Study ===
------
=== Study, Study and Study ===
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-16 15:51:52 IP:61.218.xxx.xxx 未訂閱
引言: Dear All, 請問一下, 我在程式裏產生一個Form時,當MainForm最小化或隱藏到TrayIcon時,所產生的Form也會跟著不見,有沒有什麼辦法,可以讓這種情形不會發生呢? ex:就像在ICQ or MSN Messanger產生一個新的Message Form後,就算主程式隱藏到TrayIcon去,Message Form 依可以在工作列看到,也不會跟著隱藏. 請大家幫個忙吧,謝謝!! Blowfish === Study, Study and Study ===
F:=TForm.Create(nil); F.Sohow;
------
︿︿
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-17 11:45:39 IP:203.70.xxx.xxx 未訂閱
引言: F:=TForm.Create(nil); F.Sohow;
謝謝cmf的回答,但試過你的方式還是不行哦.. 因為我是用BCB寫的,所以把它換成這樣寫:
 TMyForm *myFrm = new TMyForm(NULL);
 muFrm->Show();
出來的結果還是一樣,MainForm最小化的話,這個Form也會跟著最小化. 還有沒有其他方法呢?
=== Study, Study and Study ===
------
=== Study, Study and Study ===
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-17 15:22:22 IP:210.58.xxx.xxx 未訂閱
引言: 我在程式裏產生一個Form時,當MainForm最小化或隱藏到TrayIcon時,所產生的Form也會跟著不見,有沒有什麼辦法,可以讓這種情形不會發生呢? ex:就像在ICQ or MSN Messanger產生一個新的Message Form後,就算主程式隱藏到TrayIcon去,Message Form 依可以在工作列看到,也不會跟著隱藏.
假設你已經搞定TrayIcon, 就以動態新增了一個Form,Name is "MyForm"; 這是一個簡單的code...看看可否解決你的困擾.... < class="code"> //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TForm *newForm = new TForm(this); newForm->Name = "MyForm"; newForm->Width = 200; newForm->Height = 200; newForm->Top = 50; newForm->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) {[red] ::ShowWindow(Handle, SW_HIDE); ::ShowWindow(Application->Handle, SW_HIDE); for(int i=0; i<Form1->ComponentCount; i ) if(Components[i]->Name == "MyForm") { TForm *tmpForm = (TForm *)Components[i]; [red]::ShowWindow(tmpForm->Handle, SW_SHOW); } } //---------------------------------------------------------------------------
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-17 17:34:51 IP:203.70.xxx.xxx 未訂閱
引言: 假設你已經搞定TrayIcon, 就以動態新增了一個Form,Name is "MyForm"; 這是一個簡單的code...看看可否解決你的困擾.... < class="code"> //--------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TForm *newForm = new TForm(this); newForm->Name = [red]"MyForm"; newForm->Width = 200; newForm->Height = 200; newForm->Top = 50; newForm->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) {[red] ::ShowWindow(Handle, SW_HIDE); ::ShowWindow(Application->Handle, SW_HIDE); for(int i=0; i<Form1->ComponentCount; i ) if(Components[i]->Name == "MyForm") { TForm *tmpForm = (TForm *)Components[i]; ::ShowWindow(tmpForm->Handle, SW_SHOW); } } //--------------------------------------------------------------------
謝謝Cooky Kid這麼熱心提供這一段code. 但是這樣跟我的要求還是有點差距,因為你的code到最後會變成在工作作上都沒有item,只會在在system tray上有item而已,這樣看起來還是怪怪的. 我的希望是,如果程式都縮到system tray上去了,當收到某個訊息時,會pop-up一個視窗出來,而不用顯示MainForm. 這樣有辦法嗎? === Study, Study and Study ===
------
=== Study, Study and Study ===
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-17 19:48:12 IP:61.70.xxx.xxx 未訂閱
blowfish:          分成兩個執行檔,          當收到某個訊息時,          再呼叫 另一個執行檔    
------
︿︿
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-20 18:04:16 IP:210.58.xxx.xxx 未訂閱
引言: 謝謝Cooky Kid這麼熱心提供這一段code. 但是這樣跟我的要求還是有點差距,因為你的code到最後會變成在工作作上都沒有item,只會在在system tray上有item而已,這樣看起來還是怪怪的. 我的希望是,如果程式都縮到system tray上去了,當收到某個訊息時,會pop-up一個視窗出來,而不用顯示MainForm. 這樣有辦法嗎?
dear blowfish, 何不將你手上已經完成部分post出來? 這樣也省了他人重新撰寫的力氣,而可專注你的問題上....
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-06 14:33:14 IP:203.70.xxx.xxx 未訂閱
經過一段時間的摸索和試驗,並且還有RaynorPao的指導, 終讓我找到這問題的答案了. 只要override CreateParam(),並做些設定,則以後這個 Form產生出來都會在Taskbar上產生一個新項目. 請參考下面的code.
class TForm2 : public TForm
{
__published:        // IDE-managed Components
  TLabel *Label1;
private:        // User declarations
protected:
  
  //Override this method
  void __fastcall CreateParams(TCreateParams &Params);
  
public:                // User declarations
  __fastcall TForm2(TComponent* Owner);
};    //-----------------------------------------------------------
void __fastcall TForm2::CreateParams(TCreateParams &Params)
{
  
  TCustomForm::CreateParams(Params);  
  
  //這是關鍵,設成WS_EX_APPWINDOW,才會在Taskbar多一個項目.
  Params.ExStyle |= WS_EX_APPWINDOW;    
  
  //如果沒有加這一行的話,當MainForm最小化時,
  //也所產生的視窗也會跟著最小化.
  Params.WndParent = GetDesktopWindow();        
}    
=== Study, Study and Study ===
------
=== Study, Study and Study ===
系統時間:2024-04-29 6:08:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!