偶刚学delphi ,想问下break语句能否在if then 循环下使用?就是完全没有for ..while do 这样循环体的情况下
解决方案 »
- FastReport和Report Machine问题,知道的进
- (在线)ShowModal问题,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111111
- 动态改变IE代理服务器地址
- 如何将一个Edit中的内容赋值给一个字符数组阿
- 关于存折补登的问题 急!
- 探讨一下:在消息机制中连接数据库要不要使用多线程
- 急:如何将ADOconnection和数据库连起来?
- 通过DLL创建的线程与主程序创建的线程在CPU时间上的占用是否相同?可调吗?
- 如何取得sqlserver2000的时间????
- 想做个dbgrid 的 树状结构显示 没有思路 求大佬给点思路
- 如何判断Edit1.Text内容在ListView1中存在
- delphi捕捉不到stack overflow
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;
Form1: TForm1;
m,i: integer;
function CanBreak:boolean;
var
CanBreak: Boolean;
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.
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.
'开始' 就是从1读到10000并显示出来。。'停止' 就是想在读数中途中停止,并显示读到的数字
---现在的问题是'开始'就一直运行下去的点击'停止'键无反应
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;