List 7-54 その時点のデフォルトプリンタの状態をDEVMODE構造体に格納する
1: Dim vDevMode As DEVMODE
2:
3: ' 初期値を設定
4: vDevMode.dmSize = Len(vDevMode)
5: vDevMode.dmSpecVersion = 0
6: vDevMode.dmDriverVersion = 0
7: vDevMode.dmDriverExtra = 0
8: vDevMode.dmFields = 0
9:
10: On Error Resume Next
11:
12: ' デバイス名
13: vDevMode.dmDeviceName = Printer.DeviceName
14: ' 用紙サイズ
15: If Printer.PaperSize <> vbPRPSUser Then
16: ' 定型用紙
17: vDevMode.dmFields = vDevMode.dmFields Or DM_PAPERSIZE
18: vDevMode.dmPaperSize = Printer.PaperSize
19: vDevMode.dmPaperWidth = 0
20: vDevMode.dmPaperLength = 0
21: Else
22: ' 不定形用紙
23: vDevMode.dmFields = vDevMode.dmFields Or DM_PAPERSIZE Or _
DM_PAPERLENGTH Or DM_PAPERWIDTH
24: vDevMode.dmPaperSize = vbPRPSUser
25: vDevMode.dmPaperWidth = Printer.ScaleX(Printer.Width, Printer.ScaleMode, vbHimetric)
26: vDevMode.dmPaperLength = Printer.ScaleY(Printer.Height, Printer.ScaleMode, vbHimetric)
27: End If
28:
29: ' 給紙トレイ
30: vDevMode.dmDefaultSource = Printer.PaperBin
31: If Err.Number = 0 Then
32: vDevMode.dmFields = vDevMode.dmFields Or DM_DEFAULTSOURCE
33: Else
34: Err.Clear
35: End If
36:
37: ' 印字品質
38: vDevMode.dmPrintQuality = Printer.PrintQuality
39: If Err.Number = 0 Then
40: vDevMode.dmFields = vDevMode.dmFields Or DM_PRINTQUALITY
41: Else
42: Err.Clear
43: End If
44:
45: ' カラー
46: vDevMode.dmColor = Printer.ColorMode
47: If Err.Number = 0 Then
48: vDevMode.dmFields = vDevMode.dmFields Or DM_COLOR
49: Else
50: Err.Clear
51: End If
52:
53: ' 両面印刷
54: vDevMode.dmDuplex = Printer.Duplex
55: If Err.Number = 0 Then
56: vDevMode.dmFields = vDevMode.dmFields Or DM_DUPLEX
57: Else
58: Err.Clear
59: End If
60:
61: ' 用紙の向き
62: vDevMode.dmOrientation = Printer.Orientation
63: If Err.Number = 0 Then
64: vDevMode.dmFields = vDevMode.dmFields Or DM_ORIENTATION
65: Else
66: Err.Clear
67: End If
68:
69: ' 拡大率
70: vDevMode.dmScale = Printer.Zoom
71: If Err.Number = 0 Then
72: vDevMode.dmFields = vDevMode.dmFields Or DM_SCALE
73: Else
74: Err.Clear
75: End If
76:
77: ' エラーハンドラの解除
78: On Error GoTo 0