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

使用 Indy 元件, 隨時顯示文件下載的進度

 
dennieschang
一般會員


發表:2
回覆:24
積分:15
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-11 12:14:07 IP:210.241.xxx.xxx 訂閱
在 看到了網友 ddddd688 於網際網路程式設計討論區貼出的問題, 而且兩週以上都沒有人
回答, 相信可能是兩種情形:

1. 這問題很多人問過, 可是網友 ddddd688 沒有爬文找一下 Solution, 所以沒人回他.
2. 這問題大家都不知道該怎麼解決.

不論是哪一種, 我覺得這是很實用的東西, 所以寫了小範例跟大家分享.

在 Indy 的各個元件當中, 不管是 server 還是 Client, 都會有個固定的 property,
叫做 IOHandler, 如果要從正在傳遞的 Channel 當中擷取資料, 就必須透過各個
元件的

IOHandler.Intercept.OnReceive 或是
IOHandler.Intercept.OnSend.

差別在哪呢? 在於 Server 用 OnSend 可以知道送出了多少資料, Client 則是要用 OnReceive
來知道接到了多少資料, 以及是哪些資料.

但是如果您只用 OnReceive, OnSend, 想要把這資訊秀在 Form, 或者是任一元件上面,
都會發現, 進度沒辦法即時顯示, 這又是為什麼呢?

這是因為, 介面更新和 Data 傳輸使用的都是同一個 Thread, 接收的時候沒辦法同時更新.
所以, 在筆者的範例當中, 是使用了一個單獨的 Thread 來控制下載的工作, 這個Thread 在
OnReceive 的時候, 會送出介面更新要求給 MainThread 所控制的 MainForm, 所以就可以
在資料進來的同時, 也看到畫面上的數字在跑了.

Sorry, 這應該在筆者的書上面發表的, 但這本書出版之日目前看來還是遙遙無期... 因為出版社
跟我說, 現在 Delphi 的書沒銷量... 他們不想出...


Best Regard.
Dennies Chang.

Delphi/Kylix Indy 網路程式設計一書作者.
------
Indy - Delphi, BCB, Kylix最好用的網路元件組. 小弟也是Indy Core Team的成員之一, 平常會在
http://www.sanbrandstudio.com/
http://delphi.ktop.com.tw/
以及Delphi深度論壇出沒.
wscken
初階會員


發表:28
回覆:75
積分:45
註冊:2003-08-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-16 15:51:00 IP:210.243.xxx.xxx 訂閱
不好意思,可以請問一下嗎?
當我想要編譯原始碼的時候,都會出現

Build
[Error] Unit1.pas(82): Invalid compiler directive: 'REGION'
[Error] Unit1.pas(118): Invalid compiler directive: 'ENDREGION'
[Fatal Error] ShowDownloadProgress.dpr(5): Could not compile used unit 'Unit1.pas'

請問,這是我的環境問題嬤??
還是我應該要怎麼樣解決@.@

-------------------------------------------------------------------------
原來如此 抱歉,因為還是在用7 所以沒有想到是版本的問題,可以使用了,感謝您喔 ^^
編輯記錄
wscken 重新編輯於 2007-05-16 17:20:44, 註解 無‧
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-16 16:29:23 IP:211.75.xxx.xxx 未訂閱
那真是太可惜了, 也許你可以轉戰 "祖國" 試試, 

===================引 用 dennieschang 文 章===================

Sorry, 這應該在筆者的書上面發表的, 但這本書出版之日目前看來還是遙遙無期... 因為出版社
跟我說, 現在 Delphi 的書沒銷量... 他們不想出...
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
dennieschang
一般會員


發表:2
回覆:24
積分:15
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-16 17:05:31 IP:210.241.xxx.xxx 訂閱
請直接把原始碼裡面有出現 REGION 跟 ENDREGION
的那行全數刪除即可, 那是在 Delphi 2005-2007 之間讓
我們可以把整段程式碼摺疊起來的新功能.
------
Indy - Delphi, BCB, Kylix最好用的網路元件組. 小弟也是Indy Core Team的成員之一, 平常會在
http://www.sanbrandstudio.com/
http://delphi.ktop.com.tw/
以及Delphi深度論壇出沒.
zxf_1
一般會員


發表:0
回覆:1
積分:0
註冊:2007-05-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-19 09:24:20 IP:61.52.xxx.xxx 未訂閱
我下了,真不错
------
吉它谱中文娱乐网
程序员不只爱代码,还爱吉它
http://www.gtp.cn
Stallion
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-22 19:13:18 IP:211.22.xxx.xxx 未訂閱
真是有用的知識~
感謝!
ddddd688
一般會員


發表:8
回覆:8
積分:3
註冊:2007-01-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-04 18:20:05 IP:220.139.xxx.xxx 訂閱
  謝謝你詳細的解答><!
系統時間:2024-05-03 20:22:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!