完整範例 - Fontlist (7/10)
本篇的工作,是把字型樣本儲存成bmp檔案,雖然這像是一個全新的問題,但是實際上並不是,以下短短的幾行代碼便可以完成。
procedure TForm1.SaveAsBitmap(const Filename: string); var bmp: tbitmap; i, w, lh: integer; begin bmp:=tBitmap.Create; w:=Grid.ClientWidth; lh:=Grid.DefaultRowHeight; try bmp.Width:=w; bmp.Height:=lh*length(FFonts^); for i:=0 to length(FFonts^)-1 do DrawCell(bmp.Canvas, Rect(0, i*lh, w, (i+1)*lh), i, false); bmp.SaveToFile(Filename); finally bmp.Free; end; end;.
這裏的關鍵,是我們已經把DrawCell從GridDrawCell分離出來,使得它可以繪畫在不同的Canvas上。這是十分常見的技巧,除了可以減少工作量外,還可以保持輸出的一致性,代碼也更易維護。
Screen,graphic和printer的輸出雖然有若干不同之處,但是只要稍加注意,完全可以用相同的方法完成----畢竟它們都使用了tCanvas。
沒有留言:
發佈留言