gpt4 book ai didi

delphi - 如何使分组框的背景透明?

转载 作者:行者123 更新时间:2023-12-01 16:55:55 24 4
gpt4 key购买 nike

如何将Groupbox设置为透明?我找到了这个 Transparent ,但就我而言,我放置了 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;

输出如下所示:

enter image description here

您可能想要自定义绘画的其余部分。也许在组框内绘制背景就足够了,以便标题和框架正常显示。如果需要,请在调用 Canvas.Draw 时指定不同的坐标。如果您需要背景覆盖整个父 Canvas ,那么对 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;

如果你要正确地做到这一点,你会想要制作一个合适的组件,而不是使用中介层进行修改。

关于delphi - 如何使分组框的背景透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com