将VLC转换为FMX MoveTo

时间:2013-09-07 10:48:43

标签: delphi delphi-xe2 firemonkey

目前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(undefined)上得到错误。

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

1 个答案:

答案 0 :(得分:3)

单独的MoveTo和LineTo方法不会按字面翻译。相反,您只需调用TCanvas的DrawLine方法。这将接收两个TPointF参数,用于指定线段的开头和结尾。您也可以传递不透明度参数,100表示​​不透明度。

借鉴official samples

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,最好用运算符表示。