FireMonkeyのPaintBox内に線を引きたい

解決


Nao  2011-10-06 23:45:45  No: 40992

EX2のトライアル版で新規作成でFireMonkey HD アプリケーションでフォームを作成しそのフォームにPaintBoxを置き線を引きたいのですがその線がどうしてもPaintBox内じゃなくフォームにしか作画されません。
どのようにしたらペイントボックス内に線が引けるのでしょうか?
どうかよろしくお願いします。

procedure TForm7.Button1Click(Sender: TObject);
begin
  PaintBox1.Canvas.BeginScene;
  PaintBox1.Canvas.DrawLine(PointF(0,0),PointF(100,100),1);
  PaintBox1.Canvas.EndScene;
end;


igy  2011-10-08 04:43:30  No: 40993

OnPaintイベントで、

procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
    Canvas.DrawLine(PointF(0,0), PointF(100,100), 1);
end;

のようにするでは、だめですか?


Nao  2011-10-08 17:08:02  No: 40994

igyさん  ありがとうございます

OnPaintイベントで処理してもやはり同じでフォーム上に描かれてしまい、
PaintBox内に引けません。
VCLではこれの要領で引けてたのですが・・・
(DrawLineはMoveTo,LineToとして)


igy  2011-10-08 17:32:26  No: 40995

>OnPaintイベントで処理してもやはり同じでフォーム上に描かれてしまい、
>PaintBox内に引けません。

先に挙げた

procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
    Canvas.DrawLine(PointF(0,0), PointF(100,100), 1);
end;

も、フォーム上に描かれましたか?
(引数のCanvasを使ってDrawLineで線を引いています。)


Nao  2011-10-09 01:24:49  No: 40996

igyさん  度々ありがとうございます

>(引数のCanvasを使ってDrawLineで線を引いています。)
ソースは指示通りにしてましたがやはりフォーム上に描画されます。

私なりに色々いじってみたのですが
procedure TForm3.Button1Click(Sender: TObject);
begin
  PaintBox1.Canvas.BeginScene;
  PaintBox1.Canvas.DrawLine(PointF(0,0),PointF(100,100),1);
  PaintBox1.Canvas.EndScene;
  ShowMessage(IntToStr(PaintBox1.Canvas.Width)+'X'+IntToStr (PaintBox1.Canvas.Width));
end;
とし、PaintBox1.CanvasのWidthとWidthを見たらPaintBox1の値ではなく
Formの値となってます。
又、実行ファイルをXPと7でそれぞれ実行したら
XP フォームにも線は書かれない
7  フォーム上に線が引かれる
(それぞれメッセージの値はFormの値)
となります。

まだヘルプも充実してないみたいなので、時期を見て再度検証してみたいと思います。


Mae  2011-10-18 17:14:05  No: 40997

こんにちは。解決済みのようですが、下のようなコードではどうですか?
procedure TForm1.Button1Click(Sender: TObject);
begin
  PaintBox1.Canvas.BeginScene;
  PaintBox1.Canvas.SetMatrix(PaintBox1.AbsoluteMatrix);
  PaintBox1.Canvas.DrawLine(PointF(0,0),PointF(100,100),1);
  PaintBox1.Canvas.EndScene;
end;

ただし、MacやWinXPでも確実に動かそうとするならOnPaintイベントの中で描画したほうが良いです。(BitmapのCanvasへの描画はOnPaint以外でも大丈夫のようですが)


Nao  2011-10-30 19:54:18  No: 40998

Maeさんありがとうございます。

SetMatrixを入れることで思った位置に作画する事ができました。
座標変換が必要なのですね、
でも何で??と疑問も出てくるのですが・・
試用期間もあと2日、そもそもFireMonkeyを使用した場合の描画速度を
CVLと比較したかったので何とかできそうです。

ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加