TPanel透明

时间:2012-11-03 14:59:16

标签: delphi delphi-xe2

我需要在表单中使用透明tpanel。谁可以建议我一个好的组件,可能是免费的?如果不是很长可以发布代码或一些关于它的链接?非常感谢。 马塞罗。

3 个答案:

答案 0 :(得分:8)

您可以尝试下载Jedi组件库,并查看TjvTransparentPanel组件,一旦安装了该组件库,就可以在“Jv Additional”选项卡下找到它。

http://www.delphipages.com/forum/showthread.php?t=187137

答案 1 :(得分:3)

创建一个组件并覆盖Paint方法和其他一些东西:没有边框或标题,但它是一个功能面板。内部的任何组件也需要透明。祝你好运。

unit PanelTransparent;


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TPanelTransparent = class (TPanel)
  private
    procedure CnCtlColorStatic (var Msg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
    procedure WmEraseBkgnd (var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure Paint; override;
  protected
    procedure CreateParams (var Params: TCreateParams); override;
  end;

procedure Register;


implementation

procedure Register;
  begin
    RegisterComponents ('AppMic', [TPanelTransparent]);
  end;

procedure TPanelTransparent.CreateParams (var Params: TCreateParams);
  begin
    inherited CreateParams(Params);
    Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
  end;

procedure TPanelTransparent.WmEraseBkgnd(var Msg: TWMEraseBkgnd);
  begin
    Msg.Result := 1;
  end;

procedure TPanelTransparent.CnCtlColorStatic(var Msg: TWMCtlColorStatic);
  begin
    SetBKMode (Msg.ChildDC, TRANSPARENT);
    Msg.Result := GetStockObject (NULL_BRUSH);
  end;

procedure TPanelTransparent.Paint;
  begin
    SetBKMode (Handle, TRANSPARENT);
    //inherited;
  end;

end.

答案 2 :(得分:0)

为什么不使用TBevel,并将形状设置为bsSpacer,或bsBox或其中一行?如果边界的性质不是问题,您可能会发现已经解决了您的问题。