做如下循环
for i:=1   to  100000 do
  label1.caption := inttostr(i);第一次按空格键开始执行循环,循环过程中再按空格键就中止循环,并输出当前i值。
最好有点代码,

解决方案 »

  1.   

    不要跟我抢分,瓦咔咔:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure FormShow(Sender: TObject);
        procedure doloop;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      isloop:boolean;
    implementation{$R *.dfm}procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
        if key=' ' then
        begin
            isloop:= not isloop;
            doloop;
        end;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
        isloop:=false;
    end;procedure TForm1.doloop;
    var i:integer;
    begin
        for i:=1   to  100000 do
        begin
            Application.ProcessMessages;
            if isloop then label1.caption := inttostr(i) else break;
        end;
    end;
    end.
      

  2.   

    简单在窗口的onkeypress中写如下代码begin
      if keypress = #13 and Num = 0 then begin
            for i:=1   to  100000 do
            label1.caption := inttostr(i);
            Num = Num + 1;
      end else if keypress = #13 and Num = 1 then begin
            Self.update;
            Num = 0;
            Exit;
      end;
    end;
      

  3.   

    只说三个语法错误:
    1:keypress应为key
    2: num=num+1应为num=num+1
    3: if keypress = #13 and Num = 0 then 应为if (keypress = #13) and (Num = 0) then 
    而且就算改过来好像也不行,不知二楼的发贴前试过没有
      

  4.   

    但是
    如果 for i:=1   to  100000 do 没有执行完,程序根本不响应第二次按空格键,
    也就是每次都在 100000处中止循环
      

  5.   

    这就是程序里加Application.ProcessMessages这句话的原因了
      

  6.   

    2: num = num+1 应为 num := num +1;  Num = 0 应为 Num := 0
    就算改过来,二楼也是错的
      

  7.   

    谢谢各位,我担心当正在访问bool变量的时候,该变量的值发生变化,会不会引起程序的异常
      

  8.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure FormShow(Sender: TObject);
        procedure doloop;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      isloop:boolean;
    implementation{$R *.dfm}procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
        if key=' ' then
        begin
            isloop:= not isloop;
            doloop;
        end;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
        isloop:=false;
    end;procedure TForm1.doloop;
    var i:integer;
    begin
        for i:=1   to  100000 do
        begin
            Application.ProcessMessages;
            if isloop then label1.caption := inttostr(i) else break;
        end;
    end;
    end.d7测试通过
      

  9.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TRunStatus = (rsRun, rsStop, rsExit);
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        FStatus: TRunStatus;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      case FStatus of
        rsRun: FStatus := rsStop;
        rsStop: FStatus := rsRun;
      end;  Randomize;
      while True do
      begin
        Application.ProcessMessages;
        if FStatus = rsExit then Break;
        if FStatus = rsStop then Continue;
        Panel1.Caption := IntToStr(Random(100));
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      UpdateWindow(Self.Handle);
      FStatus := rsStop;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      FStatus := rsExit;
    end;end.
    看看这个怎样?
      

  10.   

    这个其实很简单用:piao9wu(飘麟霄骥) 的这点代码就可以了。
      

  11.   

    兴趣来了,又改造了一下!
    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, Buttons;type
      TRunStatus = (rsRun, rsStop, rsExit);
      TForm1 = class(TForm)
        pnlResult: TPanel;
        edtLength: TEdit;         //用于得到随机数字的长度
        btnStart: TSpeedButton;   //用于发送开始信号
        procedure FormKeyPress(Sender: TObject; var Key: Char);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure btnStartClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        FStatus: TRunStatus;
        function RandomLuckyNO: String;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #32 then     //空格,开始和停止状态
      case FStatus of
        rsRun: FStatus := rsStop;
        rsStop: FStatus := rsRun;
      end;
      if Key = #13 then    //回车,退出循环
        FStatus := rsExit;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      FStatus := rsExit;
    end;procedure TForm1.btnStartClick(Sender: TObject);
    begin
      btnStart.Visible := False;
      edtLength.Visible := False;
      try
        FStatus := rsStop;
        Randomize;
        while True do
        begin
          Application.ProcessMessages;
          if FStatus = rsExit then Break;
          if FStatus = rsStop then Continue;
          pnlResult.Caption := RandomLuckyNO;
          Sleep(10);   //这个随便了
        end;
      finally
        btnStart.Visible := True;
        edtLength.Visible := True;
      end;
    end;function TForm1.RandomLuckyNO: String;
    var
      i: Integer;
      iNOLen: Integer;
    begin
      iNOLen := StrToIntDef(edtLength.Text, 6);
      Result := '';
      for i := 1 to iNOLen do
      begin
        Result := Result + IntToStr(Random(10));
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      //用于控制长度编辑框里只能输入数字
      SetWindowLong(edtLength.Handle, GWL_STYLE, GetWindowLong(edtLength.Handle, GWL_STYLE) or ES_NUMBER);
    end;end.
      

  12.   

    Delphi1985(Darkhorse) ( ) 信誉:100  2005-03-23 13:36:00  得分: 0  
     
     
       这个其实很简单用:piao9wu(飘麟霄骥) 的这点代码就可以了。
     
     
    -------------------------------------------------------------
    拜托,那是我的代码好不好,看青一楼的回帖先
      

  13.   

    简单问题回帖的就是多啊,sigh
      

  14.   


    var
      H: Handle = 0;
    procedure dosomething;
    begin
      for x to y do
      do........
    end;
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if not (key in[#$20,#$13]) then exit;
      if H > 0 then
      SuspendThread(H);
      else
      CreateThread(nil,0,@dosomething,nil,H);
    end;
      

  15.   

    如果你要退出单层循环的话,加个Break;语句就行了,多层用goto 标签名;吧
      

  16.   

    多线程的来了,呵呵unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        btn_start: TButton;
        Label1: TLabel;
        btn_stop: TButton;
        procedure btn_startClick(Sender: TObject);
        procedure btn_stopClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  TDisPlay=class(TThread)
      protected
        procedure Execute;override;
      end;
    var
      Form1: TForm1;
      DisThread:TDisPlay;implementation{$R *.dfm}procedure TDisPlay.Execute;
    var
      i:integer;
    begin
    i:=0;
    for i:=1 to 100000 do
    begin
      if Terminated then break;
      Form1.label1.caption := inttostr(i);
      sleep(1);
    end;
    end;procedure TForm1.btn_startClick(Sender: TObject);begin
      DisThread:=TDisPlay.Create(False);
    end;procedure TForm1.btn_stopClick(Sender: TObject);
    begin
    DisThread.Destroy;
    end;end.