顯示處理進度問題? |
答題得分者是:RaynorPao
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
A simple way is to call "Application.ProcessMessages" inside your loop and update the progressbar. A better way is to make a thread for the operation. Beware of the unexpected action of the end user in both cases, e.g. clicking over some forms/buttons. So disabling some controls before the loop and re-enable them later.
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Using the simple way:
procedure TForm1.Button1Click(Sender: TObject); var i:integer begin Form2 := TForm2.Create(self); Form2.Show; { cannot ShowModal } { disable unecessary controls } try { start of your loop } Form2.Update; Application.ProcessMessages; { end of your loop } finally Form2.Free; { enable controls } end; end; |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請問(1)Application.ProcessMessages這一行指令有何作用?若把Application.ProcessMessages這一行指令mark起來,您的Demo看起似乎和chih的Demo一樣channel你好: 試著把 Application.ProcessMessage 這一行指令 mark 起來 然後在執行的時間~~切到別的應用程式(例如: 檔案總管) 馬上再切回來~~你就會知道這一行的效果了 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao: 您的意思我大概了解,好像就是所謂在背景上Run,因為如果有Application.ProcessMessages這一行,其影像並不會暫留,請問這是否是屬於thread的一種?channel你好: Application.ProcessMessages 的功用 就和 vb 中的 DoEvent 是相同的意思 主要的目的是不讓 application 的 process 把系統的資源給鎖死(例如: cpu) 因此~~通常我們會把這個敘述加在一個大迴圈裡面 以防止系統的資源被你的 process 獨佔 而沒有時間來做其他的動作(例如: repaint) 你可以嘗試把你的迴圈值增加到 10000 然後把 Application.ProcessMessages mark 掉 系統資源被你的 process 鎖死的現象會更明顯 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:RaynorPao: 您的意思我大概了解,好像就是所謂在背景上Run,因為如果有Application.ProcessMessages這一行,其影像並不會暫留,請問這是否是屬於thread的一種?Application.ProcessMessages will call the default windows message handler and give chance for handling windows messages. It is still executed in the main thread in this example. There is an demo project (Threads\thrddemo.dpr) comes with Delphi and you may try to study it. Please notice that VCL is NOT thread safe so any changes visually MUST be executed in the main thread. |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |