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

顯示處理進度問題?

答題得分者是:RaynorPao
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-15 09:38:42 IP:61.218.xxx.xxx 未訂閱
各位Delphi高手、先進們: 如果我在Form1上有一個Button1,Button1.Click有一個迴圈正在執行,我希望在按Button1.Click之前,跳出另一個Form2(有一ProgressBar1)顯示處理進度,當迴圈執行完時,Form2結束返回Form1,如何做?Help Me!感激不盡!
------
~小弟淺見,參考看看~
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-15 09:43:12 IP:147.8.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-15 09:58:19 IP:211.74.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject); var i:integer begin try Form2 := TForm2.create(self); Form2 .show; for i=0 to 100 do begin Form2 .Update; //這裡寫你要處理的事情.... end; finally Form2 .Free; end; end; 發表人 - chih 於 2002/11/15 10:18:14
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-15 11:24:59 IP:61.218.xxx.xxx 未訂閱
感謝chih,您的方法我大致上已經了解 至於william您講的方法有二,但是我都不知道如何撰寫,是否可以請您再講詳細一點,或是像chih寫一個Demo,這樣比較容易了解!感激不盡!!
------
~小弟淺見,參考看看~
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-15 11:35:06 IP:147.8.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-15 12:57:45 IP:61.218.xxx.xxx 未訂閱
william: 請問(1)Application.ProcessMessages這一行指令有何作用?若把Application.ProcessMessages這一行指令mark起來,您的Demo看起似乎和chih的Demo一樣。(2)若使用thread應該如何做?
------
~小弟淺見,參考看看~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-15 13:10:45 IP:203.73.xxx.xxx 未訂閱
引言: 請問(1)Application.ProcessMessages這一行指令有何作用?若把Application.ProcessMessages這一行指令mark起來,您的Demo看起似乎和chih的Demo一樣
channel你好: 試著把 Application.ProcessMessage 這一行指令 mark 起來 然後在執行的時間~~切到別的應用程式(例如: 檔案總管) 馬上再切回來~~你就會知道這一行的效果了 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-15 13:36:07 IP:203.73.xxx.xxx 未訂閱
引言: (2)若使用thread應該如何做?
以下這個連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=12750 有一個免費的元件,包含 source code 是本站站長熱情提供的 不妨參考看看吧 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-15 15:49:14 IP:61.218.xxx.xxx 未訂閱
RaynorPao: 您的意思我大概了解,好像就是所謂在背景上Run,因為如果有Application.ProcessMessages這一行,其影像並不會暫留,請問這是否是屬於thread的一種?
------
~小弟淺見,參考看看~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-11-15 15:55:34 IP:203.73.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-11-15 15:59:29 IP:147.8.xxx.xxx 未訂閱
引言: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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-11-15 16:09:02 IP:61.218.xxx.xxx 未訂閱
感謝各位高手、前輩們的回答,獲益良多!
------
~小弟淺見,參考看看~
chamstar
一般會員


發表:24
回覆:36
積分:12
註冊:2004-10-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-10-28 18:59:18 IP:218.16.xxx.xxx 未訂閱
請教我如何用 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=12750 中提供的元件?我install component的方式也將元件加進了,並且在元件中也有顯示;可運行demo中的測試時報以下錯誤,是不是我的安裝方法不對,請回答,謝謝! MainFrm.pas(21): File not found: 'HKProgressBr.dcu'
系統時間:2024-11-23 14:56:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!