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

請問關於Form被程式lock問題...

尚未結案
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-14 22:24:15 IP:220.135.xxx.xxx 未訂閱
while(!infile.eof()) { 處理文字檔副程式; i ; Label1->Caption="目前處理資料筆數: " IntToStr(i); } 上面的程式放在Form 的OnCreate event中... 我的文字檔約有10MB...所以一執行時... Form無法顯示出來...完全被程式Lock住了... Form中的處理進度根本無法看到... 請問各位大大們...我該如何解決... 麻煩指導一下...謝謝囉...
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-14 22:39:02 IP:61.64.xxx.xxx 未訂閱
加入紅色部份即可
while(!infile.eof())
{
  處理文字檔副程式;
  i  ;
  Label1->Caption="目前處理資料筆數: " IntToStr(i);
  Application->ProcessMessages();
}
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-14 22:42:35 IP:61.62.xxx.xxx 未訂閱
您在 OnCreate event 處理不太洽當,此時 Form 還沒有秀出來,您畫面上的變化是看不到的,您改在 OnActivate 處理或許比較洽當,另外,當您迴圈在跑的時候,UI 沒有機會去回應訊息,應此您應該在迴圈內加上 Application->ProcessMessages(),這樣您的 UI 才會變化。:
void __fastcall TForm1::FormActivate(TObject *Sender)
{
  while(!infile.eof())
  {
    處理文字檔副程式;
    i  ;
    Label1->Caption="目前處理資料筆數: " IntToStr(i);
    Application->ProcessMessages();
  }
}
發表人 - allenchan 於 2004/12/14 22:52:03
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-14 22:49:11 IP:220.135.xxx.xxx 未訂閱
引言: 加入紅色部份即可
while(!infile.eof())
{
  處理文字檔副程式;
  i  ;
  Label1->Caption="目前處理資料筆數: " IntToStr(i);
  Application->ProcessMessages();
}
我加了大哥說的那一行...但是FORM還是不見踪影... 一直到文字檔處理完才出現... 發表人 -
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-14 23:04:08 IP:220.135.xxx.xxx 未訂閱
引言: 您在 OnCreate event 處理不太洽當,此時 Form 還沒有秀出來,您畫面上的變化是看不到的,您改在 OnActivate 處理或許比較洽當,另外,當您迴圈在跑的時候,UI 沒有機會去回應訊息,應此您應該在迴圈內加上 Application->ProcessMessages(),這樣您的 UI 才會變化。:
void __fastcall TForm1::FormActivate(TObject *Sender)
{
  while(!infile.eof())
  {
    處理文字檔副程式;
    i  ;
    Label1->Caption="目前處理資料筆數: " IntToStr(i);
    Application->ProcessMessages();
  }
}
發表人 - allenchan 於 2004/12/14 22:52:03
感謝大大...終於有出現了... 高手出招...果然不同...^^...感恩...
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-14 23:08:30 IP:61.64.xxx.xxx 未訂閱
引言:
引言: 加入紅色部份即可
while(!infile.eof())
{
  處理文字檔副程式;
  i  ;
  Label1->Caption="目前處理資料筆數: " IntToStr(i);
  Application->ProcessMessages();
}
我加了大哥說的那一行...但是FORM還是不見踪影... 一直到文字檔處理完才出現... 發表人 - >< face="Verdana, Arial, Helvetica"> 抱歉看太快沒看到你是放在OnCreate裡
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-14 23:11:34 IP:220.135.xxx.xxx 未訂閱
另外想請問大大...如果我不知道全部會處理幾筆... 我想放一個CGauge元件... 不知道有沒有辦法去顯示多少百分比... 問題就不知道全部有幾筆...而只知道處理幾筆... 只能把Max設死的筆數...不知有沒有改善... 如果大大知道...麻煩指導一下...謝謝...
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-14 23:11:58 IP:220.135.xxx.xxx 未訂閱
另外想請問大大...如果我不知道全部會處理幾筆... 我想放一個CGauge元件... 不知道有沒有辦法去顯示多少百分比... 問題就不知道全部有幾筆...而只知道處理幾筆... 只能把Max設死的筆數...不知有沒有法子來改善... 如果大大知道...麻煩指導一下...謝謝...
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-14 23:18:25 IP:61.62.xxx.xxx 未訂閱
不知道筆數有幾筆怎算百分比呢?您的 inifile 是何種型別呢?看看有沒有辦法從 inifile 來得知總筆數。
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-14 23:22:07 IP:220.135.xxx.xxx 未訂閱
引言: 不知道筆數有幾筆怎算百分比呢?您的 inifile 是何種型別呢?看看有沒有辦法從 inifile 來得知總筆數。
text...純文字檔,所以才想不出要怎麼作... 不知大哥有沒有其它的方式來解決... 麻煩告知...謝謝... 發表人 - huanyuan 於 2004/12/14 23:26:25
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-14 23:24:36 IP:61.64.xxx.xxx 未訂閱
引言: 另外想請問大大...如果我不知道全部會處理幾筆... 我想放一個CGauge元件... 不知道有沒有辦法去顯示多少百分比... 問題就不知道全部有幾筆...而只知道處理幾筆... 只能把Max設死的筆數...不知有沒有法子來改善... 如果大大知道...麻煩指導一下...謝謝...
從你上述的碼我想你應該是自行開檔, 讀出資料後處理, 如果是的話建議你把MAX設為檔案的大小Byte數, 而目前進度百分比就是你讀出的bytes總數, 當讀出的bytes數等於檔案大小時進度不就剛好百分之百, 這樣講不知您了解嗎
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-14 23:24:39 IP:61.62.xxx.xxx 未訂閱
~~ 不好意思捏,我的意思是您的 >> *
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-12-14 23:35:09 IP:220.135.xxx.xxx 未訂閱
引言: ~~ 不好意思捏,我的意思是您的 >> *>< face="Verdana, Arial, Helvetica"> sorry...本人程度差....不知道是什麼型別... 底下是我開檔的方式... char buff[81]; ifstream infile; infile.open(StrFilename); String Temp while(!infile.eof() ) { infile.getline(buff,sizeof(buff)); Temp=String(buff); }
huanyuan
一般會員


