如何在运行时,创建几个Tshape;(30分)

  • 主题发起人 主题发起人 城里的月饼
  • 开始时间 开始时间

城里的月饼

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序运行时(不是设计时,也不是设计好再隐藏),在Form的三个不同位置,创建
三个Tshape组件; 再通过Button按键将他们删除(不是隐藏)。我怎么做呢?
 
uses extctrls;
var
Form1: TForm1;
a :array [0..2] of TShape;
i :Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
for i :=0 to 2do
begin
a :=TShape.Create(self);
a.Parent :=Form1;
a.Left :=i*200;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
for i :=0 to 2do
a.Free;
end;
 
如果将a只声名为Tshape而不是数组(a:TShape);好象也可以,但是删除的时候不知怎么
办了?
运行你的程序时,当我第二次按button时,出错!!
 
>如果将a只声名为Tshape而不是数组(a:TShape);好象也可以,但是删除的时候不知怎么办了?
a.Free;
>运行你的程序时,当我第二次按button时,出错!!
Because you have deleted the shapes .
 
另外:用 a.destroy 行不? destroy 和 free有什么区别吗?
运行你 的程序后在free之前,我就结束了程序。这样做有什么不好吗?
 
第一次按button时已经把对象释放掉,你再第二次释放当然会出现错误了。修改如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
for i :=0 to 2do
if assigned(a) then
begin
a.Free;
a:=nil;
end;
end;
 
你是用 TShape.Create(self);
创建的,self就是form1罗,form1就是你动态创建的shape的owner
如果你的shape和form1寿命一样长,你可以不用管free的事情的,当form1它自己free的时候,
会把没有自杀的子孙后代也掐死
 
多人接受答案了。
 
后退
顶部