繁体   English   中英

Delphi:GDI +和渐变框架/矩形的问题

[英]Delphi: problems with GDI+ & gradient frame/rectangle

德尔福XE2。 有一个表格和一个框架。

表格和框架是双doublebuffered GlassFrame已启用。

我绘制框架的背景,并尝试绘制一个右对齐的矩形,但有bug。 特别是在调整大小时我有错误。

矩形不希望从透明度到不透明的黑色正常绘制。 在此输入图像描述

uses ...GDIPAPI, GDIPOBJ...
type
  TFrame2 = class(TFrame)
    procedure PaintWindow(DC: HDC); override;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
{$R *.dfm}

procedure TFrame2.PaintWindow(DC: HDC);
var
  R: TGPRect;
  pen: TGPPen;
  Graphics: TGPGraphics;
  linGrBrush: TGPLinearGradientBrush;
begin
  R.X := 0;
  R.Y := 0;
  R.Width := self.Width;
  R.Height := self.Height;

  Graphics := TGPGraphics.Create(DC);

  linGrBrush := TGPLinearGradientBrush.Create(R, MakeColor(255, 120, 248, 253),
    MakeColor(255, 200, 216, 250), LinearGradientModeVertical);

  Graphics.FillRectangle(linGrBrush, 0, 0, R.Width, R.Height);
  linGrBrush.Free;

    linGrBrush := TGPLinearGradientBrush.Create(MakePoint(0, 0),
MakePoint(189, 2), MakeColor(0, 0, 0, 0), MakeColor(255, 0, 0, 0));

  Graphics.FillRectangle(linGrBrush, R.Width - 189, 79, 189, 2);

  linGrBrush.Free;
  Graphics.Free;
end;

请帮我在渐变框架上绘制一个矩形,通常从透明到不透明的黑色。

如下所示更改代码将绘制从透明到黑色不透明的右对齐细线。

linGrBrush := TGPLinearGradientBrush.Create( 
  MakePoint(R.Width-189,0), MakePoint(R.Width,2),
  MakeColor(0, 0, 0, 0),
  MakeColor(255, 0, 0, 0));
Pen := TGPPen.Create( linGrBrush,3);
Graphics.DrawLine(Pen,R.Width-189,79,R.Width,79);
InvalidateRect(Handle,Rect(0,0,R.Width,R.Height),False);

更新 ,使用整个区域的InvalidateRect强制完全重绘帧。 否则重绘可能会以奇怪的方式被剪裁。 这将解决您的换色效果。

但是下面的最后两张图片说明了GlassFrame缺陷。 TFrame的外框在顶部和上部无法正确显示。

在此输入图像描述

GlassFrame已启用GlassFrame已禁用

当显示TFRAME功能障碍GlassFrame启用(左)。 右图显示了一个完整的黑色框架(即使在此图片中右侧被压缩裁剪), GlassFrame禁用。

更新2:

启用SheetOfGlass ,一切似乎都可以。

在此输入图像描述

更新3:

GlassFrame顶部属性设置为40,并在框架周围产生奇怪的边框效果。 将其设置为0可解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM