如何在Firemonkey中绘制虚线?

2024-03-05

我想在 Firemonkey 项目中的 TPaintbox 画布上绘制点状网格,结果应该如下所示:

首先,我想我会绘制垂直虚线,然后绘制水平虚线,因此考虑到这一点,我尝试先绘制一条线,以使外观恰到好处,这就是我尝试过的:

Canvas.Stroke.Color := TAlphaColorRec.Black;
Canvas.Stroke.Dash := TStrokeDash.Dot;
Canvas.Stroke.Kind := TBrushKind.Solid;
Canvas.Stroke.Thickness := 1;
Canvas.DrawLine(PointF(0, 0), PointF(0, 150), 1);

结果并不是我所希望的,事实上TLineshape 可以按照我想要的方式绘制虚线:

但我需要自己在画布上绘制,而不是使用其他控件。作为记录TLine只需将 Stroke.Dash 属性更改为 Dot 即可。

那么,在 Firemonkey 项目中使用画布,我如何绘制与以下相同的虚线TLine这样我就可以像第一个示例图像一样绘制网格?


无需深入了解“为什么它有效”,您就可以实现 1 像素虚线(如TLine)通过在坐标上添加(或减去)一半线宽。当我追踪什么时我得到了这个想法TLine做;在渲染过程中它使用

InflateRect(Result, -(FStroke.Thickness / 2), -(FStroke.Thickness / 2));

对线坐标应用 0.5 修改,得到相同的结果。

procedure TForm24.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
  a: integer;
begin
  Canvas.BeginScene;
  try
    Canvas.Stroke.Dash := TStrokeDash.Dot;

    for a := 0 to 10 do
      Canvas.DrawLine(PointF(a * 20 + 0.5, 0.5), PointF(a * 20 + 0.5, 200.5), 1);

    for a := 0 to 10 do
      Canvas.DrawLine(PointF(0.5, a * 20 + 0.5), PointF(200.5, a * 20 + 0.5), 1);

    Canvas.DrawLine(PointF(0.5, 0.5), PointF(200.5, 200.5), 1);
    Canvas.DrawEllipse(RectF(5.0, 5.0, 195.5, 195.5), 1);
  finally
    Canvas.EndScene;
  end;
end;

产生这个结果:

放大镜视图为 500%

编辑2018.02.23:

另一种值得测试的方法是改变表格 Quality财产给HighPerformance

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Firemonkey中绘制虚线? 的相关文章

随机推荐