Delphi画一个带两个圆角的封闭矩形和一个矩形角

Delphi draw a closed rectangle with two rounded corners and to rectangular corners

如何画出一个长方形,有两个圆角,对角是直角。形状必须是闭合的,这样它才能被画笔颜色填充。 Polyline 方法不绘制曲线。我可以将弧的点添加到折线点吗?我尝试使用 Canvas 方法绘制一个 RoundRect,然后在下圆角上重叠一个矩形,但我无法弄清楚如何在不绘制形状的边界时擦除矩形的上线填充它。注意:如果您认为相关,我可以添加我使用的代码。

所需形状的样本:

我用 Delphi 得到的样本:

您不必在绘制形状的同时填充它。您可以先使用一系列 TCanvas.LineTo()TCanvas.ArcTo()/TCanvas.AngleArc() 调用来创建形状,然后再调用 TCanvas.FloodFill() 来填充它。

否则,您可以用相同的填充颜色将TCanvas.Rectangle()重叠在TCanvas.RoundRect()之上,然后使用TCanvas.MoveTo()/TCanvas.LineTo()绘制分界线相同的填充颜色。

另一种选择是忘记使用 TCanvas 绘图方法,而只使用 Win32 API 调用。使用 CreateRoundRectRgn()CreateRectRgn()CombineRn() 创建一个具有您想要的形状的 HRGN,然后使用 FillRgn()FrameRgn() 绘制您想要的形状TCanvas 使用 HRGN.