フォーム印刷時に綴じ代を考えて,紙の左側余白を大きくするには?
現在delphi6personalを使用しています。
form1.print...としてA4サイズの用紙に印刷していますが,左上すみに印刷してしまい,印刷物をファイルに閉じると,左側に穴が開いて非常に見にくいためです。
このため,左余白だけでも大きくとりたいのですが,良くわかりません。
すみませんが,何方かお教え願いませんでしょうか?
GetFormImageでフォームのイメージ(TBitmap)を取得し、位置を調整して印刷してはどうでしょうか。
すみません。初心者なので意味がわかりません。申し訳ないです。
作成したいのは,印刷ボタンをクリックすると左余白が空いた状態
で印刷されるものを考えています。
ヘルプを見ましたか?
初心者だからといって、ヘルプにかかれているGetFormImageメソッドや、Printメソッドがわからない、ということはないと思いますが。
どこがわからないのでしょうか。
標準のTPrinterには余白に関する情報がないようです。
http://www.asahi-net.or.jp/~HA3T-NKMR/
こちらの、NkPrinterを使用すると、余白を取得することができます。
設定はできませんが、計算してミリ単位などで余白をもうけることができそうです。
printはできるんですが...。
また,おっしゃている内容をヘルプで見れますか?
ちなみにDELPHI6PERSONALでは見つけることが
できませんでした。
Delphi6Personalのヘルプをダウンロードし、確認してみました。
DEL6VCL.HLPより引用します。
> Print メソッドを呼び出すと,フォームを印刷できます。
> Print は GetFormImage メソッドを呼び出し,フォームの
> ビットマップを取得してプリンタの HDC に描画します。
GetFormImageメソッドに関しては、例までついています。
本当に見つかりませんでしたか?
ヘルプファイルがたくさんあるので見つけにくいのかもしれませんが、根気よく探してください。
VCL関連のヘルプは、DEL6VCL.HLPです。
スタートメニューやDelphiのヘルプメニューから見つけられない場合は、このファイルを直接開いてみてください。
もし、ヘルプが古くて見つからない場合は、Borlandのホームページからダウンロードできます。
http://www.borland.co.jp/
何度も丁寧なご指導ありがとうございます。
なんとかヘルプで TPrinter を発見できました。
大変申し訳なく思っているんですが,下記例が記載されていましたが
メモの印刷ではなく,フォームの印刷に変えるにはどうしたら良いの
でしょうか?本当に申し訳ありません...。
procedure TForm1.Button1Click(Sender: TObject);
var
r: TRect;
i: Integer;
begin
with Printer do
begin
r := Rect(200,200,(Pagewidth - 200),(PageHeight - 200));
BeginDoc;
for i := 0 to Memo1.Lines.Count do
Canvas.TextOut(200,200 + (i * Canvas.TextHeight(Memo1.Lines.Strings[i])),
Memo1.Lines.Strings[i]);
Canvas.Brush.Color := clBlack;
Canvas.FrameRect(r);
EndDoc;
end;
end;
基本的には、Printer.Canvasへ出力することになります。
TMemoを印刷するときに、
Canvas.TextOut(...)
で1行ずつ印刷しているのはわかりますよね。
Canvasプロパティは、TCanvasクラスのオブジェクトですので、TCanvasのメソッドが使えます。
TCanvasの中には、Drawメソッドがあり、位置を指定してTGraphicオブジェクトを描画できます。
先に挙げたGetFormImageは、TBitmapオブジェクトを返します。
TBitmapは、TGraphicの派生クラスなので、Drawメソッドで使用することができます。
TMemoの印刷の例にあわせるなら、
procedure TForm1.Button1Click(Sender: TObject);
var
r: TRect;
i: Integer;
FormImage: TBitmap;
begin
FormImage := GetFormImage;
with Printer do
begin
BeginDoc;
// (200,200)の位置にフォームを描画
Canvas.Draw(200,200, FormImage);
EndDoc;
end;
FormImage.Free;
end;
こんな感じでしょうか。未確認です。
# Memoの例であった枠は表示していません
いつも迅速なご返答ありがとうございます。
上文をコピーして,usesにprintersと入力して
ボタンをクリックしたら,固まってしまいました。
もっと勉強しなさいと感じられるかと思いますが,
どうか,フォームをボタン1クリックで印刷できる
ようになるまでお付き合い願いませんでしょうか?
今、プリンタが使える環境でないので、確認できません。
http://www.asahi-net.or.jp/~HA3T-NKMR/tips004.htm
ここにある例でうまくいきませんか?
StretchDrawBitmapメソッドをコピーしておいて、
procedure TForm1.Button1Click(Sender: TObject);
var
r: TRect;
i: Integer;
FormImage: TBitmap;
begin
FormImage := GetFormImage;
with Printer do
begin
BeginDoc;
// (200,200)の位置にフォームを描画
StretchDrawBitmap(Canvas, rect(200, 200, FormImage.Width + 200, FormImage.Height + 200), FormImage);
EndDoc;
end;
FormImage.Free;
end;
ただし、これだけでは紙をはみ出すかもしれません。
すみません。
『StretchDrawBitmapメソッドをコピーしておいて』
が分かりません。
ツイート | ![]() |