我有两个窗口Form1跟Form2,其中Form1的按钮点击后
procedure TForm1.FlatButton2Click(Sender: TObject);
begin
application.createform(Tform2,form2);
Form2.ShowModal;
end;
Form2里面有个小小的数据库,(Picturename,X,Y三项)用于控制窗口显示的时候载入哪张图片及图片的坐标 Image: array of TImage;
procedure TForm2.FormShow(Sender: TObject);
var
Rec_count:Integer;
begin
with ADOTable1 do
begin
try
First;
while not Eof do
begin
Rec_count:=ADOTable1.RecNo;
Image[Rec_count]:= Timage.Create(nil);
Image[Rec_count].Picture.LoadFromFile('.\Sprite\'+ADOTable1['Sprite_Name']+'.bmp');
Image[Rec_count].Parent:= PaintBox1.Parent;
Image[Rec_count].Left:= ADOTable1['X'];
Image[Rec_count].Top:= ADOTable1['Y'];
Image[Rec_count].Transparent:=true;
Image[Rec_count].Autosize:=true;
Next;
end;
finally
end;
end;
end;运行结果没问题,但是再退出窗口的时候就问题来了,关第一个窗口的时候没问题,关第二个窗口的时候提示 Invalid pointer operation,我点了确定,再按一次F9,变成了Access violation at address 004C7EFD in module.....请问是怎么回事哦 ?我想加个
for i:= 1 to MaxRecod1 do
begin
Image[i].free;
end;
但是不知道加在Form1 的FormDestroy还是form2的,我都试过,都是不行的
procedure TForm1.FlatButton2Click(Sender: TObject);
begin
application.createform(Tform2,form2);
Form2.ShowModal;
end;
Form2里面有个小小的数据库,(Picturename,X,Y三项)用于控制窗口显示的时候载入哪张图片及图片的坐标 Image: array of TImage;
procedure TForm2.FormShow(Sender: TObject);
var
Rec_count:Integer;
begin
with ADOTable1 do
begin
try
First;
while not Eof do
begin
Rec_count:=ADOTable1.RecNo;
Image[Rec_count]:= Timage.Create(nil);
Image[Rec_count].Picture.LoadFromFile('.\Sprite\'+ADOTable1['Sprite_Name']+'.bmp');
Image[Rec_count].Parent:= PaintBox1.Parent;
Image[Rec_count].Left:= ADOTable1['X'];
Image[Rec_count].Top:= ADOTable1['Y'];
Image[Rec_count].Transparent:=true;
Image[Rec_count].Autosize:=true;
Next;
end;
finally
end;
end;
end;运行结果没问题,但是再退出窗口的时候就问题来了,关第一个窗口的时候没问题,关第二个窗口的时候提示 Invalid pointer operation,我点了确定,再按一次F9,变成了Access violation at address 004C7EFD in module.....请问是怎么回事哦 ?我想加个
for i:= 1 to MaxRecod1 do
begin
Image[i].free;
end;
但是不知道加在Form1 的FormDestroy还是form2的,我都试过,都是不行的
Action :=caFree;
var
Rec_count,i :Integer;
Image: array of TImage;
begin
with ADOTable1 do
begin
First;
Rec_count :=ADOTable1.RecordCount;
SetLength(Image,Rec_count);
for I := 0 to Rec_count - 1 do
begin
Image[i]:= Timage.Create(self);
Try
Image[i].Picture.LoadFromFile('.\Sprite\'+ADOTable1['Sprite_Name']+'.bmp');
Image[i].Parent:= PaintBox1.Parent;
Image[i].Left:= ADOTable1['X'];
Image[i].Top:= ADOTable1['Y'];
Image[i].Transparent:=true;
Image[i].Autosize:=true;
finally
Image[i].free;
end;
Next;
end;
end;
end;
Except
Image[i].free;
end;
procedure TForm2.FormShow(Sender: TObject);
var
Rec_count,i :Integer;
Image: TImage;
begin
with ADOTable1 do
begin
First;
While not AdoTable1.Eof do
begin
With Timage.Create(self) do
Try
Picture.LoadFromFile('.\Sprite\'+ADOTable1['Sprite_Name']+'.bmp');
Parent:= PaintBox1.Parent;
Left:= ADOTable1['X'];
Top:= ADOTable1['Y'];
Transparent:=true;
Autosize:=true;
Except
free;
end;
Next;
end;
end;
end;