こんにちは。ハチ公です。
環境はVB6.0 WindowsXp です。
DocumentPropertiesについて質問です。
下記のようなコードを書き、印刷プロパティを表示しています。印刷プロ
パティを開いて変更し、閉じます。そして、もう一度、印刷プロパティを
開くと、変更内容が反映されていません。すべての変更内容(プリンタ独
自の情報も含めて)を反映するにはどのようにすればよいでしょうか?
なお、実際の印刷時には、印刷プロパティの変更内容を反映させて、印刷
することができました。
宜しくお願いします。
’//////////////////////////////////////////////////////////
’API宣言
Declare Function DocumentProperties Lib "winspool.drv" _
Alias "DocumentPropertiesA" _
(ByVal hWnd As Long, _
ByVal hPrinter As Long, _
ByVal pDeviceName As String, _
pDevModeOutput As Any, _
pDevModeInput As Any, _
ByVal fMode As Long) As Long
’//////////////////////////////////////////////////////////
’印刷プロパティを開く
Private Sub Command1_Click()
Dim lngResult As Long
Dim lngBufSize As Long
Dim udtDevMode As DEVMODE
Dim lnghPrinter As Long
Dim bytDevMode() As Byte
'プリンタのハンドルを取得
lngResult = OpenPrinter(Printer.DeviceName, lnghPrinter, ByVal vbNullString)
If lngResult = 0 Then
MsgBox Printer.DeviceName & "のプロパティをオープンできません。"
Exit Sub
End If
'DEVMODE構造体のバッファサイズ取得&バッファ確保
lngBufSize = DocumentProperties(Me.hWnd, lnghPrinter, Printer.DeviceName, ByVal vbNullString, ByVal vbNullString, 0)
ReDim bytDevMode(lngBufSize - 1)
bytDevMode(0).dmOrientation = intOrientation
'プロパティを表示
If IDOK = DocumentProperties(Me.hWnd, lnghPrinter, Printer.DeviceName, bytDevMode(0), ByVal vbNullString, DM_OUT_BUFFER Or DM_IN_PROMPT) Then
'デバイスコンテキストを再作成
Call ResetDC(Printer.hdc, bytDevMode(0))
End If
'プリンタを閉じる
Call ClosePrinter(lnghPrinter)
End Sub
’//////////////////////////////////////////////////////////
’印刷実行
Private Sub Command2_Click()
Printer.Print "テスト印刷"
Printer.EndDoc
End Sub
変更内容が「どこに」反映されていないのでしょうか?
もし2回目以降に呼び出したダイアログを指しているのであれば、
1回目のダイアログ表示の呼び出しのときに得たDEVMODEなどで
初期値を設定するか、既に取得してあるプリンタハンドルから
GetPrinterで取得したDEVMODEを用いるかする、ということに
なるのでは。
そうではなくPrinterの設定を指しているのならば、まずResetDC
の戻り値がどうなっているのかをチェックしては。
ツイート | ![]() |