1.能不能把tpicture类型的变量转换为其他类型,以赋值到其他的变量上?
2 比如我定义了一个tpicture类型的变量a,我这样赋值有错吗?a:=dbImage1.Picture;
  能否把两个tpicture类型的变量进行比较是否相等。
3 该怎么判断dbimage1上的图片为空,或者tpicture类型的变量为空?就象判断Edit1.Text=''一样

解决方案 »

  1.   

    1. 可以直接赋值
    2. a:=dbImage1.Picture ,没错, 还可以 dbimage2.picture := dbimage1.picture;
      不能直接比较如: image1.picture=a 
    3 if image1.picture=nil then
      

  2.   

    1、可以
    2、不可以
    3、  if Image1.Picture.Graphic = nil then
            //your code
      

  3.   

    1、推荐不要使用:=赋值
    a:=dbImage1.Picture是一个不安全的用法,实质上只是指针赋值而已。
    真正安全的赋值是深度复制:a.Assign(dbImage1.Picture);
    2、判断图片是否是空,最好不要判断对象是否已经创建(即image1.picture=nil),特别是在组件中。部分组件中图片是构造函数中即创建,指针不是nil,但很多时候图片的确是空的。
    安全的办法是:先判断是否为nil,再判断width和height是否为0。
      

  4.   

    对象的复制不哪能用 对象1:=对象2 的语句,应该用 对象1.Assign(对象2) 这样的语句。但是当属性是一个对象时(例如Image.picture)就可以用属性:=对象 这样的语句,如你可以这样赋值Image.picture:=myPicture (其中myPicture为TPicture类的一个对象)。为什么会这样呢?因为这里Image.picture只是一个属性,属性其实是一个接口,如果你查看一下Image的源代码可以看见,当你调用Image.picture:=myPicture时,其实Delphi实际上是执行了TImage.SetPicture(const Value:TPitcute)这个函数,当执行这个数时,Value实际上就是我们的myPicture,查看这个函数的具体实现过程,你会发现里面有一句FPicture.Assign(Value),实际上对象的复制是在这里完成的(还是依靠对象1.Assign(对象2)来完成)。