Delphi2010の新機能のDirect2Dを試してみます。
TDirect2DCanvasはコンポーネントが用意されているわけではなく、TDirect2DCanvasをコード中で作成し、コンストラクタの引数に描画先のCanvasクラスを与えます。
以後、TDirect2DCanvasクラスを用い画面描画のメソッドを呼び出す形になります。
コードは以下の通り
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1, StdCtrls, ExtCtrls; type TForm1 = class(TForm) PaintBox1: TPaintBox; Button1: TButton; PaintBox2: TPaintBox; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var LD2DCanvas: TDirect2DCanvas; pa:D2D_POINT_2F; pb:D2D_POINT_2F; begin LD2DCanvas := TDirect2DCanvas.Create(PaintBox1.Canvas, PaintBox1.ClientRect); LD2DCanvas.RenderTarget.BeginDraw; LD2DCanvas.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE); LD2DCanvas.RoundRect(10,10,100,100,20,20); pa.x:=100; pa.y:=10; pb.x:=120; pb.y:=120; LD2DCanvas.DrawLine(pa,pb); LD2DCanvas.TextOut(120,10,''''Direct2D Test''''); //LD2DCanvas.RenderTarget.DrawRoundedRectangle( LD2DCanvas.RenderTarget.EndDraw; // PaintBox2.Canvas.RoundRect(10,10,100,100,20,20); PaintBox2.Canvas.MoveTo(100,10); PaintBox2.Canvas.LineTo(120,120); PaintBox2.Canvas.TextOut(120,10,''''Direct2D Test''''); end; end.
実行結果は以下の通り。
拡大してみると、アンチエイリアスが効いていることがわかります。
文字列描画に関しては、アンチエイリアスよりClearFontを利用した描画のほうが鮮明に見えるようです。