VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 印刷関係のメニュー
1.指定位置に(文字・罫線・指定フォントで)印刷する
2.ピクチャーの内容を印刷する
3.網掛け文字を表示及び印字
4.プリンターの指定方法
5.用紙サイズ・用紙の向き・用紙トレイ・印刷枚数・拡大縮小を指定する
6.プリンターの印刷余白及び用紙サイズを取得
7.関連付け起動によるファイルの印刷
8.[プリンターの設定]ダイアログボックスを表示する
9.その他上記以外の印刷関係のサンプル
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


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.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
コモンダイアログコントロールによる印刷設定 印刷設定用ダイアログボックス
プリンターの設定 ダイアログボックス  プリント ダイアログボックス  ページ設定 ダイアログボックス  印刷用ダイアログボックスを表示



このページのトップへ移動します。