如何将 Groupbox 设置为透明?我发现这个 透明的,但在我的情况下,我放了 TImage 并放了一个背景图像,然后是 Groupbox,我不知道如何使 groupbox 透明,并将图像显示为背景。
我试着在谷歌上搜索这个,但找不到答案,我想尽可能地使用 VCL 应用程序。
我认为您需要接管绘制组框。这是一个使用插入器类的简单示例。在声明表单之前,将此类放在与表单相同的单元中:
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;
如果您要正确地执行此操作,您会想要制作一个合适的组件,而不是使用插入器到处乱搞。