子視窗如何置於最上層顯示 |
答題得分者是:RaynorPao
|
turbo
一般會員 發表:2 回覆:1 積分:0 註冊:2003-03-13 發送簡訊給我 |
請教各位高手
我有兩個form,分別為form1與form2 form1是主視窗,form2是由form1按下一個button後,動態產生 我想讓使用者自行選擇是否要讓form2設為最上層顯示(Always on top) 該如何做? 試過用 formStyle=fsStayOnTop,但有資料顯示,此屬性應於設計時使用 不適合執行時使用 也試過 SetWindowPos ,但似乎只適用主視窗,也就是form1,不適用form2 也試過用TImer ,然後定時呼叫SetWindowPos,是可以做到,但顯得笨拙 是否有可方便的方法可以完成? |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
(1)在 BCB 開發環境中,按「Project/Options/Forms」,確定「Form1」是「Main form」,「Form1」在「Auto create forms」欄位,「Form2」在「Available forms」欄位
(2)有關「Form1」的程式碼如下 [code cpp] #include "Unit2.h" void __fastcall TForm1::Button1Click(TObject *Sender) { TForm2 *f2=new TForm2(Application); f2->FormStyle=fsStayOnTop; f2->Show(); } [/code] (3)如果你想限制使用者在 Form2 裡面的操作行為未完成之前,不可以對 Form1 操作的話,可以把上面的程式碼改成以下這個樣子 [code cpp] #include "Unit2.h" void __fastcall TForm1::Button1Click(TObject *Sender) { TForm2 *f2=new TForm2(Application); f2->ShowModal(); delete f2; } [/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
turbo
一般會員 發表:2 回覆:1 積分:0 註冊:2003-03-13 發送簡訊給我 |
感謝RaynorPao版主的回覆,關於(1)小弟一開始就已如是設定。
關於(2),小弟一開始就已經試過行不通,不過我試的是 TForm2 *f2=new TForm2(Form1); 也試過將Owner 改為null,都不行。 看到版主將Owner設為Application時,以為可以了,可惜試過之後,還是不行。 關於(3),因為不是如此設計,故不用。 也許我應該將我的應用說的更清楚,我在Form1裡加了TrayIcon1, 希望他能一開始就縮在右下角的時間那裡。而不要在工作列上佔一個位置。但我的form2要能顯示出來,也能夠讓使用者隨時自行設定是否要最上層顯示。 project 1的程式碼節錄 [code cpp] WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->ShowMainForm=false; //不要顯示form1 Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } [/code] Form1的程式碼節錄 [code cpp] TForm2 *Form2; void __fastcall TForm1::FormCreate(TObject *Sender) //建立form2並顯示 { Form2=new TForm2(Application); Form2->FormStyle=fsStayOnTop; Form2->Show(); } void __fastcall TForm1::TrayIcon1Restore(TObject *Sender) //右下角小圖示快按兩下時顯示form1 { Form1->Show(); TrayIcon1->Visible=false; } [/code] TrayIcon1 一開始的屬性設定為 Visible=true, Hide=true, RestoreOn=imDoubleClick Form2的程式碼節錄 [code cpp] void __fastcall TForm2::OnTopClick(TObject *Sender) //PopUp menu的一個選項,用來設定是否要在最上層顯示 { OnTop->Checked=!OnTop->Checked; if (OnTop->Checked) SetWindowPos(this->Handle,HWND_TOPMOST,-1,-1,-1,-1,SWP_NOMOVE | SWP_NOSIZE); // this->FormStyle=fsStayOnTop; //上一下跟這行這兩種方法都不行 else SetWindowPos(this->Handle,HWND_NOTOPMOST,-1,-1,-1,-1,SWP_NOMOVE | SWP_NOSIZE); // this->FormStyle=fsNormal; } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |