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メソッドを 1 回呼び出します。これは、線分の開始と終了を指定する 2 つの 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 型は、私が長い間見てきた最悪の設計型の 1 つです。その欠点は多数あります。

  • 新しい値を返す静的クラス メソッドはありません。これにより、上記のコードのように、DrawLine への単純な呼び出しを行うためだけに変数を宣言する必要があります。
  • これがレコードではなくクラスであると思わせる Create という名前の初期化関数のひどい名前。
  • オーバーロードされた演算子に加えて、無意味な算術メソッド。
  • 演算子で最もよく表現される機能のための Offset のような無意味な変更メソッド。
于 2013-09-07T16:40:32.083 に答える