【问题标题】:TPanel TransparentTPanel 透明
【发布时间】:2012-11-03 14:59:16
【问题描述】:

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

【问题讨论】:

  • 什么是透明面板?只需将面板从表单中取出,然后你就看不到它了。
  • 我的意思是,根本不要使用面板。
  • David 的意思是,如果您将控件直接放在表单上(而不是在面板中),那么看起来就像您将它们放在透明面板上一样(因为,一个可能会假设,透明面板是不可见的)。大卫 真正 的意思是你应该在你的问题上更准确。您到底希望实现什么(“透明面板”的真正含义是什么)?显然,您希望它在 some 意义上是不可见的,同时在其他意义上仍然是一个普通面板。请告诉我们这些是什么“感官”。
  • David,我不想要一个不可见的 tpanel,因为在这个 TPanelSub 中我有其他对象(TEdit、TLabel 等)并希望它继承 TPanelMain 的背景。这个 TPanelSus 需要作为 TPanelMain 可见,不同的是在 TPanelSub 中我想应用 TPanelMain 的背景,然后我需要它是透明的。
  • 你描述的不是透明度。当某物是透明的,你可以看到它背后的东西。透明面板是不可见的。所以,我不知道你想要什么。

标签: delphi delphi-xe2


【解决方案1】:

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

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

【讨论】:

  • 您好,非常感谢,我已经安装了它,但没有安装 TJvTransparentPanel,只有 TJvTransparentForm 和 TJvTransparentButton。不存在 Jv Additional,而只有 Jv Application、Forms 和 Jv Button。我已经在 xe2 版本中安装了最新版本的 jedi project vcl for delphi。
  • TJvTransparentPanel 已与 TJvPanel 合并。您可以使用 TJvPanel 并设置 Transparent=True。
  • 感谢 Abdreas 我也解决了;我也通过 TAdvGroupBox 设置borderstyle = bsnone 和caption =''找到了解决方案。默认透明=true。
  • 解决方案可能很好,但为了获得控制,您必须安装其他 100 个(整个绝地库)。
  • 使用最新的 Jedi 库,1) 不再有 TJvTransparentPanel - 它只是启用了 TransparentTJvPanel,并且 2) 它非常错误,留下了工件,并且当我在其中放置一个按钮时,IDE 会发疯。
【解决方案2】:

创建一个组件并覆盖 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.

【讨论】:

  • 它根本行不通。面板在设计时是透明的,但在运行时不是。
【解决方案3】:

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

【讨论】:

  • 但是TBevel不是一个控制容器。
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 2021-03-18
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多