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

請問如何做出安裝進度框?

尚未結案
fordos
一般會員


發表:2
回覆:5
積分:1
註冊:2005-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-13 11:25:06 IP:210.192.xxx.xxx 未訂閱
請問,今我寫出一支程式去安裝一些常用的軟体,如nero、acrobat…等等軟体,我要怎麼做出安裝的進度框(百分比)?
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-14 19:05:22 IP:61.222.xxx.xxx 未訂閱
你是指元件嗎? if 是 那請參考 tProgressBar 重要的有.max mix step stepit 而如果你是問框~那你可以把他放在一個TForm上~show出來後再操作他~
------
熊的學習 http://huwk.blogspot.com
fordos
一般會員


發表:2
回覆:5
積分:1
註冊:2005-03-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-15 15:20:52 IP:61.30.xxx.xxx 未訂閱
HI 各位先進: 我再把我的問題說詳細一點好了,今我寫個小程式,讓user可去選擇它想要安裝的一些軟体(完全自動化),我的程式碼如下: procedure TForm1.BitBtn1Click(Sender: TObject); begin if checkBox1.Checked then ShellExecute(Handle, 'Open', 'c:\install\MP10Setup.exe', ' /Q:A /R:N', nil, SW_Hide); if checkBox2.Checked then ShellExecute(Handle, 'Open', 'c:\install\MSN7b.exe', ' /Q:A /R:N', nil, SW_Hide); if checkBox3.Checked then ShellExecute(Handle, 'Open','c:\install\fgf12.exe', ' /s', nil, SW_Hide); if checkBox4.Checked then ShellExecute(Handle, 'Open', 'c:\install\WinRAR.exe', ' /s', nil, SW_Hide); if checkBox5.Checked then ShellExecute(Handle, 'Open', 'c:\install\adobe_reader6.exe', ' -p"-s /v\"/qn\""', nil, SW_Hide); end; 但因這些都是在背景執行安裝的,user根本無法得知何時裝完,我應該如何寫,才能讓user得知安裝的進度為何? 是否已裝完?
alanktop
一般會員


發表:7
回覆:21
積分:5
註冊:2005-03-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-18 01:03:33 IP:218.17.xxx.xxx 未訂閱
function WinExecAndWait(FileName: string; Visibility: integer): integer; var zAppName: array[0..512] of char; zCurDir: array[0..255] of char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, Sizeof(StartupInfo), #0); StartupInfo.cb := Sizeof(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if CreateProcess(nil, zAppName, { pointer to command line string } nil, { pointer to process security attributes } nil, { pointer to thread security attributes } false, { handle inheritance flag } CREATE_NEW_CONSOLE or { creation flags } NORMAL_PRIORITY_CLASS, nil, { pointer to new environment block } nil, { pointer to current directory name } StartupInfo, { pointer to STARTUPINFO } ProcessInfo) then begin WaitforSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); Result := 0; end else Result := -1; { pointer to PROCESS_INF } end; begin if winexecandwait('c:\install\MP10Setup.exe',1) then messagebox(handle,'MP10Setup Completed.','Note:',MB_ICONINFORMATION); end;
alanktop
一般會員


發表:7
回覆:21
積分:5
註冊:2005-03-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-18 01:08:36 IP:218.17.xxx.xxx 未訂閱
如果不想让用户看到外部调用的程序执行界面,则请用: winexecandwait('c:\install\MP10Setup.exe',0) 如果安装程序需要用户干预的话,则需另作处理(自动点击模拟); 至于进度条,还没想到好办法。
alanktop
一般會員


發表:7
回覆:21
積分:5
註冊:2005-03-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-18 01:16:18 IP:218.17.xxx.xxx 未訂閱
Sorry,我看到你的安装命令都用了参数,应该是不需要用户干预了吧? 这样就用winexecandwait('command name and parameters',0)好了。 用户看不到安装过程,但是能看到安装结束的提示! 例如: winexecandwait('c:\install\MP10Setup.exe /Q:A /R:N', 0) 而如果这样 winexecandwait('c:\install\MP10Setup.exe /Q:A /R:N', 1) 用户就会看到安装过程了。 但是在这种进程中如何精确使用TProgressBar还有点困难,主要是进程完成的百分比不好计算。
alanktop
一般會員


發表:7
回覆:21
積分:5
註冊:2005-03-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-18 01:36:34 IP:218.17.xxx.xxx 未訂閱
sorry, 更正如下: begin if winexecandwait('c:\install\MP10Setup.exe /Q:A /R:N', 0)=0 then messagebox(handle,'MP10Setup Completed.','Note:',MB_ICONINFORMATION); end;
系統時間:2024-05-01 12:22:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!