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

版本更新問題Part2

答題得分者是:pcboy
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-09 14:34:19 IP:203.70.xxx.xxx 訂閱
之前問的版本更新有幾個小疑問…

試很久都解決不了…

所以又上來問前輩們了…



我有加一個panel…是用來顯示現在狀態的…

不管有新版本下載中或版本是最新的都想在panel中顯示…

不曉得是不是因為有Application.Terminate;的關係

panel都不會顯示,好像都在背景作業完後就自動關閉了…

請問有可以讓panel顯示的方法嘛?

這樣使用者才知道現在是什麼情形!^^"

另外就是在讀取完本機的version.txt檔後

他會自己把server上的version檔的內容寫進client端的version.txt

不過我卻找不到這行…

可以在比對完後不要寫入client端的version.txt中嘛

他在下載新檔後就會有新版的version.txt了

如果他以不正常程序結束程式…也沒安裝新版的

那他的version.txt不就和server上的一樣了嘛…

這樣他也沒有更新成功呢…是

^^以下為修改後的程式碼

procedure TForm1.FormCreate(Sender: TObject);

var

fs: TFileStream;

Dir : String;

Now_Version, New_Version : String;

begin

//讀取目前版本

Memo1.Lines.LoadFromFile('Version.txt');

Now_Version:=Memo1.Lines[0];

// 取得網站上 Version.txt 中紀錄的版本

try

Dir:=GetCurrentDir '\Version.txt';

fs := TFileStream.Create(Dir, fmCreate);

IdHTTP1.Get('http://123.123.123.123/Version.txt', fs);

finally

fs.Free;

end;

Memo2.Lines.LoadFromFile('Version.txt');

New_Version:=Memo2.Lines[0];

// 如果有新版,下載新版,並執行安裝。

if StrToInt(now_version) < StrToInt(new_version) then

begin

try

Panel1.Caption :='偵測到新版本,下載並安裝';

// 下載後程式存放的路徑和檔名

Dir:=GetCurrentDir '\new.exe';

fs := TFileStream.Create(Dir, fmCreate);

// 下載路徑

IdHTTP1.Get('http://123.123.123.123/new.exe', fs);

finally

fs.Free;

ShellExecute(handle, 'Open', PChar('new.exe'), Nil, Nil, SW_SHOWNORMAL);

Application.Terminate;

end;

end;

// 如果沒新版

if StrToInt(now_version) = StrToInt(new_version) then

begin

Panel1.Caption :='您程式為最新版本';

ShellExecute(handle, 'Open', PChar('test.exe'), Nil, Nil, SW_SHOWNORMAL);

Application.Terminate;

end;

end;
編輯記錄
Coffee 重新編輯於 2007-10-12 11:08:30, 註解 修改分類為問題(移除注音文)‧
Coffee 重新編輯於 2007-10-12 11:08:43, 註解 無‧
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-09 14:53:01 IP:61.219.xxx.xxx 未訂閱
> 另外就是在讀取完本機的version.txt檔後
> 他會自己把server上的version檔的內容寫進client端的version.txt
> 不過我卻找不到這行…
Dir:=GetCurrentDir '\Version.txt'; // 抓下來的檔案寫到 目前目錄 (GetCurrentDir), 檔案名稱 Version.txt
fs := TFileStream.Create(Dir, fmCreate);
IdHTTP1.Get('http://123.123.123.123/Version.txt', fs);
不要寫入 Client 端的 Version.txt , 您可以換一個檔案名稱
或者將上面三行改成下面一行
Memo1.Text:=IdHTTP1.GetIdHTTP1.Get('http://123.123.123.123/Version.txt');
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-09 16:26:25 IP:203.70.xxx.xxx 訂閱
請教pcboy大大
那有關panel的部份呢?
我畫面都不會顯示
好像在背景作業一樣
可以秀出form跟我的panel嘛?
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-09 16:38:27 IP:60.248.xxx.xxx 訂閱
可以使用
Application.ProcessMessages
讓系統有機會處理程式畫面的變化
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-09 17:01:37 IP:210.241.xxx.xxx 未訂閱
Application.Terminate;
改為 (註解掉)
// Application.Terminate;
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-09 17:25:31 IP:203.70.xxx.xxx 訂閱
我將Application.ProcessMessages;放在form一啟動時就動作,
不過還是沒有效果!^^"
有辦法在下載新檔案的同時就出現"下載新版中"之類的話語嘛?
然後下載完成後關閉檔案。
請大大指導!
===================引 用 文 章===================

可以使用
Application.ProcessMessages
讓系統有機會處理程式畫面的變化
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-09 17:27:09 IP:203.70.xxx.xxx 訂閱
註解掉就不會自動關閉拉!
而且註解掉也是在新版本下載完執行安裝時才會出現panel
而不是在下載的同時出現請對方等待的字眼!
請問有別的辦法嘛?
===================引 用 文 章===================

Application.Terminate;
改為 (註解掉)
// Application.Terminate;
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-10 06:28:42 IP:203.204.xxx.xxx 未訂閱
要和 IdHTTP1.Get('http://123.123.123.123/new.exe', fs); 同時執行 
用 thread 顯示進度
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
kk714
一般會員


發表:4
回覆:14
積分:3
註冊:2004-11-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-10 08:58:58 IP:203.70.xxx.xxx 訂閱
thread object嘛
剛才去爬了一下文
看不太懂
可以詳細說一下作法嘛?
===================引 用 文 章===================
要和 IdHTTP1.Get('http://123.123.123.123/new.exe', fs); 同時執行
用 thread 顯示進度

pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-11 08:41:38 IP:61.219.xxx.xxx 未訂閱
您要下載的檔案很大嗎 ? 一定要顯示進度 ?
thread 詳細說明會寫一大串, 請您自己先研究再討論
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-07-05 7:02:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!