德尔福:透明或渐变框架

max*_*fax 2 forms delphi transparency gradient frame

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

表格和框架一定不要闪烁:)

何去做?谢谢.

编辑:

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

LU *_* RD 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;
Run Code Online (Sandbox Code Playgroud)

更新 :

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

  • @DavidHeffernan,你的意思是:[tlabel-and-tgroupbox-captions-flicker-on-resize](http://stackoverflow.com/questions/8058745/tlabel-and-tgroupbox-captions-flicker-on-resize) (2认同)