CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请教高手 透明 panel 的实现

楼主loving(老鹰)2003-09-04 18:48:48 在 Delphi / VCL组件开发及应用 提问

想实现透明   panel   ,   如下做的      
  但是   这样的话   bevelOuter   :=   False   不起作用   不知道为什么?  
  就是   老是突出   显示     能看到外边框      
   
  这个如何解决?  
   
  unit   TransPanel;  
   
  interface  
   
  uses  
    Windows,   Messages,   SysUtils,   Classes,   Graphics,    
   
  Controls,   Forms,   Dialogs,  
    ExtCtrls;  
   
  type  
    TTransPanelStyle   =   (  
        gsBlackness,   gsDstInvert,   gsMergeCopy,   gsMergePaint,    
   
  gsNotSrcCopy,  
        gsNotSrcErase,   gsPatCopy,   gsPatInvert,   gsPatPaint,    
   
  gsSrcAnd,  
        gsSrcCopy,   gsSrcErase,   gsSrcInvert,   gsSrcPaint,    
   
  gsWhiteness);  
   
    TTransPanel   =   class(TCustomControl)  
    private  
        FColor:   TColor;  
        FStyle:   TTransPanelStyle;  
        FOnPaint:   TNotifyEvent;  
   
        procedure   SetColor(Value:   TColor);  
        procedure   SetStyle(Value:   TTransPanelStyle);  
        procedure   CMCtl3DChanged(var   Message:   TMessage);    
   
  message   CM_CTL3DCHANGED;  
        procedure   WMEraseBkgnd(var   Message:   TMessage);    
   
  message   WM_ERASEBKGND;  
        procedure   WMWindowPosChanging(var   Message:    
   
  TWMWindowPosChanging);   message   WM_WINDOWPOSCHANGING;  
    protected  
        Buffer:   TBitmap;  
   
        procedure   CreateParams(var   Params:   TCreateParams);    
   
  override;  
        procedure   Paint;   override;  
        procedure   Resize;   override;  
    public  
        constructor   Create(AOwner:   TComponent);   override;  
        destructor   Destroy;   override;  
        property   Canvas;  
    published  
        property   Align;  
        property   Anchors;  
        property   AutoSize;  
        property   BiDiMode;  
        property   BorderWidth;  
        property   Color:   TColor   read   FColor   write   SetColor;  
        property   Ctl3D;  
        property   Enabled;  
        property   Style:   TTransPanelStyle   read   FStyle   write    
   
  SetStyle   default   gsSrcAnd;  
        property   Visible;  
   
        property   OnClick;  
        property   OnDblClick;  
        property   OnEnter;  
        property   OnExit;  
        property   OnMouseDown;  
        property   OnMouseMove;  
        property   OnMouseUp;  
        property   OnResize;  
        property   OnPaint:   TNotifyEvent   read   FOnPaint   write    
   
  FOnPaint;  
    end;  
   
  implementation  
   
  function   TransPanelStyleToInt(gs:   TTransPanelStyle):    
   
  LongInt;  
  begin  
    case   gs   of  
        gsBlackness     :   Result   :=   cmBlackness;  
        gsDstInvert     :   Result   :=   cmDstInvert;  
        gsMergeCopy     :   Result   :=   cmMergeCopy;  
        gsMergePaint   :   Result   :=   cmMergePaint;  
        gsNotSrcCopy   :   Result   :=   cmNotSrcCopy;  
        gsNotSrcErase:   Result   :=   cmNotSrcErase;  
        gsPatCopy         :   Result   :=   cmPatCopy;  
        gsPatInvert     :   Result   :=   cmPatInvert;  
        gsPatPaint       :   Result   :=   cmPatPaint;  
        gsSrcAnd           :   Result   :=   cmSrcAnd;  
        gsSrcCopy         :   Result   :=   cmSrcCopy;  
        gsSrcErase       :   Result   :=   cmSrcErase;  
        gsSrcInvert     :   Result   :=   cmSrcInvert;  
        gsSrcPaint       :   Result   :=   cmSrcPaint;  
        gsWhiteness     :   Result   :=   cmWhiteness;  
        else                       Assert(True,   'Error   parameter   in    
   
  function   TransPanelStyleToInt');  
    end;  
  end;  
   
  constructor   TTransPanel.Create(AOwner:   TComponent);  
  begin  
    inherited   Create(AOwner);  
    Buffer   :=   TBitmap.Create;  
   
    ControlStyle   :=   [csAcceptsControls,   csCaptureMouse,    
   
  csClickEvents,  
        csDoubleClicks,   csReplicatable];  
    Width   :=   100;  
    Height   :=   100;  
    FStyle   :=   gsSrcAnd;  
    ParentCtl3d   :=   False;  
    Ctl3D   :=   False;  
    ParentColor   :=   False;  
    FColor   :=   clWhite;  
  end;  
   
  destructor   TTransPanel.Destroy;  
  begin  
    Buffer.Free;  
    inherited   Destroy;  
  end;  
   
  procedure   TTransPanel.Paint;  
  var  
    R:   TRect;  
    rop:   LongInt;  
  begin  
    R   :=   Rect(0,   0,   Width,   Height);  
    Buffer.Width   :=   Width;  
    Buffer.Height   :=   Height;  
    Buffer.Canvas.Brush.Style   :=   bsSolid;  
    Buffer.Canvas.Brush.Color   :=   FColor;  
    Buffer.Canvas.FillRect(Rect(0,   0,   Width,   Height));  
    rop   :=   TransPanelStyleToInt(FStyle);  
    StretchBlt(Buffer.Canvas.Handle,   0,   0,   Width,   Height,  
                          Canvas.Handle,   0,   0,   Width,   Height,   rop);  
    if   Ctl3D   then   DrawEdge(Buffer.Canvas.Handle,   R,    
   
  BDR_RAISEDINNER,   BF_RECT);  
    Buffer.Canvas.Pen.Mode   :=   pmCopy;  
    Buffer.Canvas.Pen.Style   :=   psSolid;  
    Canvas.Draw(0,   0,   Buffer);  
    if   Assigned(FOnPaint)   then   FOnPaint(Self);  
  end;  
   
   
  procedure   TTransPanel.SetColor(Value:   TColor);  
  begin  
    if   Value   <>   FColor   then  
    begin  
        FColor   :=   Value;  
        RecreateWnd;  
    end;  
  end;  
   
  procedure   TTransPanel.CreateParams(var   Params:    
   
  TCreateParams);  
  begin  
    inherited   CreateParams(Params);  
   
    Params.ExStyle   :=   Params.ExStyle   +   WS_EX_TRANSPARENT;  
  end;  
   
  procedure   TTransPanel.WMWindowPosChanging(var   Message:    
   
  TWMWindowPosChanging);  
  begin  
    Invalidate;  
   
    inherited;  
  end;  
   
  procedure   TTransPanel.WMEraseBkgnd(var   Message:    
   
  TMessage);  
  begin  
    Message.Result   :=   0;  
  end;  
   
  procedure   TTransPanel.Resize;  
  begin  
    Invalidate;  
   
    inherited;  
  end;  
   
  procedure   TTransPanel.CMCtl3DChanged(var   Message:    
   
  TMessage);  
  begin  
    inherited;  
   
    RecreateWnd;  
  end;  
   
  procedure   TTransPanel.SetStyle(Value:   TTransPanelStyle);  
  begin  
    if   Value   <>   FStyle   then  
    begin  
        FStyle   :=   Value;  
        RecreateWnd;  
    end;  
  end;  
   
  end.      
  问题点数:20、回复次数:2Top

1 楼baguli(巴古里)回复于 2003-09-04 19:02:30 得分 20

我有一个透明TPanelPro的Source   Code,需要的话可以Q我6113690Top

2 楼cdsgajxlp(起名很难)回复于 2004-03-23 13:10:42 得分 0

weTop

相关问题

  • 如何实现半透明Panel
  • 怎样实现透明的panel,在线等待
  • 实现半透明效果
  • 用BITBLT实现半透明效果…………
  • 能实现透明窗体吗?
  • 在Win98实现半透明的窗口
  • 请教如何实现透明位图
  • 透明窗口的技术实现
  • 怎么实现让控件透明
  • 如何实现窗体透明效果?

关键词

  • ttranspanel
  • ttranspanelstyle
  • fonpaint
  • fstyle
  • fcolor
  • gssrcand
  • dchanged
  • recreatewnd
  • transpanelstyletoint
  • canvas

得分解答快速导航

  • 帖主:loving
  • baguli

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo