Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Delphi:透明或渐变框架_Forms_Delphi_Transparency_Frame_Gradient - Fatal编程技术网

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;