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

[問題]如何作出進度表

 
rhythm
一般會員


發表:7
回覆:5
積分:2
註冊:2002-08-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-07 22:25:00 IP:163.28.xxx.xxx 未訂閱
當我們用bcb呼叫一個dos的程式時,就會 出現dos執行的視窗,因為執行須要一段時間 ,可不可以用一個執行的進度表來取代dos執行 的視窗呢??? ps:進度表就是當我們在安裝軟體時,出現完成 多少%的那種進度表...
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-07 23:39:48 IP:210.85.xxx.xxx 未訂閱
wa...好有挑戰性呀....問題在於 你的DOS程式不知道要多久才Run完, 所以無法量化 這個問題可以解的話, 整個Topic就不是問題了
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-07 23:54:26 IP:61.224.xxx.xxx 未訂閱
是的..就如同ICSBOY兄說的,您無法確定程式要run多久 而且你也無法用大概的,因為不同的電腦run程式的速度也 不同,所以,我想你只能動一點小手角 就是在開始時把進度表設成0%...然後慢慢的前進,最好是久一點 然後再dos 的程式run 完時,先通知win程式,就把進度表 衝到100%的地方...
rhythm
一般會員


發表:7
回覆:5
積分:2
註冊:2002-08-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-08 00:35:38 IP:163.28.xxx.xxx 未訂閱
run多久我是可以想辦法解決,我的問題是 如果讓dos的視窗隱藏而只出現進度表就好了... 謝謝回答囉...
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-08 00:43:19 IP:210.85.xxx.xxx 未訂閱
嗚......人家的第一個字母是L啦, 不是i wa...如果能知道要Run多久, 那就簡單啦 用ShellExecute來Run, 然後用WaitForSingleObject 在這間秀進度和控制時間, 慢慢推進, 一直推, 時間到時就推到100% !? 你怎麼知道每個DOS程式Run的時間呢? 還是要執行的DOS是自己寫的? 後者的話, 就成立啦, 前者呀<---我還在想
rhythm
一般會員


發表:7
回覆:5
積分:2
註冊:2002-08-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-08 10:17:08 IP:163.28.xxx.xxx 未訂閱
謝謝你們的回答囉... dos程式是我自己寫的呀...所以囉... 對了,我又想到一個問題了...如果當初這個 dos程式在run時會printf訊息在瑩幕上,那有沒 有方法可以用BCB去取得(就是變成AnsiString的type)呀?????
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-08 10:26:20 IP:211.23.xxx.xxx 未訂閱
試試這個是不是你要的 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19897
rhythm
一般會員


發表:7
回覆:5
積分:2
註冊:2002-08-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-12 20:26:25 IP:163.28.xxx.xxx 未訂閱
謝謝各位的回答... 我主要的問題是想說不知道有沒有 辦法可以同步擷取dos程式printf在console上的訊息 也就是說,假如run完一個dos程式會印出七個message, 而每個message印出的時間為間隔2秒, 那有辦法可以用AnsiString去同步追蹤嗎??? ex: AnsiString temp; WinExec("test.exe",SW_HIDE); .... 結果為: test1 //印出test1後-> temp=test1 test2 //2秒後,印出test2後-> temp=test2 test3 //同上 test4 //.... test5 test6 test7 //.....-> temp=test7 謝謝回答囉...
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-01 16:58:35 IP:61.30.xxx.xxx 未訂閱
謝謝各位的回答... 我主要的問題是想說不知道有沒有 辦法可以同步擷取dos程式printf在console上的訊息 也就是說,假如run完一個dos程式會印出七個message, 而每個message印出的時間為間隔2秒, 那有辦法可以用AnsiString去同步追蹤嗎??? ex: AnsiString temp; WinExec("test.exe",SW_HIDE); .... 笨方法 用dos程式去開一個暫存檔TEMP.txt 內容為:兩秒一次 1 2 3 ..用完記得Colse 再用Win 去LoadFromFile TEMP.txt檔 先測Dos有沒有再用TEMP.txt 用Timer讀取內容應該可顯示進度了 另一方面個爛方法: 去偵測您安裝的目錄,目前多少容量 把總容量和目前容算一下,應該也可以喲! 乎搭啦!
------
--==多看.多學.多聽==--
ubong
一般會員


發表:2
回覆:42
積分:23
註冊:2002-10-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-10-06 13:01:25 IP:61.225.xxx.xxx 未訂閱
要取得Dos畫面上文字,可以抓取螢幕位址資料來取得,但是你在printf前應先 固定位置,例如gotoxy(3,1);printf("%s","test1"); 那麼下列程式碼可參考看看(我不知道這在Windows下的Dos畫面是否可用) int far *scrpoint=(int far *) 0xB8000000; //彩色螢幕 gotoxy(1,1) 位址 //get "test1" at gotoxy(x,y);  char str[81]; int i,xy=(y-1)*80+x-1; for( i=0;i<80;i ) str[i]=*(scrpoint xy i); for(i=80;i>-1;i--) if(isalpha(str[i]) || isdigit(str[i])) break; str[i 1]='\0'; //以下是Dos下以Tourbo C 所做程式,你可加以參考: #include #include #include void main() { int far *scr=(int far *)0xB8000000; int xy,i; char str[81]; clrscr(); gotoxy(3,2); printf("test1"); xy=80 2; for(i=0;i<80;i ) str[i]=*(scr xy i); //| 0x0700; str[80]='\0'; for(i=80;i>-1;i--) if(isalpha(str[i]) || isdigit(str[i])) break; str[i 1]='\0'; printf("\n%s",str); getch(); } ubong
------
ubong
系統時間:2024-04-26 6:45:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!