如何将Groupbox设置为透明?我找到了这个 Transparent, 但在我的情况下,我把TImage放了一个背景图片,然后是Groupbox,我不知道如何让groupbox透明,并将图像显示为背景。
我尝试在google上搜索,但找不到答案,并尽可能地使用VCL应用程序。
答案 0 :(得分: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;
如果你打算做得恰到好处,你需要制作一个合适的组件,而不是用插页器进行黑客攻击。