TDXDraw 內建兩個繪圖表面:
Surface:後台表面(Off-screen),所有繪圖操作在此進行。Primary:前台表面(On-screen),直接顯示在螢幕上。Flip 方法瞬間交換兩表面指標,實現無閃爍動畫。DirectX 只交換指標,速度極快。
DXDraw1.Surface.Canvas 提供 TCanvas 介面,可使用 TextOut、Ellipse、Draw 等 GDI 函數。使用後必須呼叫 Release 釋放鎖定。
效能提醒:混合 GDI 會降低 DirectX 效能,但比純 GDI 仍快;純 DirectX 繪圖(IDirectDrawSurface::Blt、IDirect3DDevice)效能最佳。

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DXDraws;
type
TForm1 = class(TForm)
DXDraw1: TDXDraw;
Button1: TButton; { 完整寫法 }
Button2: TButton; { with 簡化寫法 }
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
begin
str := FormatDateTime('h:n:s:zz', Time); { 精確到毫秒 }
DXDraw1.Surface.Fill($FF0000); { 紅色背景,HTML 色序 RRGGBB }
DXDraw1.Surface.Canvas.Brush.Style := bsClear;
DXDraw1.Surface.Canvas.Font.Color := clYellow;
DXDraw1.Surface.Canvas.Font.Size := 16;
DXDraw1.Surface.Canvas.TextOut(10, 10, str);
DXDraw1.Surface.Canvas.Release; { 必須釋放 }
DXDraw1.Flip;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
str: string;
begin
str := FormatDateTime('h:n:s:zz', Time);
DXDraw1.Surface.Fill(0); { 黑色背景 }
with DXDraw1.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clLime;
Font.Size := 16;
TextOut(10, 10, str);
Release;
end;
DXDraw1.Flip;
end;
end.
DirectX 使用 HTML 色序 (RRGGBB),非 Delphi TColor (BBGGRR)。
$FF0000(非 clRed = $0000FF)$00FF00$0000FF$FFFFFF,黑色:0if DXDraw1.CanDraw then
begin
DXDraw1.Surface.Fill(背景色);
with DXDraw1.Surface.Canvas do
begin
{ GDI 繪圖指令 }
Release;
end;
{ 或純 DirectX Blt/Render 指令 }
DXDraw1.Flip;
end;
掌握 Surface/Primary 雙緩衝機制、Flip 瞬間交換、Canvas GDI 混合繪圖與色彩格式轉換,是 DelphiX 2D 遊戲繪圖的基石。後續將介紹 TDXImageList 素材管理與 TDXSpriteEngine 精靈系統。