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

請問如何按下Button來中斷stringgrid中正在執行的程式呢?

尚未結案
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-01 01:03:27 IP:61.229.xxx.xxx 未訂閱
hi,我有一測試程式,會將"pass"或"fail"的結果show在string grid cell內,它是一項一項執行的,可是,如果我要在中途按下burron來停止程式繼續執行卻不行,以下是我的程式碼,不知是哪裡出錯了呢??? 我設一bool test_flag來判斷,srting grid cell出現"fail"時,程式就會停止執行,但如我要按下stopclick來改變test_flag的旗標使程式停止執行,卻不行,到底是為什麼?是因為string grid的關係嗎? bool test_flag; void __fastcall TForm1::testClick(TObject *Sender) { test_flag=true; int ok,pass=0; // TEST FUNCTION PROGRAM do { ok=do_all_test(); if (ok==1) { pass ; } else { test_flag=false; } } while (test_flag); } //---------------------------------------------------------- void __fastcall TForm1::stopClick(TObject *Sender) { test_flag=false; } //----------------------------------------------------------- int __fastcall TForm1::do_all_test() { int ok=1; /* PASS --> ok=1, FAIL --> ok=0 */ test_1 (&ok); if (ok == 0) { sg->Cells[3][1]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][1]="pass"; sg->Repaint(); } test_2(&ok); if(ok==0) { sg->Cells[3][2]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][2]="pass"; sg->Repaint(); } } Auston Huang
------
Auston Huang
xufs
一般會員


發表:16
回覆:26
積分:8
註冊:2003-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-01 10:49:32 IP:202.109.xxx.xxx 未訂閱
引言: hi,我有一測試程式,會將"pass"或"fail"的結果show在string grid cell內,它是一項一項執行的,可是,如果我要在中途按下burron來停止程式繼續執行卻不行,以下是我的程式碼,不知是哪裡出錯了呢??? 我設一bool test_flag來判斷,srting grid cell出現"fail"時,程式就會停止執行,但如我要按下stopclick來改變test_flag的旗標使程式停止執行,卻不行,到底是為什麼?是因為string grid的關係嗎? bool test_flag; void __fastcall TForm1::testClick(TObject *Sender) { test_flag=true; int ok,pass=0; // TEST FUNCTION PROGRAM do { ok=do_all_test(); if (ok==1) { pass ; } else { test_flag=false; } } while (test_flag); } //---------------------------------------------------------- void __fastcall TForm1::stopClick(TObject *Sender) { test_flag=false; } //----------------------------------------------------------- int __fastcall TForm1::do_all_test() { int ok=1; /* PASS --> ok=1, FAIL --> ok=0 */ test_1 (&ok); if (ok == 0) { sg->Cells[3][1]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][1]="pass"; sg->Repaint(); } test_2(&ok); if(ok==0) { sg->Cells[3][2]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][2]="pass"; sg->Repaint(); } } Auston Huang
--------------------------------------------------------- 在 // TEST FUNCTION PROGRAM do { ok=do_all_test(); if (ok==1) { pass ; } else { test_flag=false; } } while (test_flag); 中只有test_flag 等於零值﹐才能退出循環。所以﹐應改為test_flag==false。未知對否﹖您試試看﹗
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-01 12:23:34 IP:218.163.xxx.xxx 未訂閱
引言: hi,我有一測試程式,會將"pass"或"fail"的結果show在string grid cell內,它是一項一項執行的,可是,如果我要在中途按下burron來停止程式繼續執行卻不行,以下是我的程式碼,不知是哪裡出錯了呢??? 我設一bool test_flag來判斷,srting grid cell出現"fail"時,程式就會停止執行,但如我要按下stopclick來改變test_flag的旗標使程式停止執行,卻不行,到底是為什麼?是因為string grid的關係嗎?
bool test_flag;
void __fastcall TForm1::testClick(TObject *Sender)
{
     test_flag=true;
     int ok,pass=0;
     // TEST FUNCTION PROGRAM
     do {
          ok=do_all_test();
         if (ok==1)
             {
              pass  ;
             }
          else
             {
             test_flag=false;
              }
           Application->ProcessMessages(); // <====加上這一行試試吧。因為你這裡是個loop,所以你按下stopClick事件時是沒辦法立刻去執行test_flag = false; 
        } while (test_flag);
}
//----------------------------------------------------------
void __fastcall TForm1::stopClick(TObject *Sender)
{
   test_flag=false;
}    //-----------------------------------------------------------
int __fastcall TForm1::do_all_test()
{
     int ok=1;             /* PASS --> ok=1, FAIL --> ok=0 */
     test_1 (&ok);
     if (ok == 0)
         {
           sg->Cells[3][1]="fail";
           sg->Repaint();
           return(ok);
         }
     else
        {
           sg->Cells[3][1]="pass";
           sg->Repaint();
        }
     test_2(&ok);
     if(ok==0)
        {
           sg->Cells[3][2]="fail";
           sg->Repaint();
           return(ok);
        }
     else
        {
           sg->Cells[3][2]="pass";
           sg->Repaint();
        }
            
}
Auston Huang
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-01 21:04:00 IP:61.229.xxx.xxx 未訂閱
二位大大,我試過了,可是都不行呢? Auston Huang
------
Auston Huang
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-02 14:34:02 IP:218.163.xxx.xxx 未訂閱
引言: 二位大大,我試過了,可是都不行呢? Auston Huang
那奇怪了,我試就可以,你檢查一下程式碼吧? 我測試的程式如下:
//開始按鍵
bool test_flag;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int Count = 0;
  test_flag=true; 
  do
  {
     Label1->Caption = Count  ;
     Application->ProcessMessages();
  }while (test_flag);
}
//停止按鍵
void __fastcall TForm1::Button2Click(TObject *Sender)
{
      test_flag= false;
}
發表人 - liangnet 於 2004/04/02 14:35:54
xufs
一般會員


發表:16
回覆:26
積分:8
註冊:2003-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-09 17:27:11 IP:202.109.xxx.xxx 未訂閱
引言:
引言: 二位大大,我試過了,可是都不行呢? Auston Huang
那奇怪了,我試就可以,你檢查一下程式碼吧? 我測試的程式如下:
//開始按鍵
bool test_flag;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int Count = 0;
  test_flag=true; 
  do
  {
     Label1->Caption = Count  ;
     Application->ProcessMessages();
  }while (test_flag);
}
//停止按鍵
void __fastcall TForm1::Button2Click(TObject *Sender)
{
      test_flag= false;
}
發表人 - liangnet 於 2004/04/02 14:35:54
引言:
引言: hi,我有一測試程式,會將"pass"或"fail"的結果show在string grid cell內,它是一項一項執行的,可是,如果我要在中途按下burron來停止程式繼續執行卻不行,以下是我的程式碼,不知是哪裡出錯了呢??? 我設一bool test_flag來判斷,srting grid cell出現"fail"時,程式就會停止執行,但如我要按下stopclick來改變test_flag的旗標使程式停止執行,卻不行,到底是為什麼?是因為string grid的關係嗎? bool test_flag; void __fastcall TForm1::testClick(TObject *Sender) { test_flag=true; int ok,pass=0; // TEST FUNCTION PROGRAM do { ok=do_all_test(); if (ok==1) { pass ; } else { test_flag=false; } } while (test_flag); } //---------------------------------------------------------- void __fastcall TForm1::stopClick(TObject *Sender) { test_flag=false; } //----------------------------------------------------------- int __fastcall TForm1::do_all_test() { int ok=1; /* PASS --> ok=1, FAIL --> ok=0 */ test_1 (&ok); if (ok == 0) { sg->Cells[3][1]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][1]="pass"; sg->Repaint(); } test_2(&ok); if(ok==0) { sg->Cells[3][2]="fail"; sg->Repaint(); return(ok); } else { sg->Cells[3][2]="pass"; sg->Repaint(); } } Auston Huang
--------------------------------------------------------- 在 // TEST FUNCTION PROGRAM do { ok=do_all_test(); if (ok==1) { pass ; } else { test_flag=false; } } while (test_flag); 中只有test_flag 等於零值﹐才能退出循環。所以﹐應改為test_flag==false。未知對否﹖您試試看﹗
只有while (test_flag)的test_flag 等於零值﹐才能退出循環。所以﹐應將其改為test_flag==false。未知對否﹖您試試看﹗
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-09 18:11:30 IP:218.163.xxx.xxx 未訂閱
[/quote] 只有while (test_flag)的test_flag 等於零值﹐才能退出循環。所以﹐應將其改為test_flag==false。未知對否﹖您試試看﹗ [/quote] test_flag = false 也就是等於0 test_falg = true 也就是不等於0 電腦就是靠值是否等於0來表示false OR true 不過他這題是要test_flag == false 時跳出loop 應該是while(test_flag) OR while(test_flag == true)
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-12 23:08:05 IP:61.229.xxx.xxx 未訂閱
大大們,我都試過了,不過還是沒辦法利用來改變旗標停止迴圈的執行,我想可能要改變程式的架構,採用循序結構,而不要使用迴圈的寫法了!謝謝囉<_> Auston Huang
------
Auston Huang
系統時間:2024-11-23 19:25:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!