【问题标题】:Delphi draw a closed rectangle with two rounded corners and to rectangular cornersDelphi 绘制一个带有两个圆角和矩形角的封闭矩形
【发布时间】:2015-05-19 23:04:58
【问题描述】:

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

所需形状的样本:

我使用 Delphi 得到的示例:

【问题讨论】:

    标签: delphi delphi-xe


    【解决方案1】:

    您不必在绘制形状的同时填充它。您可以先使用一系列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 没有信心。
    • 亲爱的雷米。事实证明,使用 Windows API 比我想象的要容易得多。 IMO,由 TCanvas 实现的 Arc 方法非常棘手且难以使用。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多