■TPrinterを使った印刷

■メタファイルの使い方

■Queryの利用(IB&FB)

■TeeChart

■TExcelApplication


メタファイルのこと

メタファイルとは、描画情報の集まりのことなんだけど、印刷に使う背景情報を管理するのに便利なので使ってます。
メタファイルの一番オーソドックスな形が、「WMF」や「EMF」でDelphiでも、デフォルトで読める便利な形式です。
本サイトで提供している印刷プレビューのためのDLLを利用するにもメタファイルの知識は必要です。

メタファイルの宣言
メタファイルは、自分で生成・解放をしてやらなきゃだめです。

var
MF:TMetaFile;
begin
//メタファイルの生成
MF := TMetaFile.Create;



//メタファイルの廃棄
MF.Free;
end;

EMFやWMFの読み書き
ヘルプにも書いてあるし、簡単ですけど一応…。

//読み込むとき
var
MF:TMetaFile;
begin
MF := TMetaFile.Create;
//
if OpenDialog.Excute Then
begin
MF.LoadFromFile(OpenDialog.FileName);
end;
MF.Free;
end;

//保存するとき
var
MF:TMetaFile;
begin
MF := TMetaFile.Create;
//
if SaveDialog.Excute Then
begin
MF.SaveToFile(SaveDialog.FileName);
end;
MF.Free;
end;

メタファイルに印字情報を追加するには
メタファイルに文字やペン、ブラシによる書き込みをする場合、メタファイルには直接書き込めません。
なぜならメタファイルは、キャンバスを持ってないから。
なので、中間集約するメタファイルキャンバスっちゅーのに書き込みます。
var
MergeMF:TMetaFile;//統合先メタファイル
MC:TMetaFileCanvas;//中間集約用のメタファイルキャンバス
DC:HDC;//デバイスコンテキスト
DotX,DotY:Extended;//1mmあたりのドット数
FieldRect:TRect;//矩形範囲
ExportText:String;//出力文字
begin
//最終的に書き込まれるメタファイルの器
MergeMF := TMetaFile.Create;
//メタファイルの解像度
DC := GetDC(0);//デバイスコンテキスト取得
MergeMF.Inch := 0;
dpiX := GetDeviceCaps(DC, LOGPIXELSX);
dpiY := GetDeviceCaps(DC, LOGPIXELSY);
//1mmあたりのドット数
DotX := dpiX / 25.4;
DotY := dpiY / 25.4;
//メタファイルのサイズ決定
MergeMF.Height := Round(mmHeight * DotY);
MergeMF.Width := Round(mmWidth * DotX);

//メタファイルキャンバスに描画(ここに統合先メタファイルを引数として渡すことが大事)
MC := TMetafileCanvas.Create(MergeMF, 0);
try
//あとは印刷の要領で書き込みます。
MC.DrawText(Handle,PChar(ExportText,-1,FieldRect,));
MC.StretchDraw(FieldRect,TImage.Graphic);
finally
//最後にメタファイルキャンバスを解放廃棄することで、印字情報がメタファイルMergeMFに書き込まれます。
MC.Free;
end;
end;

※基本TPrinterのキャンバスと同じ使い方なんだけど、一つ押さえておくことがあります。それは、メタファイルキャンバスには余白がないということ。
TPrinterのキャンバスの始点は用紙の余白を除いた分から0始点になっていたんだけれど、メタファイルは余白がないので、その分始点を印刷のロジックからずらす必要があります。
逆に余白考えなくていいからメタファイルの方が楽なんですけどね。

TMetafileCanvasの始点 TPrinterの始点

Copyright 2011 studio-take All Rights Reserved.