DocumentPropertiesで変更内容を反映するには?


ハチ公  2006-12-09 01:27:46  No: 97380

こんにちは。ハチ公です。
環境は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


K.J.K.  2006-12-09 10:50:33  No: 97381

変更内容が「どこに」反映されていないのでしょうか?

もし2回目以降に呼び出したダイアログを指しているのであれば、
1回目のダイアログ表示の呼び出しのときに得たDEVMODEなどで
初期値を設定するか、既に取得してあるプリンタハンドルから
GetPrinterで取得したDEVMODEを用いるかする、ということに
なるのでは。

そうではなくPrinterの設定を指しているのならば、まずResetDC
の戻り値がどうなっているのかをチェックしては。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加