8

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

4

3 回答 3

8

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

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

于 2012-11-03T21:57:44.253 回答
4

创建一个组件并覆盖 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.
于 2013-10-26T00:51:33.407 回答
0

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

于 2018-03-11T19:41:50.730 回答