DBGrid 是 Delphi 資料庫應用中最核心的顯示控件。預設情況下它以單調的黑白文字呈現資料,但透過關閉 DefaultDrawing 屬性並利用 OnDrawDataCell 事件搭配 Canvas 畫布,我們可以實現豐富的條件格式:依薪資高低、庫存狀態、異常標記等動態變更前景與背景顏色,大幅提升資料可讀性與警示效果。
Table1.DatabaseName = DBDEMOS
Table1.TableName = EMPLOYEE.DB
Table1.Active = True
DataSource1.DataSet = Table1
DBGrid1.DataSource = DataSource1
DBGrid1.DefaultDrawing = False // 關鍵!
SpinEdit1.Increment = 200
SpinEdit1.Value = 20000
ColorGrid1.GridOrdering = go16x1
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
// 判斷薪資是否達標
if Table1.FieldByName('Salary').Value >= SpinEdit1.Value then
DBGrid1.Canvas.Brush.Color := ColorGrid1.ForegroundColor
else
DBGrid1.Canvas.Brush.Color := ColorGrid1.BackgroundColor;
DBGrid1.Canvas.FillRect(Rect); // 填滿背景
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Field.AsString); // 繪製文字
end;
// SpinEdit 數值變更時重繪
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
DBGrid1.Refresh;
end;
// ColorGrid 顏色變更時重繪
procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
DBGrid1.Refresh;
end;
// 表單建立時初始化預設色
procedure TForm1.FormCreate(Sender: TObject);
begin
ColorGrid1.ForegroundIndex := 9; // 灰色字
ColorGrid1.BackgroundIndex := 15; // 白底
end;
同樣原理適用於擁有 Canvas 屬性的其他控件(ListView、TreeView、StringGrid 等),讓整個應用程式介面更生動專業。