FMX 的 Canvas 在不同的系統上會分別使用:
WinVista、Win7:
D2D (FMX.Canvas.D2D.pas)
WinXP:
GDI+ (FMX.Canvas.GDIP.pas)
Mac 系列:
Core Graphics (FMX.Canvas.Mac.pas)
和 HTML5 中的 Canvas 非常類似, 現在的 Canvas 模糊了 Pen 的概念:
之前的 Canvas.Pen 對應: Canvas.Stroke;
之前的 Canvas.Brush 對應: Canvas.Fill.
在 FMX 中, Canvas 無處不在, 其 Canvas.Stroke、Canvas.Fill 的狀態也各不相同, 一般要先初始化它們.
測試: 表單上放 Button1、Panel1, 啟用 Panel1 的 OnPaint 事件:
procedure TForm1.FormCreate(Sender: TObject);begin Self.OnPaint := Panel1.OnPaint; Button1.OnPaint := Panel1.OnPaint; Panel1.Opacity := 0.75;end;procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);begin {畫直線} Canvas.Stroke.Kind := TBrushKind.bkSolid;// Canvas.Stroke.Color := claBlack; Canvas.DrawLine(ARect.Location, ARect.BottomRight, 1); {填充橢圓}// Canvas.Fill.Kind := TBrushKind.bkSolid; Canvas.Fill.Color := claGreen; Canvas.FillEllipse(RectF(ARect.Width/5, ARect.Height/5, ARect.Width/5*4, ARect.Height/5*4), 1);end;:
繪圖命令:
Canvas.DrawLine(); //Canvas.DrawRect(); //畫矩形; 集合 TCorners: 四個角是否使用指定的樣式類型; 枚舉 TCornerType: 角樣式類型Canvas.DrawRectSides(); //畫矩形邊; 集合 TSides 指定要畫的邊Canvas.DrawEllipse(); //Canvas.DrawArc(); //Canvas.DrawPath(); //Canvas.DrawBitmap(); //Canvas.DrawThumbnail(); //畫略縮圖Canvas.DrawPolygon(); //Canvas.FillRect(); //Canvas.FillEllipse(); //Canvas.FillArc(); //Canvas.FillPath(); //Canvas.FillPolygon(); //Canvas.FillText(); //{測試文本輸出}procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);begin Canvas.Fill.Color := claRed; Canvas.Font.Size := 30; Canvas.FillText(ARect, '萬一的 Delphi 部落格', True, 1, [], TTextAlign.taLeading, TTextAlign.taCenter);end;