發表:18
回覆:48
積分:18
註冊:2003-07-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-12-14 23:39:00 IP:220.135.xxx.xxx 未訂閱
引言:
引言: 另外想請問大大...如果我不知道全部會處理幾筆... 我想放一個CGauge元件... 不知道有沒有辦法去顯示多少百分比... 問題就不知道全部有幾筆...而只知道處理幾筆... 只能把Max設死的筆數...不知有沒有法子來改善... 如果大大知道...麻煩指導一下...謝謝...
從你上述的碼我想你應該是自行開檔, 讀出資料後處理, 如果是的話建議你把MAX設為檔案的大小Byte數, 而目前進度百分比就是你讀出的bytes總數, 當讀出的bytes數等於檔案大小時進度不就剛好百分之百, 這樣講不知您了解嗎 < face="Verdana, Arial, Helvetica"> 大大的方式是不錯的方法...好像是目前唯一可解決的方式... 我想來試看看這種方式... 但不知道這個方式要怎麼寫... 還是有資料可以參考... 麻煩大大指導囉...感謝...
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-12-14 23:56:01 IP:61.62.xxx.xxx 未訂閱
看起來您的資料一行就是一筆,先用一個迴圈跑完一次就知道有幾行啦:
int GetLineCount(string StrFileName)
{
  ifstream infile;
  infile.open(StrFileName.c_str());
  
  int LineCount = 0;
  char ch;      while(infile.get(ch))
  {
    if (ch == '\n')
      LineCount  ;
  }
  infile.close();
  return LineCount;
}    /* 以下為您原本的程式碼,多加一個 LineCount */
int LineCount = GetLineCount(StrFilename);
char buff[81];
ifstream infile;
infile.open(StrFilename);
String Temp 
while(!infile.eof() )
{
  infile.getline(buff,sizeof(buff));
  Temp=String(buff);
}
LineCount 就是你資料的總筆數。 發表人 - allenchan 於 2004/12/15 00:26:20
terencechiu
一般會員


發表:13
回覆:29
積分:8
註冊:2004-12-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-12-15 14:35:37 IP:61.222.xxx.xxx 未訂閱
我也一直對處理時畫面沒反應很困擾。 也常在想百分比怎麼做。 前面幾位大大的範例,大概已經解決了前面的兩個問題, 謝謝啦。 小弟我放一下讀INI的幾行: 用TIniFile來做。 .cpp ------------------------------------------- T2EIniFile = new TIniFile(ExtractFilePath(Application->ExeName) "My.ini"); -------------------------------------------- Terence Chiu
------
Terence Chiu
系統時間:2024-06-14 14:12:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!