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

Application->ProcessMessages() 的疑問

答題得分者是:Stallion
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-30 16:12:06 IP:59.120.xxx.xxx 訂閱
我知道 Application->ProcessMessages(); 可以避免因為在迴圈中使程式看起來像死當的效果

所以我試了一下
不過有一個問題

我放在 formshow 跟 formactivate 是不一樣的結果

void __fastcall TForm1::FormShow(TObject *Sender)
//void __fastcall TForm1::FormActivate(TObject *Sender)
{
int i =0;
while(i<1000000)
{
Edit1->Text = i ;
Application->ProcessMessages();
}
}

在FormShow會讓畫面彈不出來,然後跑完while 才會彈出視窗,在edit上顯示999999

但在FormActivate就會達成我要的效果,畫面彈的出來,且會隨時更新edit的狀態
不過缺點就是只要form有動作就會觸發FormActivate

請問要怎麼做才能在FormShow就彈出視窗且隨時更新edit的狀態
我不管Application->ProcessMessages();加在那邊都沒用@@
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-30 17:15:42 IP:211.22.xxx.xxx 未訂閱
把要處理事情的有關程式碼放在正確的事件處理程序裡面的確不太容易,除了老手以及深入學習過Windows訊息事件處理程序的人,第一次要作對總是不容易!再加上Windows訊息再被VCL包裝處理後,按照包裝後的VCL事件名稱來看,我們這些外國人往往不是一知半解看不懂,就是用力不斷的試驗!
以 OnShow 或者 OnCreate 這兩個事件處理程序來說,按照我的經驗他只能作一些資料初始化性質的處理,VCL包裝的Windows視窗處理訊息在沒處理過這兩個事件是不會將Form顯示出來的!更不要說處理其上CONTROL的視覺元件!所以你要在OnShow裡面做這些事不太可能~要不然有心的話,可以去看Form的原始程式碼看看OnShow在作啥?然後設法來改寫(overwrite)。
===================引 用 brian_chen 文 章===================
我知道 Application->ProcessMessages(); 可以避免因為在迴圈中使程式看起來像死當的效果

所以我試了一下
不過有一個問題

我放在 formshow 跟 formactivate 是不一樣的結果

void __fastcall TForm1::FormShow(TObject *Sender)
//void __fastcall TForm1::FormActivate(TObject *Sender)
{
int i =0;
while(i<1000000)
{
Edit1->Text = i ;
Application->ProcessMessages();
}
}

在FormShow會讓畫面彈不出來,然後跑完while 才會彈出視窗,在edit上顯示999999

但在FormActivate就會達成我要的效果,畫面彈的出來,且會隨時更新edit的狀態
不過缺點就是只要form有動作就會觸發FormActivate

請問要怎麼做才能在FormShow就彈出視窗且隨時更新edit的狀態
我不管Application->ProcessMessages();加在那邊都沒用@@
brian_chen
一般會員


發表:14
回覆:20
積分:6
註冊:2007-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-30 17:40:17 IP:59.120.xxx.xxx 訂閱

===================引 用 Stallion 文 章===================
把要處理事情的有關程式碼放在正確的事件處理程序裡面的確不太容易,除了老手以及深入學習過Windows訊息事件處理程序的人,第一次要作對總是不容易!再加上Windows訊息再被VCL包裝處理後,按照包裝後的VCL事件名稱來看,我們這些外國人往往不是一知半解看不懂,就是用力不斷的試驗!
以 OnShow 或者 OnCreate 這兩個事件處理程序來說,按照我的經驗他只能作一些資料初始化性質的處理,VCL包裝的Windows視窗處理訊息在沒處理過這兩個事件是不會將Form顯示出來的!更不要說處理其上CONTROL的視覺元件!所以你要在OnShow裡面做這些事不太可能~要不然有心的話,可以去看Form的原始程式碼看看OnShow在作啥?然後設法來改寫(overwrite)。
===================引 用 Stallion 文 章===================

呵,謝謝版大的回覆...
本來是想要在formshow的時候跑update function的訊息...
不過看來只能用其它的方法來做出類似的事情了....
系統時間:2024-04-27 5:51:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!