我有一个表单,并在Paint事件上使用渐变绘制它。我也在那张表格上有框架。我希望框架将是透明的,以查看窗体的渐变或使用渐变绘制帧,如果透明度不可用。
表格和框架不得闪烁:)
何你这样做?感谢。正如我所看到的,帧的透明度有些闪烁。因此,对我来说最好的解决方案是覆盖TFrame1.PaintWindow(DC:HDC)并使用渐变绘制框架的背景。
答案 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
以避免在调整大小时闪烁。
这应该添加到所有控件中。