メタファイルのこと |
メタファイルとは、描画情報の集まりのことなんだけど、印刷に使う背景情報を管理するのに便利なので使ってます。
メタファイルの一番オーソドックスな形が、「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;
FieldRect:TRect;
ExportText:String;
begin
MergeMF := TMetaFile.Create;
DC := GetDC(0);
MergeMF.Inch := 0;
dpiX := GetDeviceCaps(DC, LOGPIXELSX);
dpiY := GetDeviceCaps(DC, LOGPIXELSY);
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
MC.Free;
end;
end; |
※基本TPrinterのキャンバスと同じ使い方なんだけど、一つ押さえておくことがあります。それは、メタファイルキャンバスには余白がないということ。
TPrinterのキャンバスの始点は用紙の余白を除いた分から0始点になっていたんだけれど、メタファイルは余白がないので、その分始点を印刷のロジックからずらす必要があります。
逆に余白考えなくていいからメタファイルの方が楽なんですけどね。
|
TMetafileCanvasの始点 |
TPrinterの始点 |
|
|
|