要想引用动态生成的TImage应该怎么做呢?比如说在procedure CreateImg中生成了img:TImage,在另外一个procedure Rotated90中想要引用这个生成的img,有什么办法吗?

解决方案 »

  1.   

    function CreateImg: TImage;Rotated90(CreateImg);————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    按照你所说的进行了改动,为什么还是在运行的时候出现异常呢?
    function TForm1.CreateImg:TImage;
    var Im:TIMage;
    begin
        Screen.cursor:=crDefault;
        im:=TImage.Create(self);
        im.Parent:=sbxMain;
        im.AutoSize:=true;
        im.Stretch:=true;
        im.Picture.LoadFromFile('H:\Program Files\Borland\Delphi6\Projects\画图new\画图\R.Bmp');
        im.Left:=200;
        im.Top:=200;
        imheight:=im.Height;
        imwidth:=im.Width;
        im.Visible:=true;
        im.OnMouseDown:=form1.ImgMouseDown;
        im.OnMouseMove:=form1.ImgMouseMove;
        im.OnMouseUp:=form1.ImgMouseUp;
        im.Transparent:=true;
           end;
    procedure TForm1.Rotated90(AImage:TImage);
    var imgheight,imgwidth:integer;
    begin
        imgwidth:=AImage.Width; 
        imgheight:=AImage.height;
        AImage.Picture.Bitmap.Height:=imgwidth;
        AImage.Picture.Bitmap.Width:=imgheight;
        AImage.Picture.LoadFromFile('H:\Program Files\Borland\Delphi6\Projects\画图new\画图\rr.bmp');
    end;procedure TForm1.sbRoClick(Sender: TObject);
    begin
        Rotated90(CreateImg);
    end;
      

  3.   

    Im只是函数中的局部变量,和返回值有什么关系?返回值仍然为nil,当然会出错.不过说实话,这实现思路就有问题,改也没用,比如调用完后,都无法释放这动态生成的实例,还是定义成全局的吧
      

  4.   

    说起来挺简单,首先修改CreateImg:
    取掉im局部变量,改为Result := TImage.Create(Self);
    然后,在需要调用Rotated90的Procedure中定义局部变量Img:
    var Img: TImage;
    ...
      Img := CreateImg;
      try
        Rotated90(Img);
      finally
        FreeAndNil(Img);
      end;
    搞定...