Delphi Programming / Object Pascal
[掲載 2009年06月04日] [更新 2013年11月28日] ワード操作フォームEx
ワード操作フォームEx 参考コード類
ページ設定ダイアログ
動作確認等
Windows 7 U64(SP1) + Delphi XE2 + Word 2010
図のようなワードのページ設定ダイアログを表示する例です.
Dialog オブジェクトの DefaultTab プロパティで,ダイアログが起動した時にアクティブするタブを指定できます.
図1
ページ設定ダイアログ
起動時に値 (プロパティ) をセットして表示することも可能
copy code
// =============================================================================
// ワードのページ設定ダイアログの表示
//
// 前に表示したタブを初期表示
// =============================================================================
procedure TplWordFormEx2.Button1Click(Sender: TObject);
begin
wdfSetFocusWord;
wdfWordApp.Dialogs.Item(wdDialogFilePageSetup).Show(EmptyParam);
wdfSetFocusWord;
end ;
// =============================================================================
// ワードのページ設定ダイアログの表示
//
// [その他]のタブを初期表示
// =============================================================================
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
ADialog : Word2000.Dialog;
begin
ADialog := wdfWordApp.Dialogs.Item(wdDialogFilePageSetup);
ADialog.DefaultTab := wdDialogFilePageSetupTabLayout;
ADialog.Show(EmptyParam);
end ;
// =============================================================================
// ワードのページ設定ダイアログの表示
//
// [文字数と行数]のタブを初期表示
// =============================================================================
procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
ADialog : Word2000.Dialog;
begin
ADialog := wdfWordApp.Dialogs.Item(wdDialogFilePageSetup);
ADialog.DefaultTab := wdDialogFilePageSetupTabCharsLines;
ADialog.Show(EmptyParam);
end ;
// =============================================================================
// ワードのページ設定ダイアログの表示
//
// [余白]のタブを初期表示
// =============================================================================
procedure TplWordFormEx2.Button4Click(Sender: TObject);
var
ADialog : Word2000.Dialog;
begin
ADialog := wdfWordApp.Dialogs.Item(wdDialogFilePageSetup);
ADialog.DefaultTab := wdDialogFilePageSetupTabMargins;
ADialog.Show(EmptyParam);
end ;
// =============================================================================
// ワードのページ設定ダイアログの表示
//
// [用紙]のタブを初期表示
// =============================================================================
procedure TplWordFormEx2.Button5Click(Sender: TObject);
var
ADialog : Word2000.Dialog;
begin
ADialog := wdfWordApp.Dialogs.Item(wdDialogFilePageSetup);
ADialog.DefaultTab := wdDialogFilePageSetupTabPaperSource;
ADialog.Show(EmptyParam);
end ;
プロパティを設定してからワードのページ設定ダイアログを表示
PageSetup オブジェクトと Dialog オブジェクトのプロパティを設定してからダイアログを表示するサンプルです.
このコードでは,用紙サイズ,給紙方法 (トレイ),印刷の方向,余白を設定しています.
リスト2
プロパティを設定してからワードのページ設定ダイアログの表示
copy code
procedure TplWordFormEx2.Button6Click(Sender: TObject);
var
objDialog : OleVariant;
begin
if not wdfFileOpened then exit;
// 用紙サイズはあらかじめ設定しておかないと反映されないようだ
wdfWordDoc.PageSetup.PaperSize := wdPaperA5;
wdfWordDoc.PageSetup.FirstPageTray := wdPrinterManualFeed;
wdfWordDoc.PageSetup.OtherPagesTray := wdPrinterManualFeed;
objDialog := wdfWordApp.Dialogs.Item(wdDialogFilePageSetup);
objDialog.Orientation := wdOrientLandscape;
objDialog.TopMargin := wdfWordApp.Application.MillimetersToPoints(20 );
objDialog.BottomMargin := wdfWordApp.Application.MillimetersToPoints(15 );
objDialog.Show;
wdfSetFocusWord;
end ;
Delphi の TPageSetupDialog を使用する例です.
ただし,このコードで設定した用紙サイズはワードに反映されますが,給紙方法は必ずしも反映されるとは限りません.また,上のワードのページ設定ダイアログで設定した用紙サイズと給紙方法は反映されません.
文字数と行数等の余計な設定をさせたくない場合はいいかも知れませんが,ワードやエクセルはその内部でプリンタの情報を操作しています.用紙サイズの値も Windows API の定数値と違います.紙サイズ,給紙方法の値をワードの値と整合させるのは結構面倒と言うより,無理かも知れません.
余白設定専用のダイアログを作成して使用した方がいいかも知れません.
図2
Delphi のページ設定ダイアログ
リスト3
Delphi のページ設定ダイアログを表示
copy code
// =============================================================================
// Delphiのページ設定ダイアログTPageSetupDialogを表示
// 現在の設定値を初期表示
//
// 設定は,ワードのページ設定ダイアログの[余白]タブで確認できる
// =============================================================================
procedure TplWordFormEx2.Button7Click(Sender: TObject);
var
ptRatio : Double;
begin
if not wdfFileOpened then exit;
// mm単位の数値をptに変換する係数
ptRatio := 72.0 / 25.4 / 100.0 ;
with PageSetupDialog1 do begin
// 現在の設定値を取得
Units := pmMillimeters;
if wdfWordDoc.PageSetup.Orientation = wdOrientPortrait then begin
Printer.Orientation := poPortrait;
end else begin
Printer.Orientation := poLandscape;
end ;
MarginLeft := Trunc(wdfWordDoc.PageSetup.LeftMargin / ptRatio);
MarginTop := Trunc(wdfWordDoc.PageSetup.TopMargin / ptRatio);
MarginRight := Trunc(wdfWordDoc.PageSetup.RightMargin / ptRatio);
MarginBottom := Trunc(wdfWordDoc.PageSetup.BottomMargin / ptRatio);
if Execute then begin
// [OK]で閉じたら設定
wdfWordDoc.PageSetup.LeftMargin := ptRatio * MarginLeft;
wdfWordDoc.PageSetup.TopMargin := ptRatio * MarginTop;
wdfWordDoc.PageSetup.RightMargin := ptRatio * MarginRight;
wdfWordDoc.PageSetup.BottomMargin := ptRatio * MarginBottom;
wdfWordDoc.PageSetup.PageWidth := ptRatio * PageWidth;
wdfWordDoc.PageSetup.PageHeight := ptRatio * PageHeight;
end ;
end ;
end ;