"取消"按鈕中的代碼 |
尚未結案
|
SY_Huang
一般會員 發表:17 回覆:31 積分:9 註冊:2003-10-24 發送簡訊給我 |
各位大大兩個問題:
1.我打算用BDE DB 從資料庫中拿數據,因為數據非常大.同時對拿的每條記錄進行復雜的處理處理.如 6000 條記錄.隊每個記錄盡心處理判斷6次.可能化費時間30-40分鐘把結果利用用ADO 加到Access 中.打算用一個按鈕實現.
我的問題是如何動態顯示處理過程.如 5%變8%...,另如果user不想
處理.按"取消"button. 請問"取消"中代碼怎么寫.另如何關閉連接db.
2.想制作成象"MSN"養.啟動是自動躲藏.但在windows右下角中ico 中點擊一下可以調出main form.
我的問題是此代碼怎么寫.
3.能否制作成自定義執行狀態.如每天 5:15 PM執行.
|
SY_Huang
一般會員 發表:17 回覆:31 積分:9 註冊:2003-10-24 發送簡訊給我 |
|
SY_Huang
一般會員 發表:17 回覆:31 積分:9 註冊:2003-10-24 發送簡訊給我 |
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
引言: 各位大大兩個問題: 1.我打算用BDE DB 從資料庫中拿數據,因為數據非常大.同時對拿的每條記錄進行復雜的處理處理.如 6000 條記錄.隊每個記錄盡心處理判斷6次.可能化費時間30-40分鐘把結果利用用ADO 加到Access 中.打算用一個按鈕實現. 我的問題是如何動態顯示處理過程.如 5%變8%...,另如果user不想 處理.按"取消"button. 請問"取消"中代碼怎么寫.另如何關閉連接db. 2.想制作成象"MSN"養.啟動是自動躲藏.但在windows右下角中ico 中點擊一下可以調出main form. 我的問題是此代碼怎么寫. 3.能否制作成自定義執行狀態.如每天 5:15 PM執行.SY_Huang您好..我想可能是因為您一次問太多問題了..所以沒什麼人想答吧 同時對拿的每條記錄進行復雜的處理<== 關於問題一..我想到了一個 > 在 > > |
SY_Huang
一般會員 發表:17 回覆:31 積分:9 註冊:2003-10-24 發送簡訊給我 |
首先謝謝geniustom.第一個問題。我已經按照你的Idea 做了一個 測試.代碼如下:
var
Form1: TForm1;
flag:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); /*確定*/
var i,count:integer;
begin self.ProgressBar1.Max:=116000;
self.ProgressBar1.Step:=1;
flag:=0; for i:=1 to 1160 do
begin
if flag=0 then
begin
for count:=1 to 100 do
begin
self.ProgressBar1.StepIt;
end;
end ;
end ; end; procedure TForm1.Button2Click(Sender: TObject); /*取消*/
begin
flag:=-1;
end; 但是。我發現如果執行"確定"按鈕﹐后再執行"取消"buttton.不能中斷"確定"執行中的執行行為.只有"確定"執行完后.focus 才能到"取消"button.但此時."確定"中已經執行完畢.
設想是否要用TThread 多線程來開發此段代碼.請geniustom兄.能否給出相應此代碼.為謝!
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
var Form1: TForm1; flag:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); /*確定*/ begin self.ProgressBar1.Max:=100; self.ProgressBar1.Step:=1; self.ProgressBar1.position:=0; flag:=1; PROCESSDB; end; procedure TForm1.Button2Click(Sender: TObject); /*取消*/ begin flag:=-1; end; procedure PROCESSDB(); var i,count:integer; begin for i:=1 to (資料庫筆數/100) do begin if flag=1 then begin //您要做的資料庫處理 application.Processmessages; self.ProgressBar1.StepIt; end else exit; //離開回圈..不處理了 end ; end;程式碼改成這樣看看..應該就可以了... 不過直得一提的是..如果您的資料就算分了100等分(1160)每一等分仍然要處理一段時間時.. (例如3秒鐘我想應該是使用者忍受的範圍)假設3秒鐘能處理500筆 建議改成以下的方式... < class="code"> procedure TForm1.Button1Click(Sender: TObject); /*確定*/ begin self.ProgressBar1.Max:=您的資料筆數/500; self.ProgressBar1.Step:=1; self.ProgressBar1.position:=0; flag:=1; PROCESSDB; end; procedure PROCESSDB(); var i,count:integer; begin for i:=1 to (資料庫筆數/500) do begin if flag=1 then begin //您要做的資料庫處理 application.Processmessages; self.ProgressBar1.StepIt; end else exit; //離開回圈..不處理了 end ; end; 試試看吧..程式碼我是直接回應的..沒有開啟DELPHI.. 所以不知道會不會有小錯誤..不過程式的邏輯大概是這樣.. GOOD LUCK =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就 發表人 - |
SY_Huang
一般會員 發表:17 回覆:31 積分:9 註冊:2003-10-24 發送簡訊給我 |
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |