unit TransparentPanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, extctrls,stdctrls;





type
  TTransparentPanel = class(TCustomControl)
  private
  fborder : boolean;
  fsource : tbitmap;
  drawn : boolean;
  procedure setborder(value : boolean);
  //procedure StopFlicker(var msg : TWMEraseBkGnd);  message WM_ERASEBKGND;
  { Private declaration}

  protected
    { Protected declarations }
  public

    procedure CreateParams(var Params : TCreateparams);override;
    constructor Create(AOwner : TComponent); override;
    procedure Paint;override;
    destructor Destroy;override;
    procedure Resize; override;

    { Public declarations }
  published
  property sourcebitmap : tbitmap read fsource write fsource;
  property border : boolean read fborder write setborder;
  property Visible;
  property Enabled;
  property Align;
  property OnClick;
  property OnMouseDown;
  property OnMouseMove;
  property OnMouseUp;
  property Font;

     { Published declarations }
  end;


procedure Register;



implementation



procedure TTransparentPanel.createparams(var Params : TCreateparams);
begin
inherited CreateParams(Params);
ControlStyle:=ControlStyle + [csAcceptsControls] + [csOpaque];
end;


procedure TTransparentPanel.resize;
begin
  drawn:=false;
end;

constructor TTransparentPanel.Create(AOwner : TComponent);
begin
     inherited Create(AOwner);
     width:=100;
     height:=100;
     drawn:=false;

end;

destructor TTransparentPanel.destroy;
begin
inherited destroy;
end;

procedure Register;
begin
  RegisterComponents('LibrarySmith', [TTransparentPanel]);
end;


Procedure TTransparentPanel.setborder;
begin
if value<>fborder then begin
fborder:=value;
invalidate;
end;
end;


{procedure TTransparentPanel.StopFlicker(var Msg: TWMEraseBkgnd);
begin
  Msg.Result := 0;
  drawn:=false;
end;    }

Procedure TTransparentPanel.Paint;
var
str,dtr : trect;
begin
//inherited paint;

//if drawn=true then exit;
if not assigned(fsource) then exit;




if (csDesigning in Componentstate) or (border=true)  then begin
  Canvas.brush.color:=clbtnshadow;
  canvas.FrameRect(clientrect);
  exit;
end;


  str.top:=Top+parent.top;
  str.left:=left+parent.left;
  str.right:=width+str.left;
  str.bottom:=height+str.top;

  dtr.left:=0;
  dtr.top:=0;
  dtr.right:=width;
  dtr.bottom:=height;

  Canvas.copyrect(dtr,fsource.Canvas,str);
  lockwindowupdate(canvas.Handle);
  //drawn:=true;
end;

end.