8.[プリンターの設定]ダイアログボックスを表示する |
1.CommonDialog コントロールで[プリンターの設定]ダイアログボックスを表示する 2.WIN32 API 関数を使ってプリンターのプロパティダイアログを開く(122) 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:SHInvokePrinterCommand その他 :CommonDialog コントロールは別途 プロジェクト→コンポーネントで選択して下さい。 : |
1.[プリンターの設定]ダイアログボックスを表示する(036) 2002.05.02 |
Option Explicit Private Sub sPrnSetUP() 'プリンターの設定ダイアログボックスを表示 On Error Resume Next CommonDialog1.flags = cdlPDPrintSetup CommonDialog1.ShowPrinter 'ダイアログボックスの表示 'キャンセルが押されたら設定しない If Err.Number Then Err.Clear Exit Sub End If 'この後に印刷処理でも可 End Sub Private Sub Command1_Click() On Error Resume Next Dim intRet As Integer intRet = MsgBox("プリンターの設定をA4縦向きに設定していますか。" _ , vbYesNoCancel, "プリンター設定確認") If intRet = vbNo Then sPrnSetUP 'プリンターのセットアップへ ElseIf intRet = vbCancel Then Exit Sub '印刷しない場合 End If intRet = MsgBox("印刷しますか?", vbYesNo, "印刷確認") If intRet = vbNo Then Exit Sub '印刷しない場合 End If '印刷処理へ移行 Printer.Print "テスト印刷" Printer.EndDoc End Sub 尚、cdlPDPrintSetup 等の定数については、Visual Basic Books Online で、[印刷]ダイアログボックスのフラグで検索して見て下さい。 注意、上記の設定では、ダイアログで設定した値は、印刷時に反映されません。 (下記のAPI関数を使った方法と比べて見て下さい。) 詳しくは、http://210.233.22.220/VBlabo/commonDLG/J042959.htm 参照 と言っても今では公開されていないようなので、下記に一部の記事を掲載しておきます。 [VB] Windows NT 4.0 上で印刷ダイアログの設定が有効にならない 最終更新日: 2000/10/17 文書番号: J042959 この資料は以下の製品について記述したものです。 Microsoft(R) Visual Basic(R) 5.0 6.0 この資料は、米国 Microsoft Corporation から提供されている Knowledge Base の Article ID Q173981 (最終更新日 2000-09-30) をもとに作成したものです。 現象 Windows 95/98 環境ではコモンダイアログ (CommonDialog) コントロールの ShowPrinter メソッドにより [印刷] ダイアログボックスを表示して印刷部数や用紙方向などの Printer オブジェクトのプロパティを設定することができますが、 Windows NT 4.0 や Windows 2000 環境下では [印刷] ダイアログボックスで指定した内容が有効になりません。 原因 コモンダイアログコントロールにおける PrinterDefault プロパティが True に設定されている場合、コモンダイアログコントロールは [印刷] ダイアログで設定した内容にシステムレジストリのプリンター設定を変更します。 しかし、Windows NT および Windows 2000 環境では、レジストリを操作する権限のないユーザーの場合システム セキュリティ上の制限により、コモン ダイアログコントロールはシステムレジストリの変更を行うことができません。 Printer オブジェクトはシステムレジストリからプリンター情報を取得しているため、システムレジストリが変更されない Windows NT および Windows 2000 環境では [印刷] ダイアログで設定した値は Printer オブジェクトに反映されません。 解決方法 Win32(R) API を使用して [印刷] ダイアログを表示し、Printer オブジェクトのプロパティをユーザーが選択した内容に変更します。 但し、DEVMODE 構造体の拡張部分を利用していたり独自の拡張が加えられているプリンタードライバーでは期待通りに動作しないことがあります。 従って、WindowsXP 以降では、下記のAPI を使った方法か独自に設定されるようにお薦めします。 |
2.WIN32 API 関数を使ってプリンターのプロパティダイアログを開く(122) 2002.03.14 |
Option Explicit 'その他のアクション 'Private Const PRINTACTION_OPEN = 0 'Private Const PRINTACTION_PROPERTIES = 1& 'プロパティを表示 'Private Const PRINTACTION_NETINSTALL = 2 'Private Const PRINTACTION_NETINSTALLLINK = 3 'Private Const PRINTACTION_TESTPAGE = 4 'Private Const PRINTACTION_OPENNETPRN = 5 'Private Const PRINTACTION_SERVERPROPERTIES = 7 Private Const PRINTACTION_DOCUMENTDEFAULTS = 6 'プリンターのプロパティ取得等のコマンドを実行する関数 Private Declare Function SHInvokePrinterCommand Lib "Shell32.dll" _ Alias "SHInvokePrinterCommandA" (ByVal hwnd As Long, _ ByVal uAction As Long, ByVal lpBuf1 As String, _ ByVal lpBuf2 As String, ByVal fModal As Long) As Long Private Sub Combo1_Click() 'プリンターが変更されたら Dim objPrinter As Printer Dim strMyPrinter As String '選択されているプリンター名を取得 strMyPrinter = Combo1.Text '使用可能プリンターを調べ For Each objPrinter In Printers '見つかったら If objPrinter.DeviceName = strMyPrinter Then 'オブジェクトに代入 Set Printer = objPrinter End If Next End Sub Private Sub Command1_Click() Dim lngRet As Long Dim strMyPrinter As String '選択されているプリンター名を取得 strMyPrinter = Combo1.Text 'プリンターのプロパティを表示 lngRet = SHInvokePrinterCommand(Me.hwnd, PRINTACTION_DOCUMENTDEFAULTS, strMyPrinter, vbNull, 1) End Sub Private Sub Command2_Click() Printer.Print "テスト印刷" Printer.EndDoc End Sub Private Sub Form_Load() Dim objPrinter As Printer 'プリンターの一覧を取得 For Each objPrinter In Printers Combo1.AddItem objPrinter.DeviceName Next '通常使うプリンターを表示 Combo1.Text = Printer.DeviceName End Sub 上記実行図及び使用コントロールと配置図 こちらのダイアログで設定した値は、印刷時に反映されます。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
コモンダイアログコントロールによる印刷設定 印刷設定用ダイアログボックス プリンターの設定 ダイアログボックス プリント ダイアログボックス ページ設定 ダイアログボックス 印刷用ダイアログボックスを表示 |