TImage のキャンバスにいくつかのカスタム シェイプを描画しようとしていますが、代わりに TImage 親フォームのキャンバスに出力されます。これを機能させるには、ポイントをローカルから絶対に変換する必要があるようですが、それも問題を引き起こします。例を参照してください:
- Image.Canvas.DrawArc (etc) が Image.Canvas.DrawArc (etc) が Image に対してではなく親フォームに対して描画する理由を知っている人はいますか?
- .LocalToAbsolute... の問題を経験すると、弧がこんなに違うように見えるのはなぜですか?
プロジェクトは単純です。TPanel が中央にあり、TImage が TPanel 内にある Firemonkey HD フォーム (クライアントに合わせて配置) です。ボタンはコードを実行するだけです。
コードは次のとおりです。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
FMX.Objects;
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.BeginScene;
{Trying to draw arc and line on Image's canvas - Doesn't work; it draws to Form's canvas instead}
Image1.Canvas.DrawArc(PointF(0,0), PointF(10, 10), 0.0, 45.0, 1.0);
Image1.Canvas.DrawLine(PointF(0.0, 0.0), PointF(100, 100), 1.0);
{Trying to draw arc and line on Image's canvas - This works; by why should such steps be necessary and why is the arc so different?}
Image1.Canvas.DrawArc(Image1.LocalToAbsolute(PointF(0,0)), Image1.LocalToAbsolute(PointF(10, 10)), 0.0, 45.0, 1.0);
Image1.Canvas.DrawLine(Image1.LocalToAbsolute(PointF(0.0, 0.0)), Image1.LocalToAbsolute(PointF(100, 100)), 1.0);
Image1.Canvas.EndScene;
end;
end.