德尔福:透明或渐变框架

时间:2012-01-09 06:19:16

标签: forms delphi transparency frame gradient

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

表格和框架不得闪烁:)

何你这样做?感谢。

编辑:

正如我所看到的,帧的透明度有些闪烁。因此,对我来说最好的解决方案是覆盖TFrame1.PaintWindow(DC:HDC)并使用渐变绘制框架的背景。

1 个答案:

答案 0 :(得分:6)

这里有一个获得框架透明度的技巧,如下所述: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以避免在调整大小时闪烁。 这应该添加到所有控件中。