1

如何将 Groupbox 设置为透明?我发现这个 透明的,但在我的情况下,我放了 TImage 并放了一个背景图像,然后是 Groupbox,我不知道如何使 groupbox 透明,并将图像显示为背景。

我试着在谷歌上搜索这个,但找不到答案,我想尽可能地使用 VCL 应用程序。

4

1 回答 1

4

我认为您需要接管绘制组框。这是一个使用插入器类的简单示例。在声明表单之前,将此类放在与表单相同的单元中:

type
  TGroupBox = class(StdCtrls.TGroupBox)
  protected
    procedure Paint; override;
  end;

  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ....
  end;

....

procedure TGroupBox.Paint;
begin
  Canvas.Draw(0, 0, SomeGraphicObjectContainingYourBackground);
  inherited;
end;

输出如下所示:

在此处输入图像描述

您可能想要自定义绘画的其余部分。也许在组框内绘制背景就足够了,这样标题和框架就可以正常显示了。Canvas.Draw如果需要,请在调用中指定不同的坐标。如果您需要背景覆盖整个父画布,那么您对 ​​Draw 的调用需要传递-Left-Top获取坐标。

或者,也许您想接管框架的绘制。通过不调用继承的Paint方法并做你自己的工作来做到这一点。

为避免闪烁,您实际上最好将此绘画代码移入WM_ERASEBKGND. 这使事情变得更加复杂,但并不复杂。代码如下所示:

type
  TGroupBox = class(StdCtrls.TGroupBox)
  protected
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
  end;

procedure TGroupBox.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  Canvas.Handle := Message.DC;
  try
    Canvas.Draw(-Left, -Top, SomeGraphicObjectContainingYourBackground);
  finally
    Canvas.Handle := 0;
  end;
  Message.Result := 1;
end;

如果您要正确地执行此操作,您会想要制作一个合适的组件,而不是使用插入器到处乱搞。

于 2013-10-23T08:35:15.693 回答