求教assign方法的具体用法(30分)

  • 主题发起人 主题发起人 春风化雨有你心
  • 开始时间 开始时间

春风化雨有你心

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,特别是在图像方面的用法,最好能有例子
 
你参考这样的。

TJpegImage图形显示
var tjepg1: TJpegImage;
tjepg1:= TJpegImage.Create;
ms1.Position:=0;
tjepg1.LoadFromStream(ms1);

image2.Picture.Bitmap.Assign(tjepg1);
 
我是想知道一般在什么情况下用assign这个方法,我在网上找了很久,没系统介绍的,代码看了不少,还是不怎么明白。刚学delphi不久,高手莫笑话
 
assign我理解的功能就是把东西包含进来并进行自动转换.
如zywcd的代码所示,就是把JPG的图,包含到image2.Picture.Bitmap里,并转换为BMP
 
补充:
在Delphi的VCL有一个非常重要的类TPersistent,从它的名字(可持续类)上可以知道该类提供了可持续性的功能,Vcl的基类TObject本身不支持Rtti(运行时类型信息),而TPersistent类通过{$M+}编译指令提供了RTTI的功能,打开了M开关后,Delphi在编译该对象时,会把对象的类型信息也编译进可执行文件,这样在运行时就可以动态的获得对象的属性,方法等信息,所有的VCL可视化组件都是从TPersistent派生出来的,因此可以将组件信息保存成DFM文件,可以在运行时加载。

除了RTTI外,TPersistent类定义了一个非常重要的虚方法Assign,方法的定义如下:
procedure Assign(Source: TPersistent); virtual;
这个方法其实和Java中的Clone方法和C++中的Copy Constructor构造函数一样,就是用来把一个源对象的属性复制到目标对象中。略微有些不同的是Java中的Clone和C++中的拷贝构造函数直接返回源对象的副本,而调用Assign方法前,我们需要先Create一个目标对象,然后再复制源对象的属性。默认的TPersistent对象的Assign方法只是简单的调用源对象的AssignTo方法来复制属性,而TPersistent的AssignTo虚方法只是简单的抛出一个异常。也就是说TPersistent方法并没有实现任何有意义的功能,那么对于派生自TPersistent类的对象要想提供克隆的功能都需要重载TPersistent的Assign或者AssignTo方法来实现自定义的复制功能,在Vcl中很多的类都实现了定制的Assign方法,比如最常见的TStrings类就重载了Assign方法提供了字符串列表的复制功能,在程序开发中经常会有需要将一个列表框的选项全部移动到另外一个列表中表示选择了全部的内容,这个过程其实就是一个克隆的过程,使用Assign方法来实现就非常简单,代码示意如下:

//将源列表框中的内容复制到目标列表框中

procedure TForm1.btnMoveClick(Sender: TObject);
begin
DesListBox.Items.Assign(SrcListBox.Items);
end;
 
楼上的解释已很详细啦,简单来说,对于从TPersistent类继承下来的类来说可以采用assign的方式来复制一个对象,这里是复制,即在内存中存在相同的两个对象,如直接采用
:= 的形式只是将对象的地址进行赋值,在内存中只有一个对象
 
谢谢大家!我明白了。
 
后退
顶部