好象SetPicture直接调用了Picture成员的Assign方法,Pascal中类似assign的关键词好象不少,是什么意思?如何处理数据?

解决方案 »

  1.   

    在VCL源码里找到了确定的答案,看来我的做法是可以的。procedure TPicture.SetGraphic(Value: TGraphic);
    var
      NewGraphic: TGraphic;
    begin
      NewGraphic := nil;
      if Value <> nil then
      begin
        NewGraphic := TGraphicClass(Value.ClassType).Create;
        NewGraphic.Assign(Value);
        NewGraphic.OnChange := Changed;
        NewGraphic.OnProgress := Progress;
      end;
      try
        FGraphic.Free;
        FGraphic := NewGraphic;
        Changed(Self);
      except
        NewGraphic.Free;
        raise;
      end;
    end;
      

  2.   

    其实无所谓的。图片占用的内存不多。assign有点类似于赋值,当然你可以assign一张长宽为0 的图片。
      

  3.   

    当然你可以assign一张长宽为0 的图片。那不如设为nil了。
    注意上面的代码,设为nil后:
      try
        FGraphic.Free;
        FGraphic := NewGraphic;
        Changed(Self);
      except
        NewGraphic.Free;
        raise;
      end;
    赋值语句的结果是释放原来的对象。如新值不为nil,则建立新对象。也就是说设为nil的结果是旧对象被释放同时不建立新对象。
      

  4.   

    直接赋值为nil,会导致以后无法再使用该Image控件!