首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 繪圖入門:Canvas、Pen、Brush 基礎操作與直線矩形範例

     編輯:Delphi

Delphi 繪圖三大核心:Canvas (畫布)、Pen (畫筆)、Brush (畫刷)

Delphi 繪圖系統以 TCanvas 為核心,封裝了 Windows GDI。Canvas 提供繪圖表面,Pen 控制線條外觀,Brush 控制填充外觀。理解三者關係與基本操作,是所有繪圖程式的起點。

核心對象關係

  • Canvas:繪圖設備上下文封裝,擁有 Pen、Brush、Font 等子屬性
  • Pen:線條屬性 — Color、Width、Style、Mode
  • Brush:填充屬性 — Color、Style、Bitmap

基礎範例 1:繪製直線


procedure TForm1.Button1Click(Sender: TObject);
begin
  // 設定畫筆
  Canvas.Pen.Color := clRed;   // 紅色
  Canvas.Pen.Width := 2;       // 2 像素寬

  // 繪製直線
  Canvas.MoveTo(10, 10);       // 起點 (移動筆位,不畫線)
  Canvas.LineTo(100, 100);     // 終點 (從當前位置畫線到此)

  // Canvas 是 Self.Canvas 或 Form1.Canvas 簡寫
end;

基礎範例 2:矩形填充


procedure TForm1.Button2Click(Sender: TObject);
begin
  // 設定畫刷
  Canvas.Brush.Color := clYellow;  // 黃色填充

  // 填充整個客戶區
  Canvas.FillRect(ClientRect);     // ClientRect = 窗體客戶區矩形
end;

關鍵函數速查

Pen 常用屬性

  • Color: TColor — 線條顏色 (clRed, clBlue, $00FF0000 等)
  • Width: Integer — 線寬 (像素,預設 1,≤0 視為 1)
  • Style: TPenStyle — psSolid/psDash/psDot/psDashDot/psClear/psInsideFrame
  • Mode: TPenMode — pmCopy(預設)/pmXor/pmNot/pmMask 等 16 種混合模式

Brush 常用屬性

  • Color: TColor — 填充顏色 (Style=bsSolid 時)
  • Style: TBrushStyle — bsSolid/bsClear/bsHorizontal/bsVertical/bsFDiagonal/bsBDiagonal/bsCross/bsDiagCross
  • Bitmap: TBitmap — 紋理填充 (Style 自動變為 bsPattern)

座標系統說明

  • 原點 (0,0):視窗客戶區左上角
  • X 軸:向右遞增
  • Y 軸:向下遞增 (與數學慣例相反)
  • 單位:邏輯像素 (高 DPI 下需縮放)

常見新手錯誤與避坑

  1. 忘記設定 Pen/Brush:使用預設值 (黑筆、白刷) 導致效果不符預期
  2. MoveTo/LineTo 混淆:LineTo 從當前位置畫線,非從上次 LineTo 終點
  3. FillRect vs Rectangle:前者僅填充,後者邊框+填充
  4. 在 OnPaint 外繪圖:視窗重繪時會丟失,應在 OnPaint 或 PaintBox.OnPaint 中繪製
  5. 不釋放 GetDC 獲取的 DC:導致資源洩漏

進階:雙緩衝防閃爍 (核心技巧)


procedure TForm1.FormPaint(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.Width := ClientWidth;
    Bmp.Height := ClientHeight;
    // 1. 所有繪圖在記憶體位圖上
    Bmp.Canvas.Brush.Color := clWhite;
    Bmp.Canvas.FillRect(Bmp.Canvas.ClipRect);
    Bmp.Canvas.Pen.Color := clRed;
    Bmp.Canvas.MoveTo(10,10);
    Bmp.Canvas.LineTo(100,100);
    // 2. 一次性複製到螢幕
    Canvas.Draw(0, 0, Bmp);
  finally
    Bmp.Free;
  end;
end;

掌握 Canvas/Pen/Brush 三位一體的操作模式,配合 MoveTo/LineTo、FillRect/Rectangle 基礎圖元,即可開始構建任意複雜的 2D 繪圖應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數用途關鍵屬性
MoveTo(X,Y)移動當前筆位Pen
LineTo(X,Y)從當前位置畫線到目標Pen
FillRect(Rect)填充矩形區域Brush
Rectangle(Rect)畫矩形邊框+填充Pen + Brush
Ellipse(Rect)畫橢圓/圓Pen + Brush
TextOut(X,Y,Text)輸出文字Font + Brush (背景)