工業控制、儀表軟體常需模擬 LED 七段顯示器 (或 16 段) 顯示數值。Delphi 結合 TImageList 儲存 0-9 數字位圖,配合 TPaintBox 繪製,即可輕鬆打造逼真的數位顯示面板。本文完整示範位圖製作、元件配置、數字拆解顯示邏輯與測試程式。
clFuchsia),前景色紅色 (clRed)。bitmap_0.bmp。bitmap_1.bmp ~ bitmap_9.bmp,分別修改為對應數字形狀。技巧:以紫紅色為透明色,TImageList 可自動處理透明繪製。
Panel1:BevelOuter=bvRaised, BevelInner=bvLowered, BorderWidth=4 (形成凸起邊框)PaintBox1 置於 Panel1 內:Width=318, Height=64 (可顯示 6 位數,每位 54px 含間距)ImageList1:雙擊加入 bitmap_0.bmp ~ bitmap_9.bmp,**索引 0-9 對應數字 0-9**,設定 Transparent=True。Edit1 (輸入數字) + Button1 (觸發顯示)
var
DisNumber: Integer; // 全域/表單欄位,保存目前顯示值
procedure TForm1.DisplayLED(Number: Integer);
var
I: Integer;
Digits: array[0..5] of Integer; // 支援 6 位數
begin
// 限制範圍
if Number > 999999 then Number := 0;
// 拆解各位數字 (個位在 Digits[0])
for I := 0 to 5 do Digits[I] := 0;
I := 0;
while Number > 0 do
begin
Digits[I] := Number mod 10;
Number := Number div 10;
Inc(I);
end;
// 從最高位繪製到最低位 (右對齊)
for I := 5 downto 0 do
ImageList1.Draw(PaintBox1.Canvas, (5 - I) * 54, 0, Digits[I]);
end;
// FormCreate:初始化顯示 0
procedure TForm1.FormCreate(Sender: TObject);
begin
DisNumber := 0;
end;
// PaintBox OnPaint:重繪時恢復顯示 (視窗遮蔽後還原)
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
DisplayLED(DisNumber);
end;
// Button1 Click:讀取 Edit1 並顯示
procedure TForm1.Button1Click(Sender: TObject);
begin
DisNumber := StrToIntDef(Edit1.Text, 0);
DisplayLED(DisNumber);
end;
Digits 邏輯解析字串。TTimer 實作跑馬燈效果。ImageList。TCanvas 依段碼 (a-g, dp) 繪製線段,無需位圖資源,支援任意字型大小。「位圖陣列 + ImageList + PaintBox 重繪」是 Delphi 模擬硬體顯示器的經典模式。關鍵在於:
1. 位圖透明色統一 (紫紅色)
2. OnPaint 重繪機制保證視窗還原正確
3. 數字拆解與索引對應邏輯清晰
此架構易於擴展為時鐘、計數器、工業監控面板等應用。