フォーム印刷時に綴じ代を考えて,紙の左側余白を大きくするには?


oishiman  2003-07-24 10:01:29  No: 4220

フォーム印刷時に綴じ代を考えて,紙の左側余白を大きくするには?
現在delphi6personalを使用しています。
form1.print...としてA4サイズの用紙に印刷していますが,左上すみに印刷してしまい,印刷物をファイルに閉じると,左側に穴が開いて非常に見にくいためです。
このため,左余白だけでも大きくとりたいのですが,良くわかりません。

すみませんが,何方かお教え願いませんでしょうか?


にしの  2003-07-24 17:32:27  No: 4221

GetFormImageでフォームのイメージ(TBitmap)を取得し、位置を調整して印刷してはどうでしょうか。


oishiman  2003-07-25 03:09:04  No: 4222

すみません。初心者なので意味がわかりません。申し訳ないです。

作成したいのは,印刷ボタンをクリックすると左余白が空いた状態

で印刷されるものを考えています。


にしの  2003-07-25 03:29:01  No: 4223

ヘルプを見ましたか?
初心者だからといって、ヘルプにかかれているGetFormImageメソッドや、Printメソッドがわからない、ということはないと思いますが。

どこがわからないのでしょうか。


にしの  2003-07-25 03:36:25  No: 4224

標準のTPrinterには余白に関する情報がないようです。
http://www.asahi-net.or.jp/~HA3T-NKMR/
こちらの、NkPrinterを使用すると、余白を取得することができます。
設定はできませんが、計算してミリ単位などで余白をもうけることができそうです。


oishiman  2003-07-25 05:05:29  No: 4225

printはできるんですが...。
また,おっしゃている内容をヘルプで見れますか?
ちなみにDELPHI6PERSONALでは見つけることが
できませんでした。


にしの  2003-07-25 05:24:08  No: 4226

Delphi6Personalのヘルプをダウンロードし、確認してみました。

DEL6VCL.HLPより引用します。
> Print メソッドを呼び出すと,フォームを印刷できます。
> Print は GetFormImage メソッドを呼び出し,フォームの
> ビットマップを取得してプリンタの HDC に描画します。

GetFormImageメソッドに関しては、例までついています。

本当に見つかりませんでしたか?
ヘルプファイルがたくさんあるので見つけにくいのかもしれませんが、根気よく探してください。

VCL関連のヘルプは、DEL6VCL.HLPです。
スタートメニューやDelphiのヘルプメニューから見つけられない場合は、このファイルを直接開いてみてください。

もし、ヘルプが古くて見つからない場合は、Borlandのホームページからダウンロードできます。
http://www.borland.co.jp/


oishiman  2003-07-25 08:27:29  No: 4227

何度も丁寧なご指導ありがとうございます。
なんとかヘルプで  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;


にしの  2003-07-25 17:18:42  No: 4228

基本的には、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の例であった枠は表示していません


oishiman  2003-07-25 19:50:24  No: 4229

いつも迅速なご返答ありがとうございます。

上文をコピーして,usesにprintersと入力して
ボタンをクリックしたら,固まってしまいました。

もっと勉強しなさいと感じられるかと思いますが,
どうか,フォームをボタン1クリックで印刷できる
ようになるまでお付き合い願いませんでしょうか?


にしの  2003-07-25 20:18:08  No: 4230

今、プリンタが使える環境でないので、確認できません。

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;

ただし、これだけでは紙をはみ出すかもしれません。


oishiman  2003-07-25 21:20:40  No: 4231

すみません。
『StretchDrawBitmapメソッドをコピーしておいて』
が分かりません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加