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;
OnPaintイベントで、
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
Canvas.DrawLine(PointF(0,0), PointF(100,100), 1);
end;
のようにするでは、だめですか?
igyさん ありがとうございます
OnPaintイベントで処理してもやはり同じでフォーム上に描かれてしまい、
PaintBox内に引けません。
VCLではこれの要領で引けてたのですが・・・
(DrawLineはMoveTo,LineToとして)
>OnPaintイベントで処理してもやはり同じでフォーム上に描かれてしまい、
>PaintBox内に引けません。
先に挙げた
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
Canvas.DrawLine(PointF(0,0), PointF(100,100), 1);
end;
も、フォーム上に描かれましたか?
(引数のCanvasを使ってDrawLineで線を引いています。)
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の値)
となります。
まだヘルプも充実してないみたいなので、時期を見て再度検証してみたいと思います。
こんにちは。解決済みのようですが、下のようなコードではどうですか?
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以外でも大丈夫のようですが)
Maeさんありがとうございます。
SetMatrixを入れることで思った位置に作画する事ができました。
座標変換が必要なのですね、
でも何で??と疑問も出てくるのですが・・
試用期間もあと2日、そもそもFireMonkeyを使用した場合の描画速度を
CVLと比較したかったので何とかできそうです。
ありがとうございました。
ツイート | ![]() |