この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

head2.gif7.4.8 用紙のサイズとプリンタの機種の変更
 以上で帳票を印刷することはできるようになったわけだが,このままの状態では,ユーザーが[通常使うプリンタ]に設定しているプリンタ,そして,それに設定されている用紙サイズにしか出力できない。なぜなら,帳票出力に使ったPrinterオブジェクトは,アプリケーションが起動した状態では[通常使うプリンタ]しか示さないためである。

 そこで,[通常使うプリンタ]以外のプリンタに出力できるようにしたり,用紙サイズを変更したりするには,Printerオブジェクトの切り替えが必要となる。以下,その方法について説明する。

●通常使うプリンタを変更する方法
 まず初めに断わっておくと,Visual Basicにおいてはプリンタを切り替える完璧な方法は用意されていない。唯一用意されているのは,コモンダイアログを使って[プリンタの設定]コモンダイアログを表示し,ユーザーに選択させることだけである。

 コモンダイアログを使うには,Visual Basicのメニューから[プロジェクト]−[コンポーネント]を選択し,[Microsoft Common Dialog Control 6.0](COMDLG32.OCX)にチェックを付ける(Fig.7-61)。

Fig.7-61 コモンダイアログのコンポーネント設定
fig7_61

 すると,Visual Basicのツールボックスにコモンダイアログを示すアイコン(icon01)が表示され,フォーム上に配置できるようになる(Fig.7-62)。以下,このコモンダイアログのアイコンをフォームに配置し,そのオブジェクト名をCommonDialog1にしたと仮定して話を進める。

Fig.7-62 コモンダイアログのアイコン
fig7_62

 コモンダイアログは,[ファイルを開く][ファイルを保存する][色の設定][フォントの指定][印刷][プリンタの設定][Windowsヘルプ]という7種類のダイアログボックスの表示をサポートするコントロールである。ここでは,これらの機能のうち,[印刷](Fig.7-63)と[プリンタの設定](Fig.7-64)ダイアログについてのみ説明する。ユーザーにプリンタの選択をさせる場合には,Fig.7-64に示した[プリンタの設定]ダイアログボックスを使う。

Fig.7-63 [印刷]ダイアログボックス
fig7_63

Fig.7-64 [プリンタの設定]ダイアログボックス
fig7_64


One Point! コモンダイアログは,OSが備えるダイアログボックスである。そのため,表示されるダイアログボックスの形状はOSによって異なる。Fig.7-63Fig.7-64は,Windows2000が表示するコモンダイアログである。

 [印刷]ダイアログボックスや[プリンタの設定]ダイアログボックスを表示する場合には,Table 7-16に示すプロパティを利用する。

Table 7-16 [印刷]ダイアログボックスや[プリンタの設定]ダイアログボックスを表示するときに使うコモンダイアログのプロパティ
プロパティ解説
CancelErrorユーザーがダイアログボックスにおいて[キャンセル]ボタンを押したときに実行時エラーを発生させるかどうかを設定する。Trueのときには実行時エラーが発生するようになる。デフォルトはFalse
Copies

[印刷]ダイアログボックスを表示したとき,ユーザーが入力した印刷部数を保持する。ダイアログボックスを表示するまえにCopiesプロパティを設定し,ユーザーに表示するデフォルト値を変更することもできる

Flags[印刷]または[プリンタの設定]ダイアログボックスの表示方法を設定する。Table 7-17を参照のこと
FromPage[印刷]ダイアログボックスを表示したとき,ユーザーが入力した印刷開始ページを保持する。ダイアログボックスを表示するまえにFromPageプロパティを設定し,ユーザーに表示するデフォルト値を変更することもできる
ToPage[印刷]ダイアログボックスを表示したとき,ユーザーが入力した印刷終了ページを保持する。ダイアログボックスを表示するまえにToPageプロパティを設定し,ユーザーに表示するデフォルト値を変更することもできる
HelpCommandユーザーがヘルプを表示しようとしたときに,何をするかを設定する。設定値の詳細はVisual Basicのオンラインヘルプを参照のこと
HelpContextユーザーがヘルプを表示しようとしたときに表示するヘルプのトピック番号を設定する
HelpFileユーザーがヘルプを表示しようとしたときに表示するヘルプのファイル名を設定する
HelpKeyヘルプのキーワードを設定する
Maxユーザーが入力できる最大ページ番号を設定する
Minユーザーが入力できる最小ページ番号を設定する
Orientation[印刷]または[プリンタの設定]ダイアログボックスを表示したとき,ユーザーが入力した用紙の向きを保持する。cblPortrait(縦向き)かcblLandScape(横向き)かのいずれかの値。ダイアログボックスを表示するまえにOrientationプロパティを設定し,ユーザーに表示するデフォルト値を変更することもできる
PrinterDefault[印刷]または[プリンタの設定]ダイアログボックスを表示したとき,Trueに設定しておくと,ユーザーが選択したプリンタを[通常使うプリンタ]に設定する。ただし,この機能には不具合があり,Windows NT系のOSでは正しく動作しない

 [プリンタの設定]ダイアログボックスを開くのは簡単である。Flagsプロパティにどのような形でダイアログボックスを表示するのかをTable 7-17に示す値の組み合わせ(和)で指定し,ShowPrinterメソッドを呼び出せばよい。また,このとき,PrinterDefaultプロパティにTrueを設定しておくと,ユーザーが選択したプリンタが[通常使うプリンタ]に設定される。

