TCanvas 為繪圖物件提供抽象畫布,封裝 Windows GDI 操作。標準視窗控制項(編輯框、列表框)由系統繪製不需畫布;自繪控制項、圖像處理、列印輸出皆仰賴 TCanvas。兩大子類別:TControlCanvas(控制項畫布)、TMetafileCanvas(繪圖元檔畫布)。
| 屬性 | 型別 | 說明 |
|---|---|---|
| Brush | TBrush* | 填充屬性:顏色、樣式(實心、斜線、圖案等)。 |
| Pen | TPen* | 筆刷屬性:顏色、寬度、樣式(實線、虛線、點線等)。 |
| Font | TFont* | 文字字體:名稱、大小、顏色、樣式(粗體、斜體等)。 |
| Handle | HDC | 底層 Windows GDI 裝置內容控制碼,進階操作用。 |
| PenPos | TPoint | 目前筆刷位置(MoveTo/LineTo 更新)。 |
| Pixels | TColor __property Pixels[int X, int Y] | 像素級顏色存取(含邊界檢查)。 |
| ClipRect | TRect | 裁剪矩形邊界,繪圖輸出限制於此區域。 |
| CopyMode | TCopyMode | 位圖複製模式(cmSrcCopy, cmSrcAnd 等)。 |
| LockCount | int | 畫布鎖定計數(Lock/Unlock/TryLock 管理)。 |
| 分類 | 方法 | 說明 |
|---|---|---|
| 基本圖形 | Rectangle | 繪製矩形(用 Pen 框線、Brush 填充)。 |
RoundRect | 繪製圓角矩形。 | |
Ellipse | 繪製橢圓/圓形。 | |
Arc | 繪製橢圓弧段。 | |
Chord | 繪製弦弧封閉圖形(弧+弦)。 | |
Pie | 繪製扇形(弧+兩半徑)。 | |
| 線條與多邊形 | MoveTo(x,y) | 移動筆刷位置。 |
LineTo(x,y) | 從目前位置畫直線到指定點。 | |
Polyline(points, count) | 連續畫線穿越點陣列。 | |
Polygon(points, count) | 繪製封閉多邊形。 | |
| 貝茲曲線 | PolyBezier | 繪製多段貝茲曲線。 |
PolyBezierTo | 繪製並更新 PenPos。 | |
FillRect(rect) | 用 Brush 填充矩形。 | |
| 填充與色彩 | FloodFill(x,y,color,style) | 區域填滿(邊界/表面模式)。 |
BrushCopy | 位圖透明複製到矩形。 | |
| 文字輸出 | TextOut(x,y,text) | 在指定點輸出文字。 |
TextRect(rect, x, y, text) | 在裁剪矩形內輸出文字。 | |
TextWidth/Height/Extent | 取得文字寬/高/尺寸。 | |
| 圖像操作 | Draw(x,y,graphic) | 繪製圖像(TGraphic 衍生類)。 |
StretchDraw(rect, graphic) | 拉伸繪製圖像填滿矩形。 | |
CopyRect(destRect, srcCanvas, srcRect) | 從另一畫布複製矩形區域。 | |
| 其他 | FrameRect, DrawFocusRect, Refresh, Lock/Unlock/TryLock | 框線、焦點框、刷新 GDI 物件、鎖定畫布防重入。 |
void __fastcall TForm1::FormPaint(TObject *Sender) {
TRect r = ClientRect;
for (int y = r.Top; y < r.Bottom; y++) {
int r = 255 * y / r.Height();
int g = 128;
int b = 255 * (r.Height() - y) / r.Height();
Canvas->Pen->Color = RGB(r, g, b);
Canvas->MoveTo(r.Left, y);
Canvas->LineTo(r.Right, y);
}
}
Lock(),結束後 Unlock(),減少 GDI 物件選入/選出開銷。BeginUpdate/EndUpdate 配合雙緩衝(DoubleBuffered = true)消除閃爍。TBrush/TPen/TFont 物件,避免迴圈中頻繁建構/銷毀。TBitmap 離屏繪圖後一次 Draw 上螢幕。TCanvas 是 VCL 繪圖核心,熟練其 API 能實現豐富視覺效果與自訂控制項。