max*_*fax 5 delphi transparency gdi+ gradient frame
德尔福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;
Run Code Online (Sandbox Code Playgroud)
请帮我在渐变框架上绘制一个矩形,通常从透明到不透明的黑色.
如下所示更改代码将绘制一条右对齐的细线,从透明变为黑色不透明。
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);
Run Code Online (Sandbox Code Playgroud)
Update,用于InvalidateRect整个区域强制重新绘制框架。否则重绘可能会以奇怪的方式被剪裁。这将解决您的颜色变化效果。
但GlassFrame下面最后两张图片说明了一个缺陷。TFrame 的外部框架在顶部和上侧不正确可见。


显示启用时 TFrame 的功能障碍GlassFrame(左)。右图显示了GlassFrame禁用的完整黑框(即使在该图片中右侧在压缩中被裁剪)。
更新2:
启用SheetOfGlass,一切似乎都正常。

更新3:
topGlassFrame属性设置为 40,导致框架周围出现奇怪的边框效果。将其设置为 0 可以解决此问题。