从ImageList1中调出一幅位图,显示在Image1中,Image1.Transparent设为true。在16位色显示下,图片是透明的;在32位色显示下,图片周边的白色方框依然显示出来。将显示属性中的颜色质量设定为32位。代码如下:
//有白框的--32位色环境
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Transparent := True;
  ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;//没白框的--32位色环境
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Transparent := True;
  Image1.Picture.Bitmap.LoadFromFile('cms.bmp');
end;另外使用Image1.Picture.Bitmap.LoadFromResource(HInstance,'B1');即从资源调入图片也可以正常显示。唯独在32色下 从ImageList调入有问题。其实使用其他方式也能解决,不过好奇为什么ImageList会有这个现象?跟ImageList选项设置有关吗?试过几个选项,没什么效果。

解决方案 »

  1.   

    maozefa(阿发伯) 
    你说的32色环境指的是32色图片?还是屏幕设置32位方式?
    =========
    32位色环境是屏幕设置为32位颜色,屏幕显示属性,“颜色质量”设置为“最高(32位)”。听你这么一说,我忘了图片的颜色是多少位的了,好像是用windows带的画笔工具画出来后存为最高质量的.bmp文件,是不是跟这个有关系.....我再去试试,有可能啊。qzmp_sc(你是白云~我是乌鸦) 
    窗体的Transparent??
    =========
    我说的不是窗体的Transparent,是在窗体上放个Image,Image的图片根据需要从ImageList中调出,让Image透明。
      

  2.   

    去试了试,bmp文件只有单色、8色、256色、24位色这么几种,没有32位色的bmp,我再详细说下做法; 在form上放一个Image组件,再放一个ImageList组件,打开windows画笔,创建一个64*64的图片,用白色填充,随便画几笔红色(别画到左下角的那个点上),存为一个bmp文件,将ImageList尺寸改为64×64,调入刚做好的bmp文件。然后放个button在form上。
    代码:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Transparent := True;
      ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
    end;
    这时Image1将白色的背景和红色的图案都显示出来了——白色部分应该透明掉的。
    此时不用改程序,到桌面,点右键选“属性”,到显示设置去选桌面的“颜色质量”,改为“中(16位)”,然后再运行这个程序,现在白色部分透明了,只显示红色的图案了。我就是想问问:图片的透明与桌面的颜色质量设置有关么?但是另外一个例子又说明似乎无关:
    先将桌面改回32位颜色。
    然后将代码改为:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Transparent := True;
      ImageList1.Picture.Bitmap.LoadFromFile('1.bmp');  //1.bmp就是刚才我们创建的图片
    end;
    现在运行:可看到在32位颜色质量的桌面环境下,图片的白色部分又透明了~  我有点糊涂了,各位能指点下么?
      

  3.   

    你是否安装了第三方类似JPEG.PAS用于打开图形文件的单元或者组件,如果是,可能与这些文件有关
      

  4.   

    maozefa(阿发伯) ( ) 信誉:110    Blog  2006-12-8 19:33:41  得分: 0  听你说,我倒糊涂了,我从没试过你说的情况,我的显卡一直就是32位,我运行了你的代码,能够透明显示
    ================================
    呵呵,我的机器上装了一大堆组件,现在外面出差,等回去有时间找台别的机器试试。多谢各位关注。周末愉快,加班的兄弟们辛苦啊。
    结贴先。