如何复制一个对象Tobject或Tclass类型(非数据库) (50分)

  • 主题发起人 主题发起人 Delphior
  • 开始时间 开始时间
D

Delphior

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建了两个记录:
type TRecord1=record
a:integer;
b:integer;
end;
var x,y:TRecord1;
或者是class,控件等对象;
现在我赋值了一个记录:
x.a:=1;
x.b:=2;
现在我需要将x的所有属性复制到y里面去,难道要我一个一个地赋值吗?有什么方法
可以一次性将x的所有属性复制到y去。
类似的,我动态创建了一组控件,他们的大多数属性都是一样的,难道要我一个一个地赋值?
我想应该有方法复制对象的。谁知道,谢谢了!
 
用指针拉
 
定义一个赋值函数一劳永逸。
 
应该是用指针比较简单,用函数也可以
 
看pascal~~~
 
具体怎样做?有没有例子?没有人会回答吗?
 
只有写函数,如果是如果是类,且继承于TPersistent,那么可以Override Assgin或者AssignTo函数,两者的区别可以查看帮助及源代码。
 
记录的话直接附值。
type TRecord1=record
a:integer;
b:integer;
end;
var
x,y:TRecord1;

x.a=1;
y:=x;

也可以
CopyMemory(@x,@y,SizeOf(TRecord1));

对象的话覆盖重写Assigned方法
 
:wr960204,

y:=x的话,y和x的地址是一样的,所以当x的属性变化时候,y也一样变化。
而我需要这两个记录是分开的
 
copymemory试过了,不行。我的目的是这样的:
edt1:=TEdit.Create(nil);
with edt_1 do begin
Parent:=panel1;
font.Color:=clBlue;
Left:=c_sz;
Top:=c_fromtop+i*24;
Height:=20;
Width:=97;
end;

edt2:=TEdit.Create(nil);
with edt2 do begin
Parent:=panel1;
Left:=c_pm;
Top:=c_fromtop+i*24;
Height:=20;
width:=113;
font.Color:=clBlue;
end;

edt1和edt2的属性值基本上差不多,我想把edt1的所有属性复制到edt2里面去,
再改一些不同值的属性,这样就可以写少很多代码。
 
重写一下那个AssignTo吧
 
如何写?有代码看看吗,谢谢啦~
 
还是这个问题,比如说:
var sFields:TFields;
aDataset:TTable;
begin
with aDataset do begin
first;
sFields:=Fields
next;
if sFields[0].asstring=aFields[0].asstring then begin
....
end;
end;
end;
这样子还是不行,仍然只是复制了地址,只要记录一滚动,sFields跟当前记录一样。
能复制数据吗?用什么方法?
用苯办法的话可以定义一个数组赋值,但是有高级一点的,通用一点的方法吗?
 
如果是指针,结构纪录,用CopyMemory肯定可以。
但是要记得new(新纪录名);否则没用。
至于可视控件可能还是要用到assign.
 
后退
顶部