VCL に TImage とか TPaintBox ってあるじゃないですか?あれって未だに GDI 描画なので、ジャギったり画像を拡大/縮小すると汚くなりますよね?で、DocWiki には代替の TCustomAcceleratedPaintBox ってのが掲載されているのですが、とても断片的な訳です。
[Direct2D キャンバスの使用]
http://docwiki.embarcadero.com/RADStudio/XE8/ja/Direct2D_%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%90%E3%82%B9%E3%81%AE%E4%BD%BF%E7%94%A8
…最初からコンポーネントで提供してくれたっていいのに。そこでコンポーネントにしてみました。
[Vcl.D2DControls]
http://ht-deko.com/software/D2DControls_101.zip
上が Direct2D での描画で下が GDI での描画です。コンポーネントの使い方は簡単で OnPaint イベントハンドラで描画するだけです。
uses ..., Vcl.Direct2D;
...
procedure TForm1.AcceleratedPaintBox1Paint(Sender: TObject); begin if (Sender as TAcceleratedPaintBox).Accelerated then begin // Direct2D での描画 with (Sender as TAcceleratedPaintBox).D2DCanvas do begin Brush.Color := clWhite; FillRect(Rect(0, 0, ClientWidth, ClientHeight)); Pen.Color := clBlack; MoveTo(0, 0); LineTo(ClientWidth, ClientHeight); end; end else begin // GDI での描画 with (Sender as TAcceleratedPaintBox).GDICanvas do begin Brush.Color := clWhite; FillRect(Rect(0, 0, ClientWidth, ClientHeight)); Pen.Color := clBlack; MoveTo(0, 0); LineTo(ClientWidth, ClientHeight); end; end; end;
こんな感じで。Direct2D を使うかどうか (使えるかどうか) は Accelerated プロパティで設定 / 取得できます。
|