应该是 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.