gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:13:07 28 4
gpt4 key购买 nike

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

表单和框架是双缓冲的。 GlassFrame 已启用。

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

矩形不希望正常地从透明绘制到不透明的黑色。 enter image description here

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 的外部框架在顶部和上侧不正确可见。

enter image description here

GlassFrame enabled GlassFrame disabled

显示启用 GlassFrame 时 TFrame 的功能障碍(左)。右图显示了禁用 GlassFrame 的完整黑框(尽管在该图中右侧在压缩中被裁剪)。

更新2:

启用SheetOfGlass,一切似乎都正常。

enter image description here

更新3:

GlassFrame top 属性设置为 40,导致框架周围出现奇怪的边框效果。将其设置为 0 修复了此问题。

关于Delphi:GDI+ 和渐变框架/矩形的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com