如何创建蒙版并在其上绘制

How do create a mask and draw on it

我有 2 个矩形,如下图所示:

现在我只想绘制黄色矩形 (B) 中红色矩形内的部分。所以我将 clipchildreen=True 设置为矩形 A,我得到了这个:

但是效果不好,红色矩形外的黄色矩形的一部分还在画。我想得到这个:

我该怎么做?最终我可以直接在 canvas 上绘制,但即使这样我也没有找到一种简单的方法来实现我想做的事情

这是一个可能适合您的解决方案,尽管我已经对您的要求做了一些假设,而且这不是一个特别简单的方法。它涉及使用具有 InnerRound 个角的矩形来隐藏黄色正方形的一部分。

对于下面的步骤,我假设表格是白色的,黄色方块是 50 x 50,红色方块是 150 x 150,圆角的半径是 20,整体是位于表格上的 100,100。

我将此描述为好像您手动将所有控件直接定位到表单上一样,但如果我这样做,我会添加几个 TLayout 并使用 Align s 无处不在(第四步的情况下边距为负)。您可以在面板或其他控件上而不是直接在窗体上执行此操作。

请注意 z-order 很重要,这就是为什么应按此顺序执行下面的步骤 2 到 5 的原因。

  1. 将表格的Fill.Kind设置为Solid
  2. 在 100,100 处放置一个 TRectangle。将 XRadiusYRadius 都设置为 20,将 WidthHeight 都设置为 150,将 Fill.Color 设置为 Red,将 Stroke.Kind 设置为 None.
  3. 在 100,100 处放置一个 TRectangle。将 Fill.Color 设置为 Yellow
  4. 在 80,80 处放置一个 TRectangle。将 XRadiusYRadius 都设置为 20,将 HeightWidth 都设置为 20,将 Fill.Color 设置为 WhiteFill.color表格),Stroke.KindNone,以及 CornerTypeInnerRound
  5. 在 100,100 处放置一个 TRectangle。将 XRadiusYRadius 都设置为 20,将 HeightWidth 都设置为 150,将 Fill.Kind 设置为 None

这是结果: