歡迎光臨 Code²

Code Square, CodeSqaure, Pascal, Javascript

2008年12月19日星期五

完整範例 - 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;.

  這裏的關鍵,是我們已經把DrawCellGridDrawCell分離出來,使得它可以繪畫在不同的Canvas上。這是十分常見的技巧,除了可以減少工作量外,還可以保持輸出的一致性,代碼也更易維護。

  Screen,graphic和printer的輸出雖然有若干不同之處,但是只要稍加注意,完全可以用相同的方法完成----畢竟它們都使用了tCanvas。

沒有留言:

發佈留言