大家帮我看看这段短短的代码为什么运行后退出时会出错?(50分)

  • 主题发起人 主题发起人 孔明.net
  • 开始时间 开始时间

孔明.net

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Form1: TForm1;
i,x:integer;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
ZD:array[0..11] of TPanel;
begin
ZD[0]:=Panel1;
ZD[1]:=Panel11;
ZD[2]:=Panel3;
ZD[3]:=Panel4;
ZD[4]:=Panel6;
ZD[5]:=Panel13;
ZD[6]:=Panel8;
ZD[7]:=Panel7;
ZD[8]:=Panel9;
ZD[9]:=Panel10;
ZD[10]:=Panel12;
ZD[011]:=Panel5;
if i=12 then
i:=0;
if x=12 then
x:=0;
zd[x].Color:=$00A00000;
x:=x+1;
ZD.Color:=clRed;
i:=i+1;
zd.Color:=$00A00000;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
end;

procedure TForm1.Button1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
Timer1.Enabled:=true;
Timer1.Interval:=50;
end;
 
应该是指针使用不当的问题,用我的程序好了,我测试过没有问题
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i=12 then
i:=0;
if x=12 then
x:=0;
if findcomponent('panel'+IntToStr(x)) is TPanel then
with findcomponent('panel'+IntToStr(x)) as TPanel do
Color:=$00A00000;
x:=x+1;
if findcomponent('panel'+IntToStr(i)) is TPanel then
with findcomponent('panel'+IntToStr(i)) as TPanel do
Color:=clRed;
i:=i+1;
if findcomponent('panel'+IntToStr(i)) is TPanel then
with findcomponent('panel'+IntToStr(i)) as TPanel do
Color:=$00A00000;
end;
 
当i或则x值为12时
没有ZD[12],所以报错,小错误了!
 
退出时应将timer1,form1资源释放即可。
 
同意 gophie!
我怎么没发现呢?sigh!
 
ZD.Color:=clRed;
i:=i+1;
zd.Color:=$00A00000;
的最后一句有问题,当i=12时,因为没有判断语句,出现数组越界访问错误
 

if i=12 then
i:=0;
if x=12 then
x:=0;
zd[x].Color:=$00A00000;
x:=x+1;
ZD.Color:=clRed;
i:=i+1;
zd.Color:=$00A00000
------------------------------------
数组越界问题啦。!
改为:
I?的初始值为 0 ;


zd[x].Color:=$00A00000;

ZD.Color:=clRed;


zd.Color:=$00A00000
x:=x+1;

i:=i+1;
if i=12 then

i:=0;

if x=12 then

x:=0;
 

if i=12 then
i:=0;
if x=12 then
x:=0;
zd[x].Color:=$00A00000;
x:=x+1;
ZD.Color:=clRed;
i:=i+1;
zd.Color:=$00A00000;
当i=11出问题,还有,怎么没有下x的初始化
改为
ZD.Color:=clRed;
zd.Color:=$00A00000;
i:=i+1;
 
if i=12 then
i:=0;
if x=12 then
x:=0;
zd[x].Color:=$00A00000;
x:=x+1;
ZD.Color:=clRed;
i:=i+1;
zd.Color:=$00A00000;
当i=11出问题,还有,怎么没有下x的初始化
改为
ZD.Color:=clRed;
i := (i+1) mod 12;
zd.Color:=$00A00000;
 
d我就不说了, 呵呵, 把那俩if 放后面吧。
 
接受答案了.
 
分数不是重要,但我就不明白,为什么得分的不是我?
 
发分时正好老板来,gophie兄, 对不起了,
 
后退
顶部