我把EXCEL里的图片复制到剪贴板后,在导到image里,但是我没办法知道图片的格式。
所以我用image.picture.assige(Clipboard);但是这样导进去的图片我要保存的时候问题就来了.用Image1.Picture.bitmap.savetostream(tfstream);存进去图片是空的.
用Image1.Picture.Graphic.savetostream(tfstream);存进去的图片打不开.
请问大家发表一下办法谢谢了.
下面的我的程序片段:
   ClipBoard.HasFormat(CF_PICTURE);
   Clipboard.Create;//创建剪贴板
   ExcelWorksheet1.Shapes.Item(i).copy;//复制图片
   image1.Picture.Assign(Clipboard); //导入.如果用.image1.picture.bitmap.assign(clipboard);会出错晕啊.
   Image1.Picture.Graphic.savetostream(tfstream);
   tfStream.Position:=0;
   tblobfield(fieldbyname('image1')).loadfromstream(tfstream);
      
  如果看不懂的我要问的问题,请说一下我在注释.

解决方案 »

  1.   

    你试试:
    var
      rect1:trect;
      FBitmap: TBitmap;
    begin
      FBitmap := TBitmap.Create;
      if clipboard.hasformat(cf_picture) then
        begin
          FBitmap.Assign(Clipboard)
          rect1:=rect(0,0,FBitmap.Width,FBitmap.Height);
          Image1.Canvas.CopyRect(rect1,FBitmap.Canvas,rect1);
          Image1.Picture.SaveToFile(path);
        end;
      FBitmap .free;
    end;
      

  2.   

    别那么麻烦了啦,用TBLOBFIELD类试试,很简单的
    在Ttable下右键add all fields
    注意,是不是多了一个Tblobfield类的实例?
    用这个实例的savetofile与loadfromfile通过中间文件就可以了其他的二进制类型也可以这样处理(要在数据库中加一列‘类型’
    如:
    ...
      adotablepicture.savetofile('temp.jpg');
      image1.picture.loadfromfile('temp.jpg');
      deletefile('temp.jpg')
    ...
      

  3.   

    to:2312(007) 
      rect1:=rect(0,0,FBitmap.Width,FBitmap.Height);
      Image1.Canvas.CopyRect(rect1,FBitmap.Canvas,rect1);
      上面这两句是什么意思啊能不能注释一下。
      我用你上面的试了一下出错了。出错提示:Unsupported clipboard format.
    -------------------
      我问这个问题的其实目的是要把EXCEL中的图片存到数据库里。但是存的时候我要先导到image里看一下。而且要以TBitmap格式存进去,因为我别的地方有用到对图片处理。但是每次FBitmap.Assign(Clipboard)或者fBitmap.assign(image.picture.Graphic)都出错。
      

  4.   

    意思是:Image1中图像大小根据FBitmap的大小而显示呀!出错?是那一句?