Delphi绘制带有两个圆角和两个直角的封闭矩形

3
我该如何绘制一个有两个圆角和对角线是矩形角的矩形?这个形状必须是闭合的,以便可以用画刷颜色填充。Polyline方法不会绘制曲线。我能否将弧的点添加到折线点中?我尝试使用Canvas方法绘制RoundRect,然后在下部圆角上重叠一个矩形,但是当仅绘制形状的边框而不填充它时,我无法弄清楚如何擦除矩形的上部线条。注意:如果您认为相关,我可以添加我使用的代码。
所需形状示例: enter image description here Delphi得到的示例: enter image description here
1个回答

3
您不必在绘制形状的同时填充它。您可以先使用一系列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进行绘制。

谢谢你的回答。第一种选择看起来很有前途,我会试一试。当我想要绘制透明形状(即不填充)时,第二个选项无法工作。第三个选项,我不想实现,因为我对Windows API不太自信。 - user2383818
亲爱的雷米,事实证明使用Windows API比我想象的要容易得多。在我看来,TCanvas实现的Arc方法非常棘手和难以使用。非常感谢! - user2383818

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接