0

目前VCL有

 WITH Canvas DO
          BEGIN
            CASE PathStyle OF

          psLine:
            BEGIN
                strokeThickness := Max(1, MulDiv( Min(xCellSize,yCellSize), 2, 10));
                MoveTo(xOffset + PosX * xCellSize + xCellSize DIV 2,yOffset + PosY * yCellSize + yCellSize DIV 2);
             END

但是我在 moveto 上遇到错误(未定义)。

那么如何将 moveto 转换为与 FMX 一起使用?

4

1 回答 1

3

单独的 MoveTo 和 LineTo 方法不会按字面翻译。相反,您只需调用 TCanvas 的DrawLine方法。这接收两个 TPointF 参数,指定线段的开始和结束。您还传递了一个不透明参数,100 表示不透明。

借用官方样本

var
  p1, p2: TPointF;
begin
  // sets the ends of the line to be drawn
  p1.Create(20, 2);
  p2.Create(350, 400);
  Image1.Bitmap.Canvas.BeginScene;
  // draw the line on the canvas
  Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
  Image1.Bitmap.Canvas.EndScene;
  // updates the bitmap
  Image1.Bitmap.BitmapChanged;
end;

就其价值而言,TPointF 类型是我很久以来见过的最糟糕的设计类型之一。它的缺点很多:

  • 没有返回新值的静态类方法。这迫使您声明变量只是为了像上面的代码一样对 DrawLine 进行简单的调用。
  • 名字可怕的初始化函数 Create 让你认为这是一个类而不是一个记录。
  • 除了重载的运算符之外的无意义的算术方法。
  • 无意义的变异方法,如 Offset,用于最好用运算符表达的功能。
于 2013-09-07T16:40:32.083 回答