Delphi:透明或渐变框架

发布于 2024-12-25 09:45:22 字数 223 浏览 2 评论 0 原文

我有一个表单,并在 Paint 事件上用渐变来绘制它。我也有那个表格上的框架。我希望框架是透明的,以查看表单的渐变,或者如果透明度不可用,则用渐变绘制框架。

表格和框架不能闪烁:)

怎么做到的?谢谢。

编辑:

正如我所见,框架的透明度存在闪烁。所以现在对我来说最好的解决方案是重写 TFrame1.PaintWindow(DC: HDC) 并用渐变绘制框架的背景。

I have a form and paint it with a gradient on a Paint event. Also I have frames on that form. I want that frames will be transparent to see the gradient of the form or to paint the frames with the gradient instead if transparency isn't available.

The form and the frame mustn't flicker :)

Ho to do it? Thanks.

Edited:

As I see, there are flickers for frame's transparency. So the best solution for me now is to override TFrame1.PaintWindow(DC: HDC) and paint a background of the frame with a gradient.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

日久见人心 2025-01-01 09:45:22

这是在框架中获得透明度的技巧,如下所述: 如何使-delphi-tframe-background-透明

type
  TMyFrame = class(TFrame)
    procedure CreateParams(var Params: TCreateParams);override;
    procedure PaintWindow(DC: HDC); override;
  public
    constructor Create(AOwner:TComponent);override;
  end;

constructor TMyFrame.Create(AOwner: TComponent);
begin
  inherited;
  Brush.Style := bsClear;
end;

procedure TMyFrame.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT or WS_EX_COMPOSITED;
end;

procedure TMyFrame.PaintWindow(DC: HDC);
begin
  // Do not remove this comment to keep transparancy
end;

更新:

David 建议将 WS_EX_COMPOSITED 添加到样式中,以避免调整大小时出现闪烁。
这应该添加到所有控件中。

Here is a trick to get transparency in frames, as described here : how-to-make-delphi-tframe-background-transparent.

type
  TMyFrame = class(TFrame)
    procedure CreateParams(var Params: TCreateParams);override;
    procedure PaintWindow(DC: HDC); override;
  public
    constructor Create(AOwner:TComponent);override;
  end;

constructor TMyFrame.Create(AOwner: TComponent);
begin
  inherited;
  Brush.Style := bsClear;
end;

procedure TMyFrame.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT or WS_EX_COMPOSITED;
end;

procedure TMyFrame.PaintWindow(DC: HDC);
begin
  // Do not remove this comment to keep transparancy
end;

Updated :

David suggested adding WS_EX_COMPOSITED to the style to avoid flicker when resizing.
This should be added to all controls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文