Table 7-17 [印刷]または[プリンタの設定]のダイアログボックスを表示するときのFlagsプロパティの設定値
解説
cdlPDAllPages印刷範囲の[すべて]ラジオボタンの状態を設定または取得する
cdlPDCollate[部単位で印刷]の状態を設定または取得する
cdlPDDisablePrintToFile[ファイルへ出力]チェックボックスを無効にする
cdlPDHelpButton[ヘルプ]ボタンを表示する
cdlPDHidePrintToFile[ファイルへ出力]チェックボックスを表示しない
cdlPDNoPageNums[ページ指定]の部分を無効にする
cdlPDNoSelection[選択した部分]の部分を無効にする
cdlPDNoWarning[通常使うプリンタ]がない場合にも警告を表示しない
cdlPDPageNums[ページ指定]の部分を設定または取得する
cdlPDPrintSetup[プリンタの設定]ダイアログボックスを表示する。この値が指定されなかったときには[印刷]ダイアログボックスが表示される
cdlPDPrintToFile[ファイルへ出力]チェックボックスの状態を設定または取得する
cdlPDReturnDCユーザーが選択したプリンタのデバイスコンテキストを取得し,hDCプロパティを経由してアクセスできるようにする
cdlPDReturnDefaultダイアログボックスを表示せず,[通常使うプリンタ]の設定値を得る
cdlPDReurnICユーザーが選択したプリンタの情報コンテキストを取得し,hDCプロパティを経由してアクセスできるようにする
cdlPDSelection[選択した部分]ラジンボタンが選択された状態にする
cdlPDUseDevModeCopiesプリンタドライバが複数部数印刷をサポートしていない場合に[印刷部数]の項目を無効にする

One Point! 複数部数の印刷は,プリンタドライバによってサポートされるものとサポートされないものがある。サポートされている場合には,Copiesプロパティを使って部数を設定するだけで,指定した部数分だけが自動的に出力される。しかし,サポートされていない場合には,必要な部数だけくり返し出力するという処理をアプリケーション側に実装しなければならない。

 たとえば,次のようにすれば,ユーザーに対して[プリンタの設定]ダイアログボックスを表示し,用紙サイズやプリンタを選択させ,それを[通常使うプリンタ]とすることがができる。

CommonDialog1.Flags = cdlPDPrintSetup
CommonDialog1.PrinterDefault = True
CommonDialog1.ShowPrinter

 この方法は悪くないのだが,次の2つの問題点がある。

通常使うプリンタが変更されてしまう
 PrinterDefaultプロパティをTrueに設定しておくと,ユーザーが選択したプリンタが[通常使うプリンタ]となる。これにより,Printerオブジェクトが指しているプリンタが,ユーザーの選択した設定と合致する。
 しかし,通常使うプリンタが変わってしまうのは,ある意味問題でもある。たとえば,いつもはA4サイズの用紙を使っているのだが,ある1枚の帳票だけをB4サイズで出力したいとしよう。このとき,ユーザーが用紙設定をB4サイズに変更すると,それが[通常使うプリンタ]の設定になってしまい,以降はデフォルトでB4サイズが選択されてしまうことになる。つまり,一時的に用紙サイズを変更したいのであっても,あとからユーザーが明示的にもとの設定に戻さなければならない羽目になる。
 
WindowsNT系のOSで動作しない
 PrinterDefaultプロパティをTrueに設定しておくと,ユーザーが選択したプリンタが[通常使うプリンタ]となるわけだが,このときVisual Basicはレジストリの設定を書き換えることによって[通常使うプリンタ]を切り替える操作をする。実は,Windows 95系のOSとWindows NT系のOSとでは,プリンタの設定にかかわるレジストリの設定箇所が異なるため,PrinterDefaultプロパティをTrueにしたとしても,Windows NT系のOSで実行した場合には,ユーザーが選択したプリンタが[通常使うプリンタ]にならないという不具合が生じる。この不具合は,KnowrageBaseのJ042959 にも記載されている。したがって,この方法はWindows NT 4.0やWindows 2000では正しく動作しない。

 上記の問題のうち,前者はともかく,後者があるため,Visual Basicのコモンダイアログの機能でプリンタを設定させることは,事実上できない。

Prev 58/134 Next