Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年05月12日] [更新 2013年11月26日] ワード操作フォームEx
ワード操作フォームEx
文書の印刷
動作確認等 -







開いている文書の印刷


wdfWordPrintOut(FirstPage,
                LastPage,
                ACopies,
                CollateFlag,
                HeaderFlg)

現在編集中の文書を,印刷ダイアログを表示しないで印刷します.
プリンタは wdfPrinterNo プロパティの値を使用します.

引数 説明
FirstPage Integer 印刷開始ページ番号
1 は先頭のページ
LastPage Integer 印刷終了ページ番号
総ページ数よりも大きい場合は最終ぺージまで印刷
ACopies Integer 印刷部数
CollateFlag Boolean 部単位の印刷
HeaderFlg Boolean ヘッダフッタ部を印刷するかのフラグ




ワードの印刷ダイアログを表示


wdfWordShowPrintDialog

ワード操作フォームExの[印刷]ボタンでは Delphi の PrintDialog を表示するようになっています.
このダイアログではプリンタの [プロパティ] は設定できません.ワード印刷ダイアログでは設定が可能です.そのためのメソッドです.


[備考]
ワードやエクセルでは,プリンタはワード,エクセルが内部で制御,管理しています.


図1
ワードの印刷ダイアログ

リスト1
ワードの印刷ダイアログを表示する例
//=============================================================================
//  ワードの[印刷]ダイアログを表示して印刷
//=============================================================================
procedure TplWordFormEx2.btnPrintClick(Sender: TObject);
begin
  //inherited; 元のボタンクリックの実行なので不要

  //1番目のプリンタに設定
  wdfPrinterNo := 1;
  //ワードの印刷ダイアログを表示
  wdfWordShowPrintDialog;
end;




Dialog オブジェクトでワードの印刷ダイアログを表示


ワードの印刷ダイアログは,Dialog オブジェクトの wdDialogFilePrint を使用して表示できます.


procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
  pIndex   : OleVariant;
  pTimeOut : OleVariant;
begin
  pIndex   := wdDialogFilePrint;
  pTimeOut := 0;
  try
    wdfWordApp.Dialogs.Item(pIndex).Show(pTimeOut);
  except
    raise;
  end;
end;


Dialog オブジェクトを OleVariant 型で扱えば,次のように,プロパティを設定してからダイアログを表示することもできます.
Printer プロパティは設定できませんが,[OK] ボタンでダイアログを閉じると選択したプリンタ名を取得できます.ワードの印刷で使用するプリンタ名は,wdfWordApp.ActivePrinter で設定できますが,この ActivePrinter は,システムの通常使用するプリンタも変更します.
そのため,ワード操作フォームEx では,通常使用するプリンタを内部で記録しておき,印刷終了後に元に戻すようにしています.


procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
  objDialog : OleVariant;
  iRet      : Integer;
begin
  wdfSetFocusWord;

  try
    objDialog           := wdfWordApp.Dialogs.Item(wdDialogFilePrint);
    objDialog.Range     := 3;  //現在のページ
    objDialog.From      := 1;  //印刷開始頁
    objDialog.To        := 3;  //印刷終了頁
    objDialog.Collate   := 1;  //部単位
    objDialog.NumCopies := 5;  //印刷部数
    iRet := objDialog.Show;
  except
    raise;
  end;
  //[OK]で閉じると選択したプリンタ名が取得できる
  if iRet = -1 then begin
    Edit1.Text := VarToStr(objDialog.Printer);
  end;

  wdfSetFocusWord;
end;