现有一个矢量控件,再放有一个IMAGE 控件,想让矢量控件透明,看到IMAGE的图片,请问怎么才能让前面的控件(矢量控件)透明,或者用别的办法实现两样的办法即可。

解决方案 »

  1.   

    看看我的Panel如何透明吧~
    {******************************************************************************}
    { @UnitName     : uTransPanel,pas                                              }
    { @Project      : Budded Software Studio                                       }
    { @Copyright    : Budded Software Studio                                       }
    { @Author       : Budded                                                       }
    { @Description  : 透明 Panel                                                   }
    { @FileVersion  : 1.0.0.0                                                      }
    { @CreateDate   : 2005-08-24                                                   }
    { @Comment      : 单元评论(代码审查结论)                                     }
    { @LastUpdate   : Budded, 2005-08-24                                           }
    { @History      : Created By Budded, 2005-08-24 10:20                          }
    {******************************************************************************}unit uTransPanel;interfaceuses
      Windows, Messages, SysUtils, Graphics, Classes, Controls, ExtCtrls, Buttons;type
      TTransMode = (tmNone, tmSRCCOPY, tmSRCPAINT, tmSRCAND, tmSRCINVERT, tmSRCERASE,
        tmNOTSRCCOPY, tmNOTSRCERASE, tmMERGECOPY, tmMERGEPAINT,
        tmPATCOPY, tmPATPAINT, tmPATINVERT, tmDSTINVERT, tmBLACKNESS, tmWHITENESS);  TTransPanel = class(TPanel)
      private
        { Private declarations }
        FTransMode: TTransMode;    procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
        procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;
        procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
        function GetTransModeEx: Integer;
      protected
        { Protected declarations }
        Buffer: TBitmap;
        procedure CreateParams(var Params: TCreateParams); override;
        procedure Paint; override;
        procedure Resize; override;
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy(); override;
        property TransModeEx: Integer read GetTransModeEx;
      published
        { Published declarations }
        property TransMode: TTransMode read FTransMode write FTransMode default tmSRCCOPY;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Budded', [TTransPanel]);
    end;{ TTransPanel }procedure TTransPanel.CMCtl3DChanged(var Message: TMessage);
    begin
      inherited;
      RecreateWnd;
    end;constructor TTransPanel.Create(AOwner: TComponent);
    begin
      inherited;
      Buffer := TBitmap.Create;
      FTransMode := tmSRCCOPY;
    end;procedure TTransPanel.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
    end;destructor TTransPanel.Destroy;
    begin
      if Assigned(Buffer) then
        Buffer.Free;
      inherited;
    end;function TTransPanel.GetTransModeEx: Integer;
    begin
      Result := 0;
      case TransMode of  //case
        tmNone: Result := 0;
        tmSRCCOPY: Result := SRCCOPY;
        tmSRCPAINT: Result := SRCPAINT;
        tmSRCAND: Result := SRCAND;
        tmSRCINVERT: Result := SRCINVERT;
        tmSRCERASE: Result := SRCERASE;
        tmNOTSRCCOPY: Result := NOTSRCCOPY;
        tmNOTSRCERASE: Result := NOTSRCERASE;
        tmMERGECOPY: Result := MERGECOPY;
        tmMERGEPAINT: Result := MERGEPAINT;
        tmPATCOPY: Result := PATCOPY;
        tmPATPAINT: Result := PATPAINT;
        tmPATINVERT: Result := PATINVERT;
        tmDSTINVERT: Result := DSTINVERT;
        tmBLACKNESS: Result := BLACKNESS;
        tmWHITENESS: Result := WHITENESS;
      end;  // end case
    end;procedure TTransPanel.Paint;
    var
      Rect: TRect;
      TopColor, BottomColor: TColor;  procedure AdjustColors(Bevel: TPanelBevel);
      begin
        TopColor := clBtnHighlight;
        if Bevel = bvLowered then TopColor := clBtnShadow;
        BottomColor := clBtnShadow;
        if Bevel = bvLowered then BottomColor := clBtnHighlight;
      end;begin
    //  inherited;  Rect := ClientRect;//Rect(0, 0, Width, Height);
      Buffer.Width := Width;
      Buffer.Height := Height;
      Buffer.Canvas.Brush.Style := bsSolid;
      Buffer.Canvas.Brush.Color := Color;
      Buffer.Canvas.FillRect(Rect);
      StretchBlt(Buffer.Canvas.Handle, 0, 0, Width, Height,
        Canvas.Handle, 0, 0, Width, Height, TransModeEx);  if Ctl3D then DrawEdge(Buffer.Canvas.Handle, Rect, BDR_RAISEDINNER, BF_RECT);  if BevelOuter <> bvNone then
      begin
        AdjustColors(BevelOuter);
        Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth);
      end;
      if BevelInner <> bvNone then
      begin
        AdjustColors(BevelInner);
        Frame3D(Buffer.Canvas, Rect, TopColor, BottomColor, BevelWidth);
      end;  Buffer.Canvas.Pen.Mode := pmCopy;
      Buffer.Canvas.Pen.Style := psSolid;  Canvas.Draw(0, 0, Buffer);
    end;procedure TTransPanel.Resize;
    begin
      inherited;
    end;procedure TTransPanel.WMEraseBkgnd(var Message: TMessage);
    begin
      Message.Result := 0;
    end;procedure TTransPanel.WMWindowPosChanging(var Message: TWMWindowPosChanging);
    begin
      Invalidate;
      inherited;
    end;end.
      

  2.   

    panel 本身是可以透明的 设置一下
      

  3.   

    绘制透明位图的代码
    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;