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

Delphi TBrush 畫刷完全指南:樣式、顏色、位圖填充與代碼範例

     編輯:Delphi

Canvas.Brush 三大屬性深度解析:Color、Style、Bitmap

TBrush 控制封閉圖形 (矩形、橢圓、多邊形等) 的填充外觀。掌握 Color (純色)、Style (斜線/十字/網格等圖案)、Bitmap (圖片紋理) 三種填充模式,能實現豐富的視覺效果。

TBrushStyle 八大內建圖案

畫刷樣式展示代碼


var
  i, n: Integer;
  r: TRect;
begin
  Canvas.Pen.Color := clRed;
  Canvas.Pen.Width := 1;
  n := 10;
  for i := 0 to 7 do
  begin
    Canvas.Brush.Color := clYellow;
    Canvas.Brush.Style := TBrushStyle(i);  // 依次套用 8 種樣式
    r := Rect(n, 10, n + 36, ClientHeight - 10);
    Canvas.FillRect(r);    // 填充內部
    Canvas.Rectangle(r);   // 畫邊框對比
    n := n + 48;
  end;
end;

Bitmap 紋理填充:以圖片為填充單元


procedure TForm1.FormClick(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromFile('C:\temp\bg.bmp');  // 載入紋理圖
    Canvas.Brush.Bitmap := Bmp;          // 指定為畫刷紋理
    Canvas.Ellipse(0, 0, ClientWidth, ClientHeight); // 繪製填充橢圓
  finally
    Bmp.Free;  // 注意:Brush.Bitmap 不擁有 Bitmap,手動釋放
  end;
end;

關鍵屬性行為詳解

常數視覺效果說明
bsSolid實心填充使用 Color 屬性顏色
bsClear透明/無填充僅繪製邊框 (配合 Pen)
bsHorizontal水平線間距固定
bsVertical垂直線間距固定
bsFDiagonal正斜線 (↗)左下到右上
bsBDiagonal反斜線 (↘)左上到右下
bsCross十字網格水平+垂直線
bsDiagCross對角網格正斜+反斜線

進階技巧:自定義畫刷圖案


// 建立 8x8 自定義圖案畫刷 (需 WinAPI)
function CreatePatternBrush8x8(const Pattern: array of Byte): HBRUSH;
var
  Bmp: TBitmap;
  i, j: Integer;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.Width := 8;
    Bmp.Height := 8;
    Bmp.PixelFormat := pf1bit;  // 單色位圖
    for j := 0 to 7 do
      for i := 0 to 7 do
        if (Pattern[j] shr (7-i)) and 1 = 1 then
          Bmp.Canvas.Pixels[i, j] := clBlack
        else
          Bmp.Canvas.Pixels[i, j] := clWhite;
    Result := CreatePatternBrush(Bmp.Handle);
  finally
    Bmp.Free;
  end;
end;

// 使用
Canvas.Brush.Handle := CreatePatternBrush8x8([$AA, $55, $AA, $55, $AA, $55, $AA, $55]); // 棋盤格
Canvas.FillRect(Rect(0,0,100,100));
DeleteObject(Canvas.Brush.Handle); // 手動釋放 GDI 物件

常見陷阱與避坑

  1. Brush.Bitmap 不擁有所有權:設定後必須自行管理 Bitmap 生命週期,過早 Free 導致繪圖錯誤
  2. Style 切換會重置 Bitmap:設定 Style := bsSolid 會清除 Bitmap 關聯
  3. bsClear + Pen.Width > 1:邊框會向內外擴展,填充區域為空
  4. 高 DPI 下 Bitmap 紋理模糊:需準備多倍圖或用 Metafile 向量紋理

效能提示

  • 純色填充 (bsSolid) 最快,GDI 內部優化
  • 斜線/網格樣式次之,系統預建畫刷
  • Bitmap 紋理較慢,大面積填充考慮 StretchDraw 替代
  • 頻繁切換 Brush 屬性時,考慮快取多個 TBrush 實例

靈活運用 TBrush 三大填充模式,配合 TPen 邊框控制,能構建出專業級的圖形視覺效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性類型行為細節
ColorTColor僅在 Style=bsSolid 時生效;其他樣式下 Color 決定圖案線條顏色
StyleTBrushStylebsClear 時不填充內部,配合 Pen 畫空心圖形
BitmapTBitmap設定後 Style 自動視為 bsPattern (內部值);Bitmap 尺寸決定紋理重複頻率
HandleHBRUSH底層 GDI 畫刷句柄,進階互操作用