请问如何实现按一下回车,执行一段无限循环,再按一下停止循环,因为在执行无限循环的时候,好象不会响应再次按下的回车键。
谢谢! 问题点数:20、回复次数:9Top
1 楼linzhisong(無聊)回复于 2005-01-14 12:24:52 得分 10
循环中加入
Application.ProcessMessages;
就可以了Top
2 楼gxgyj(杰克逊)回复于 2005-01-14 12:25:08 得分 2
在循环中加入
application.ProcessMessages;Top
3 楼cangwu_lee(橙子)回复于 2005-01-14 14:16:18 得分 5
路过,说说想法
Form变量:
bRunning, bStopNow:Boolean;
初始化
bRunning:=false;
bStopNow:=false;
第一次按下回车
if not bRunning then begin
bRunning:=true;
bStopNow:=false;
While Not bStopNow do
application.ProcessMessages;
end else begin
bStopNow:=true;
bRunning:=false;
end;
Top
4 楼cangwu_lee(橙子)回复于 2005-01-14 14:29:04 得分 0
不全经过验证的
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
private
bRunning, bStopNow:Boolean;
j:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not bRunning then begin
bRunning:=true;
bStopNow:=false;
j:=0;
While Not bStopNow do begin
inc(j);
label1.caption:=DateTimeToStr(now);
label2.caption:=intToStr(j); label2.Refresh;
application.ProcessMessages;
if j>2147483647-1 then j:=0;
end;
end else begin
bStopNow:=true;
bRunning:=false;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
bStopNow:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bRunning:=false;
bStopNow:=false;
end;
end.
Top
5 楼coolnan(踏平九城)回复于 2005-01-14 15:29:24 得分 1
上面的都可以,方法都是在循环的中加入,判断变量来实现,这样就OK了!Top
6 楼shuyi(舒易)回复于 2005-01-14 15:54:02 得分 1
另外还推荐一下使用线程,按回车启动线程,再按一下线程停止。Top
7 楼ytnice()回复于 2005-01-14 16:15:36 得分 0
线程怎么做?Top
8 楼ytnice()回复于 2005-01-14 17:24:24 得分 0
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
stopLoop := not stopLoop;
doLoop;
if not stopLoop then
i:=0;
end;
end;
procedure TForm1.doLoop;
begin
while not stopLoop do
begin
application.ProcessMessages;
i := i+1;
label1.Caption := intToStr(i);
end;
end;Top
9 楼xiangwangz(<*敝屣荣华 浮云生死 此身何惧*>)回复于 2005-01-14 17:39:02 得分 1
var
Form1: TForm1;
ThreadID:longword;
implementation
{$R *.dfm}
function MyThead(P:pointer):Longint;stdcall;
var iQuit:integer;
iCount,iGetMsg:integer;
MSG:TMsg;
begin //简单测试
iCount:=0;
repeat
if PeekMessage(MSG,0,0,0,PM_NOREMOVE)then
begin
if GetMessage(MSG,0,0,0)then
if integer(MSG.wParam)=10 then exit;
end;
form1.Edit1.Text:=inttostr(iCount);
inc(iCount);
iCount:=(iCount mod 100);
until(false);
result:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateThread(nil,0,@MyThead,nil,0,ThreadID);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PostThreadMessage(ThreadID,0,10,0);
end;
end.Top




