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

Form Close

答題得分者是:mieng
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-25 10:21:20 IP:61.218.xxx.xxx 未訂閱
請問:程式碼如下:      Form2的Formstyle = fsStayOnTop;      Timer1->Interval = 5000; 這各程式的動作是,正常執行後,Form2在Form1的上面,經過5 sec後, Form2會自動關閉,可是如果操作的方式改成在Form2還未關閉前,按下右上角的 系統鍵,將Form1最小化,過5sec後在將他還原,Form2就關不起來了,為什麼? //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Form2->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { Timer1->Enabled = true; Form2->Show(); } //---------------------------------------------------------------------------
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-25 13:18:22 IP:61.231.xxx.xxx 未訂閱
試試
Form2->Show(); 
改成
Form2->ShowModal(); 
另外,將 Form2 的 BorderStyle 設為 bsNone 這樣,只要 Form2 秀出來,使用者就不能操作 Form1 同時 Form2 也沒有系統鍵給使用者按。 另外,也可以試試在 Timer1Timer 內加上一個旗標, 表示 Form2 應該要關閉了, 而另外寫 Form1 的 OnActive 的事件,判斷如果該旗標為 Form2 應該要關閉,則再關閉一次 Form2 即可。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-25 13:40:35 IP:61.218.xxx.xxx 未訂閱
對不起,不能用ShowModal(),因為用ShowModal(),整個系統就停在那邊, 在Form2->Show()的這段期間,我還有一些通訊的工作要做.
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-25 13:44:46 IP:61.60.xxx.xxx 未訂閱
查一下BCB OnClose 的說明,最小化似乎也是Close的一種, 當您預設的五秒過後,系統認為您的Form2己關閉,使得Close()失效, 直接的解決方式,在Close()前先讓他再Show()一次,就可以關閉了。    您可以試著在Form1上加一個Button   
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Form2->Show();
}     
當Form2無法關閉時,按下Button,Form2就可以關閉了 學習中請大家多多指導呦~~ ☆星霧☆(Mineg Chien WU)
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-25 16:58:13 IP:61.219.xxx.xxx 未訂閱
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Timer1->Enabled = true;
    Form2 = 0;
    Form2 = new TForm2(this);
    Form2->Show();
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Form2)
    delete Form2;
}
 
不知您所提的"關閉"是隱藏還是真的關了(清除記憶體)。若非穩藏那上面的程式應該可以work。 我稍有去deassemble你說的程式…若要被close的form非主form,則會經過hide,set visiable 等過程…並沒有destory。而且timer無論form1有無縮小也確實都有去run這個event handler。下面的程式是若你要的是"隱藏"。
 
//---------------------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if ( ! Form2->Visible)
    Form2->Visible = true;        Form2->Close();    } 
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-07-03 23:02:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!