用Image做一个带图形不规则窗体,环境如下:
当我给Form 的TransparentColor:=True; TransparentColorValue:=clWhite;
并且 创建字透明窗体,现出现如下问题:
1、窗口边角,能形成不规则的图形(该Image加载的图片背景色为白色),但是,整个窗口,在加载别的的控件时,只要该控件背景色为白色,这时这个控件,也为透明的,可如何让这些控件不透明呢。2、设Form 的TransparentColor:=False; 能否将Image加载的控件背景色,如白色去掉。请高手指点,这个要采用以上哪个方法好实现呢。

解决方案 »

  1.   

    使用你的这种方法,则你所描述的两个问题必然存在,而且这种透明属性(TransparentColor/TransparentColorValue)只能在Win2000及以后的版本中才有效,在Win9X及以下的版本中是无效的。
      

  2.   

    绘制透明位图的代码
    procedure DrawTrans(DestCanvas: TCanvas; X,Y: smallint; SrcBitmap:TBitmap; AColor: TColor);
    var
      ANDBitmap, ORBitmap: TBitmap;
      CM: TCopyMode;
      Src: TRect;
    begin
      ANDBitmap:= NIL;
      ORBitmap:= NIL;
      try
        ANDBitmap:= TBitmap.Create;
        ORBitmap:= TBitmap.Create;
        Src := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height);
        with ORBitmap do
        begin
          Width:= SrcBitmap.Width;
          Height:= SrcBitmap.Height;
          Canvas.Brush.Color := clBlack;
          Canvas.CopyMode := cmSrcCopy;
          Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
        end;
        with ANDBitmap do
        begin
          Width:= SrcBitmap.Width;
          Height:= SrcBitmap.Height;
          Canvas.Brush.Color := clWhite;
          Canvas.CopyMode := cmSrcInvert;
          Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
        end;
        with DestCanvas do
        begin
          CM := CopyMode;
          CopyMode := cmSrcAnd;
          Draw(X,Y, ANDBitmap);
          CopyMode := cmSrcPaint;
          Draw(X,Y, ORBitmap);
          CopyMode := CM;
        end;
        finally
          ANDBitmap.Free;
          ORBitmap.Free;
      end;
    end;
      

  3.   

    将透明的颜色(TransparentColorValue)换成其他不常用的颜色如clFuchsia(紫色),将图片上要透明的地方和form的颜色都弄成这个颜色