描述;在TImgEdit控件上放一个TRzPanel,设置TRzPanel为透明.TImgEdit载入tif图象文件后,TRzPanel并没有透明;拖动TImgEdit的滚动条,TRzPanel也没有透明。问题:在TImgEdit控件上放置一个什么样的Panel,可以使这个Panel透明显示TImgEdit控件载入的tif图象。谢谢!!!

解决方案 »

  1.   

    {******************************************************************************}
    { @UnitName     : uTransPanel,pas                                              }
    { @Author       : Budded                                                       }
    { @Description  : 透明 Panel                                                   }
    { @FileVersion  : 1.0.0.0                                                      }
    { @CreateDate   : 2005-08-24                                                   }
    { @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.
    唉,还是好几年前的东西了,