Delphi

本类阅读TOP10

·分布式网络考试系统原型分析及实现
·游戏外挂设计技术探讨①
·使用HOOK随心监视Windows
·Delphi 水晶报表打包解决
·试题库开发中非文本数据的处理
·如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
·如何使用Delphi设计强大的服务器程序
·工人线程中关闭窗体的实现
·用DLL方式封装MDI子窗体。
·支持XP下托盘栏气球提示的托盘单元

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
DELPHI开发中的小盲区

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

类型变量的赋值

首先看看下面一段代码,运行一下看看
procedure TForm1.Button1Click(Sender: TObject);
var
  FormImage: TBitmap;
begin
  FormImage:=TBitmap.Create;  
  FormImage := GetFormImage;
  try
    formImage.SaveToFile('c:\a.bmp');
  finally
    FormImage.Free;
  end;
end;

可以分析一下,上面代码是否有问题呢,进行调试时虽然不会出现错误,但是事实的确有很大的问题,因为

GetFormImage返回的本身就是一个TbitMap类型的对象
而使用VCL的Create方法创造的也是一个实例,我们对于实例之间不能使用" :="进行操作;
只能使用以下两种方式进行操作

方法一:

procedure TForm1.Button1Click(Sender: TObject);
var
  FormImage: TBitmap;//声明一个该类型变量
begin
 // FormImage:=TBitmap.Create; //这句不应该有
  FormImage := GetFormImage;  //通过 Tform方法进行给变量赋值,相当于已经使用了Create方法,这时可以直接使用,
  try
    formImage.SaveToFile('c:\a.bmp');
  finally
    FormImage.Free;
  end;
end;
方法二:

使用assign,但是此时必须
使用create方法构造一个实例,因为使用assign进行操作对象时,是将源实例的属性都复制入目标实例中,但是如果进行操作大型结构的类型变量时可能效率不高。

如下
procedure TForm1.Button2Click(Sender: TObject);
var
  FormImage: TBitmap;
begin
  FormImage:=TbitMap.Create;
  FormImage.Assign(GetFormImage);
  try
    formImage.SaveToFile('c:\a.bmp');
  finally
    FormImage.Free;
  end;
end;

感谢以前的工程部经理,中国BCB论坛斑竹 lewolf 大哥 ^_^

QQ:53997882

 

 




相关文章

相关软件