Forms Delphi:透明或渐变框架
我有一个窗体,在一个绘画事件中用渐变来绘制它。我在表格上也有相框。我希望帧将是透明的,以看到形式的梯度,或者如果透明度不可用,则使用梯度绘制帧 表单和框架不得闪烁:) 怎么做?谢谢 编辑:Forms Delphi:透明或渐变框架,forms,delphi,transparency,frame,gradient,Forms,Delphi,Transparency,Frame,Gradient,我有一个窗体,在一个绘画事件中用渐变来绘制它。我在表格上也有相框。我希望帧将是透明的,以看到形式的梯度,或者如果透明度不可用,则使用梯度绘制帧 表单和框架不得闪烁:) 怎么做?谢谢 编辑: 如我所见,帧的透明度会闪烁。因此,现在对我来说,最好的解决方案是覆盖TFrame1.PaintWindow(DC:HDC)并使用渐变绘制帧的背景。这里有一个技巧可以在帧中获得透明度,如下所述: 更新: David建议在样式中添加WS_EX_COMPOSITED,以避免在调整大小时闪烁。 这应该添加到所有控件中
如我所见,帧的透明度会闪烁。因此,现在对我来说,最好的解决方案是覆盖TFrame1.PaintWindow(DC:HDC)并使用渐变绘制帧的背景。这里有一个技巧可以在帧中获得透明度,如下所述: 更新: David建议在样式中添加
WS_EX_COMPOSITED
,以避免在调整大小时闪烁。
这应该添加到所有控件中。谢谢,我以前试过。将窗体和框架的DoubleBuffered设置为true,调整窗体大小->框架闪烁…这不好。是否尝试将frame
ParentBackground
属性设置为false
?添加WS\u EX\u COMPOSITED以停止闪烁。最好只在调整大小时执行此操作。我肯定我在这里发布了一个全面的反闪烁答案。@DavidHeffernan,你的意思是:@kobik,你在使用哪个操作系统<代码>WS_EX_COMPOSITED在XP中处理得不好。我建议您尝试应用这里介绍的一些想法:特别是我希望WS_EX_COMPOSITED会有所帮助。@David Heffernan,WS_EX_COMPOSITED的框架有缺陷。如果您提供的唯一信息是“框架有缺陷”,我们将无能为力。我的镜框很好用。你在所有控件上都添加了样式吗?你还改变了什么?我只在镜框上使用了这种风格:)非常感谢大卫!!!!!!!!!!!!!!!!!!!!!!!!
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;