按下按钮时德尔福停止程序

Lav*_*Lav 2 delphi delphi-7

如何通过按某个按钮在执行过程中停止重复循环?程序只将一个字母写入编辑框,然后等待一段时间,按指定顺序写另一个字母等,暂停使用sysutils.sleep.

例:

procedure TForm1.Button4Click(Sender: TObject);
var
    j: integer;

begin
    edit1.Text:='a';
    edit1.Text:='a';
    sysutils.Sleep(l*20);
    edit1.Text:='b';
    edit1.text:='3';
    sysutils.sleep(l*20);
    j:= 1 ;

    repeat
        edit1.Text:='1';
        sysutils.sleep(l*2);
        edit1.Text:='0';
        edit1.text:='2';
        sysutils.sleep(l*2);
        edit1.Text:='3';
        edit1.text:='4';
        sysutils.sleep(l*2);
        edit1.Text:='5';
        sysutils.sleep(l*2);
        j:= j + 1;
    until j = 5;

end;
Run Code Online (Sandbox Code Playgroud)

我需要的是:我按下一个按钮然后写下这些字母,然后每按一下其他按钮,它就会停止程序并跳转到其他按钮程序.

我知道这是可能的,因为很多应用程序可以循环,直到你按下按钮并按下按钮时停止循环,但我不知道如何做到这一点.目前,该应用程序冻结,直到它完成循环.

Tom*_*erg 5

正如大卫在评论中所说,你需要了解事件驱动的编程.很快就说,当你的程序启动时,它只是在等待事件发生.事件是例如按钮点击,用户在编辑框中键入内容,从通信端口接收数据等.作为程序员的工作是编写事件处理程序,即由这些事件触发的代码(并希望做一些有用的事情) ).

您已经在代码中使用了一个事件处理程序Button4Click.根据您的描述,您还将拥有另一个OnClick处理程序,也许它是Button5Click.要完成任务,您还需要一个具有OnTimer事件的TTimer控件.事件处理程序应该尽可能少.

所以,在你的"反应游戏"中你需要三个事件:

  • Button4Click开始你的'游戏'
  • Timer1Timer事件更改编辑框中的字符
  • Button5Click停止'游戏'.

此外,您还需要一个存储空间来显示字符.由于您显示单个字符,因此可以将它们存储在字符串中.如果要在编辑框中显示字符串,则可以使用TStringList作为存储.要知道在下一个计时器事件中显示哪个字符,可以使用整数变量作为计数器.

Button4Click事件处理程序会

  • 初始化字符存储,让我们称之为s和计数器变量,让我们称之为i.
  • 显示编辑框中的第一个字符
  • 设置定时器间隔
  • 启动计时器(在设计时你会设置Timer1.Enabled:= false)

Timer1Timer事件处理程序会

  • 停止计时器
  • 递增计数器i,
  • 显示角色s [i]
  • 如果需要,设置新的间隔
  • 重启计时器

Button5Click事件处理程序会

  • 停止计时器
  • 无论你想要它做什么

希望这能让你前进.我没有为你编写任何示例代码,所以你可以自己考虑一下.但如果您碰壁,请询问有关您问题的具体问题.