偶刚学delphi ,想问下break语句能否在if then 循环下使用?就是完全没有for ..while do 这样循环体的情况下

解决方案 »

  1.   

    这样的偶用"开始"按钮做了个无限循环的代码,想用“停止”按钮终止,用break语句停止能保留读到数字因为是死循环,就只用if then 循环。所以请高人帮帮手出点主意谢谢了。。
      

  2.   


    var
      i: integer
    begin
      CanBreak:= False;//全局變量 boolean類型
      for i:=0 to 10000 do
      begin
        if CanBreak then
          Break;
        //你的代碼
        ...
        Application.ProcessMessage;
      end;
    end;procedure ButtonClick(Sender: Tobject);
    begin
      CanBreak:= True;//中止循環
    end;
      

  3.   

    谢谢楼上的但设定不了全局变量var
      Form1: TForm1;
      m,i: integer;
     
     function CanBreak:boolean;  
      

  4.   

    4楼说的CanBreak 是变量,不是函数
    var
      CanBreak: Boolean;
      

  5.   

    没办法使用'停止按钮'。在'开始'按钮加了'Form1.Button2.SetFocus;' 但点击不了'停止按钮'...
      

  6.   

    如果不用多线程的话,一定要在循环体里加上application.processmessage才行,要不然你的介面会冻死的
      

  7.   

    加了application.processmessages  但没起作用
      

  8.   

    有application.processmessages   ,但不起作用
      

  9.   

    给你一个用线程实现的例子unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Unit2, StdCtrls, Grids, DBGrids, ZDGrid;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        Test: TestThread;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Test := TestThread.Create(True);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Test.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Button2.Caption = 'start' then
      begin
        Test.Resume;
        Button2.Caption := 'stop';
      end else
      if Button2.Caption = 'stop' then
      begin
         Test.Suspend;
         Button2.Caption := 'start';
      end;
    end;end.unit Unit2;interfaceuses
      Classes, SysUtils;type
      TestThread = class(TThread)
      private
        N: Cardinal;
      protected
        procedure Execute; override;
        procedure UpdateCaption;
      end;implementationuses Unit1, Forms;{ TestThread }
    procedure TestThread.UpdateCaption;
    begin
      if Form1.Button1.Top < 0 then
      begin
        Form1.Button1.Top := 0;
        N := -N;
      end;
      if Form1.Button1.Top > Form1.ClientHeight - 35 then
      begin
        Form1.Button1.Top := Form1.ClientHeight - 35;
        N := -N;
      end;
      Form1.Button1.Top := Form1.Button1.Top + N;
    end;procedure TestThread.Execute;
    begin
      N := 2;
      while not Terminated do
      begin
        Synchronize(UpdateCaption);
        Sleep(1);
      end;
    end;end.
      

  10.   

    两个Unit连在一起了,重贴一下
    Unit1:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Unit2, StdCtrls, Grids, DBGrids, ZDGrid;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        Test: TestThread;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Test := TestThread.Create(True);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Test.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Button2.Caption = 'start' then
      begin
        Test.Resume;
        Button2.Caption := 'stop';
      end else
      if Button2.Caption = 'stop' then
      begin
         Test.Suspend;
         Button2.Caption := 'start';
      end;
    end;end.
    Unit2unit Unit2;interfaceuses
      Classes, SysUtils;type
      TestThread = class(TThread)
      private
        N: Cardinal;
      protected
        procedure Execute; override;
        procedure UpdateCaption;
      end;implementationuses Unit1, Forms;{ TestThread }
    procedure TestThread.UpdateCaption;
    begin
      if Form1.Button1.Top < 0 then
      begin
        Form1.Button1.Top := 0;
        N := -N;
      end;
      if Form1.Button1.Top > Form1.ClientHeight - 35 then
      begin
        Form1.Button1.Top := Form1.ClientHeight - 35;
        N := -N;
      end;
      Form1.Button1.Top := Form1.Button1.Top + N;
    end;procedure TestThread.Execute;
    begin
      N := 2;
      while not Terminated do
      begin
        Synchronize(UpdateCaption);
        Sleep(1);
      end;
    end;end.
      

  11.   

    偶在一个form上创建了2个Button ....'开始' '停止'
    '开始'   就是从1读到10000并显示出来。。'停止'   就是想在读数中途中停止,并显示读到的数字
    ---现在的问题是'开始'就一直运行下去的点击'停止'键无反应
      

  12.   

    procedure TForm1.Button1Click(Sender: TObject);
    label
      100;
    var
       i:integer;
      zf:array[1..8] of string;
      
      begin
     StartFlag:=True;
     while   StartFlag   do
      begin
         i:=1;
         zf[1]:='R1';
         zf[2]:='R2';
         zf[3]:='R3';
         zf[4]:='R4';
         zf[5]:='R5';
         zf[6]:='R6';
         zf[7]:='R7';
         zf[8]:='R8';
      if  i<9 then
    100:     statictext1.caption:=zf[i];
         i:=i+1;
         sleep(100);
         goto 100;
    application.processmessages;end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    StartFlag:=False;  
    end;
      

  13.   

    就上面的程序执行Button1。循环运行到结束后,程序就死了不能执行Button2
      

  14.   

    啊...就是按了Button1开始显示从R1到R8...偶想在中途按Button2停止呀但不成功,程序还退不出来感觉是goto 这个语句的问题
      

  15.   

    请教了用了goto ,循环就退不出来了