类是什么(50分)

多谢各位高手,体谅一个菜鸟的心情
 
因为str是一个新的实例对象变量和Label1是两个实例对象!尽管它们具有相同属性和方法,
就像双胞胎一样,Str和Labelq1是两个指向不同地址的指针对象,总之就是两个不同的个体.....
 
我又试了一下,下面的代码能行

var
str:tlabel;
begin
str:=tlabel.Create(label1);
str.Caption:='start';
label1.caption:=str.caption;
str.Free;
end;

不过换成
var
str:tlabel;
begin
str:=tlabel.Create(label1);
str.Caption:='start';
label1:=str;
str.Free;
end;

为何又不行了,str是tlabel型的,把它赋给label1不行吗
 
行啊。不过它只是把它自己(其实是一个指针, 指向它这个TLabel类的实例所在的内存)给了label1这个变量。
然后你有调用了str.free. 也就是把str指向的内存给释放了(不幸的是label1现在也指向那里)
所以label1现在指向的是一块无效内存。当然会出错了
 
to pearl,我照你说的试了一下,还是不行啊
var
str:tlabel;
begin
str:=tlabel.Create(label1);
str.Caption:='start';
label1:=str;
end;
 
str:=tlabel.Create(label1);
str.Caption:='start';
label1:=str;//至此,LABEL1的指针已经指向STR的内存地址了
str.Free;//但在这儿,这块内存又补释放了,所以出错了
 
一个可视控件要显示出来要满足几个条件的:
1. Parent是否设置
2. Visible是否为True
3. Width, Height是否不为0

很显然你建立的控件并不满足上述条件,所以你看不见。
str := TLabel.Create(self);后面加一句str.parent := self就行了。
 
谢谢相助
 
感谢dodo,受益非浅!
 
顶部