應該是 Delphi 2009 就支持 Direct2D 了,但那時我還用著 WinXP 系統(不支持);現在的測試環境是 Win7+DelphiXE。
Direct2D 屬 DirectX 家族,是 GDI、GDI+ 的繼任者,支持硬件加速,並能與 GDI、GDI+、D3D 交互。
其它初步的印象是其文本處理和圖像處理分別使用了 DirectWrite 和 WIC 技術,還有支持圖層。
相關單元是 Direct2D.pas 和 D2D1.pas。
Direct2D.pas 中是 Delphi 對 Direct2D 的簡單實現,需要其更多功能時還應從 D2D1.pas 中挖掘。
Direct2D.pas 單元中主要包含 TDirect2DGraphicsObject、TDirect2DBrush、TDirect2DPen、TDirect2DFont、TDirect2DCanvas 五個類,
其中 TDirect2DGraphicsObject 是 TDirect2DBrush、TDirect2DPen、TDirect2DFont 的父類,一般不會單獨使用,
TDirect2DCanvas 在實例化時會自動建立並擁有 TDirect2DBrush、TDirect2DPen、TDirect2DFont 三個類的對象,所以:
學習主要面對的就是 TDirect2DCanvas 類。
粗粗一看源碼,感覺 TDirect2DCanvas 的成員與 TCanvas 極為相似,因為它們同是從 TCustomCanvas 繼承,所以擁有很多共同特性。
第一個例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Direct2D;
procedure TForm1.FormPaint(Sender: TObject);
var
d2dCanvas: TDirect2DCanvas;
begin
d2dCanvas := TDirect2DCanvas.Create(Canvas, ClIEntRect);
d2dCanvas.BeginDraw;
d2dCanvas.Pen.Color := clRed;
d2dCanvas.Pen.Width := 4;
d2dCanvas.Ellipse(50, 50, ClientWidth-50, ClIEntHeight-50);
d2dCanvas.EndDraw;
d2dCanvas.Free;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Invalidate;
end;
end.