假设我写了一个button1click事件处理程序,在调用时(即当click1单击时)继续向变量计数器添加1:
var
i : counter;
begin
while 1 = 1 do
inc(i);
end;
现在我想在我的表单上添加另一个按钮,并将其命名为“停止”,这将突然退出 button1click(在被调用之后)或者阻止它向计数器添加1,我该怎么做?
答案 0 :(得分:3)
希望这将提供一些关于如何根据您的需求调整基于计时器的方法的想法:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Timer1: TTimer; // with Interval = 1 (for example) and Enabled = FALSE
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Execute(Sender: TObject);
private
fCounter: Integer;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := TRUE;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := FALSE;
end;
procedure TForm1.Timer1Execute(Sender: TObject);
begin
Inc(fCounter);
end;
如果您的需求更加复杂,那么基于TThread的方法可能更合适。但无论你做什么,都不要求助于 Application.ProcessMessages 它只会让你感到悲伤!
答案 1 :(得分:2)
Application.ProcessMessages
放在里面。这允许其他控件处理和响应事件。但是,做这样的事情并不是一个好习惯。你在表单中做的所有事情应该是对某些事件的反应,所以如果你想做一些定期的事情,你应该使用计时器或类似的东西。
答案 2 :(得分:2)
你可以把你的时间放在一个单独的线程中。简单的TThread就足够了,但也有特殊的线程库,如AsyncCalls或OmniThreadLibrary。