【问题标题】:Delphi: Transparent or Gradient FrameDelphi:透明或渐变框架
【发布时间】:2012-02-05 18:17:07
【问题描述】:

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

窗体和框架不能闪烁:)

何去何从?谢谢。

编辑:

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

【问题讨论】:

  • 我建议您尝试应用这里提出的一些想法:stackoverflow.com/questions/8058745/… 特别是我希望 WS_EX_COMPOSITED 会有所帮助。
  • @David Heffernan,框架带有 WS_EX_COMPOSITED 的错误
  • 如果您提供的唯一信息是“框架有问题”,我们将无能为力。我的框架工作正常。您是否将样式放在所有控件上?你还改变了什么?
  • 我只为框架应用了样式:) 非常感谢大卫!!!!!!!!!!!!!!!!!!!!!!!!

标签: forms delphi transparency frame gradient


【解决方案1】:

这是在框架中获得透明度的技巧,如下所述: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;

更新:

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

【讨论】:

  • 谢谢,我以前试过。将表单和框架的 DoubleBuffered 设置为 true,调整表单大小 -> 框架闪烁……这很糟糕。
  • 您是否尝试将框架ParentBackground 属性设置为false
  • 添加 WS_EX_COMPOSITED 以停止闪烁。最好只在调整大小时这样做。我确定我在这里发布了一个全面的防闪烁答案。
  • @DavidHeffernan,你的意思是:tlabel-and-tgroupbox-captions-flicker-on-resize
  • @kobik,您使用的是哪个操作系统? WS_EX_COMPOSITED 在 XP 中处理不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多