早期多媒體應用常將 3D Studio (3DS) 輸出的 FLC/FLI 動畫拆解為 BMP 幀序列,存入資料庫再由 TTimer 驅動逐幀顯示。本文示範此經典作法:3DS 導出 BMP → 建立 Paradox 資料表存放圖形 → TTable + TDBImage 綁定 → TTimer 控制播放速度。
.BMP 格式。C:\PIC),檔名依序 F0001.BMP ~ F0045.BMP。使用 Database Desktop 建立 Pic.db (Paradox 5.0):
| 欄位名 | 型別 | 大小 | 說明 |
|---|---|---|---|
| FileName | Alpha | 255 | BMP 檔案完整路徑 |
| Picture | Graphic | - | 儲存 TGraphic 二進位資料 |
Table1:DatabaseName=MyWork, TableName=Pic.db, Active=TrueDataSource1:DataSet=Table1DBImage1:DataSource=DataSource1, DataField=Picture, Stretch=True
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
with Table1 do
begin
while not EOF do
begin
// 從檔案載入到暫存 TImage
Image1.Picture.LoadFromFile(FieldByName('FileName').AsString);
// 寫入 Graphic 欄位
Edit;
FieldByName('Picture').Assign(Image1.Picture.Graphic);
Post;
Next;
end;
end;
end;
注意:此步驟僅需執行一次,完成後可刪除原始 BMP 檔,僅保留資料庫。
Timer1:Interval=250 (約 4 FPS), Enabled=False (預設不自動播放)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Table1.Next;
if Table1.EOF then Table1.First; // 循環播放
end;
啟動播放:Timer1.Enabled := True;暫停:Timer1.Enabled := False。
Graphic 讀入 TList 或陣列,播放時直接指派 DBImage1.Picture.Graphic,避免重複資料庫存取。TrackBar 動態調整 Timer1.Interval。TMediaPlayer 播放伴隨音效 (WAV/MIDI)。TClientDataSet + TMemoryStream 儲存壓縮後的幀資料 (JPG/PNG),或直接播放 AVI/MP4 (DirectShow/FFmpeg)。「資料庫存圖 + Timer 推進記錄指標」是 Delphi 早期多媒體教學的經典範例。雖然現在較少直接用資料庫存放動畫幀,但此架構展示了 TDataSet 導航 (Next/First/EOF) 控制狀態機的核心思想,對理解資料感知控制項、主從關聯、即時資料顯示仍有參考價值。