用紙サイズ゛を取得するには?

解決


  2002-09-26 02:54:41  No: 76150

はじめまして。初心者ですがよろしくお願いいたします。

早速質問ですが、印刷コモンダイアログから選択された用紙サイズと供給用紙を
取得するにはどのようにすればよいのでしょうか?

最近の過去ログにも同様の質問をされている方がいらっしゃいましたが、レスが
ついておりませんでしたので、再度質問させていただきます。
どうかご教示をおねがいいたします。


いち  2002-09-26 03:56:38  No: 76151

プリンタオブジェクトを使用します。たとえば、

Dim myPrinter As Printer
For Each myPrinter In Printers
   If myPrinter.Orientation = vbPRORPortrait Then
      Set Printer = myPrinter
      Exit For
   End If
Next

で通常使用するプリンタを取得した後、
myPrinter.PaperSize
で取得できます。
PaperSizeの値は、
定数          値 内容 
VbPRPSA3       8 A3、297 x 420 mm  
VbPRPSA4       9 A4、210 x 297 mm  
VbPRPSA4Small 10 A4 Small、210 x 297 mm  
VbPRPSA5      11 A5、148 x 210 mm  
VbPRPSB4      12 B4、250 x 354 mm 
VbPRPSB5      13 B5、182 x 257 mm  

とかです。詳細はNSDNライブラリでPaperSizeを検索してみてください。


  2002-09-26 19:35:48  No: 76152

いち様アドバイスありがとうございます。
この方法で通常使用するプリンターに設定されている用紙サイズの
取得はできたのですが、コモンダイアログに「cdlPDPrintSetup」を
指定し、ダイアログボックスを表示した場合にダイアログボックス内に
ある「サイズ(Z)」からユーザーが選択した用紙サイズを取得するのも
この方法を応用するのでしょうか??

そういったメソッドやプロパティを探したのですが、見つからなかったもので...。
ご迷惑をおかけしますが、よろしければ何かアドバイスをいただけませんでしょうか?


多分  2002-09-26 20:04:32  No: 76153

私も色々探したのですが、見つかりませんでした。

で、あとから考えた方法なんですけど(実際にはやってません)、
とりあえず、通常使うプリンタを退避しといて、コモンにより
通常使うプリンタを変更し、
印刷処理が終了したら、元のプリンタに戻すってのはどうでしょうか?


さわ  2002-09-26 21:26:21  No: 76154

横レス失礼致します。
comdlg32.dllのApiにより印刷ダイアログを表示する方法なら
表示時の引数(PRINT_DLGの構造体)にユーザー設定された値が返されます
・・・が、コントロール仕様に比べるとかなりロジックが膨大になってしまいますが。
何処かでこのクラスを見た事がある用な気がしたのですが?
参考までに。。


  2002-09-28 00:53:45  No: 76155

多分(いち様?!)様、さわ様、アドバイスありがとうございました。
返信が大変遅くなってしまい申し訳ありません。

別の案として、グレープシティ社から発売されている「VS-VIEW 7.0J」という
ツールを使用してみることにいたしました。
(質問させていただいた後、使用できると連絡がありましたので...。)
このツールを使い、自分でプリンタ設定、用紙サイズ、部数、縦横を取得できる
印刷ダイアログを作成しました。
とりあえず、ごりごり作ったので、つたないコードになっておりますが以下に
示しておきます。

とても参考になるアドバイス、本当にありがとうございました。
またお世話になるかもしれませんが、その時はどうかよろしくお願いいたします。

Option Explicit

Private Const A3 = "A3、297 x 420 mm"
Private Const A4 = "A4、210 x 297 mm"
Private Const A4s = "A4 Small、210 x 297 mm"
Private Const A5 = "A5、148 x 210 mm"
Private Const B4 = "B4、250 x 354 mm"
Private Const B5 = "B5、182 x 257 mm"

Private Sub Form_Load()

    Dim i As Integer
    Dim strPrinter As String

    '***********************印刷ロジック********************************
    'Windowsに設定されているプリンタドライバの一覧を取得
    For i = 0 To VSPrinter1.NDevices - 1
        Combo1.AddItem VSPrinter1.Devices(i), i
    Next

    '通常使うプリンタ名を取得
    Combo1.Text = VSPrinter1.Device
    Label3.Caption = VSPrinter1.Device
    strPrinter = Combo1.Text
    VSPrinter1.Device = strPrinter

    '用紙サイズを取得
    For i = 8 To 13
        If VSPrinter1.PaperSizes(i) Then
            Debug.Print "用紙サイズ"; i; ">使用可能"
            Select Case i
                Case "8"
                    Combo2.AddItem A3
                Case "9"
                    Combo2.AddItem A4
                Case "10"
                    Combo2.AddItem A4s
                Case "11"
                    Combo2.AddItem A5
                Case "12"
                    Combo2.AddItem B4
                Case "13"
                    Combo2.AddItem B5
            End Select
        End If
    Next

    Combo2.Text = Combo2.List(1)

End Sub

Private Sub Command1_Click()

    Dim intPaperOrient As Integer
    Dim strPaperSize As String
    Dim strResponse As String

    VSPrinter1.Text = False

    strResponse = MsgBox("印刷してよろしいですか?", vbOKCancel)

    If strResponse = vbOK Then  ' [はい] がクリックされた場合、

        '使用するプリンタを取得
        VSPrinter1.Device = Combo1.Text

        '用紙サイズ設定
        strPaperSize = Combo2.Text

        Select Case strPaperSize
            Case A3
                VSPrinter1.PaperSize = 8
            Case A4
                VSPrinter1.PaperSize = 9
            Case A4s
                VSPrinter1.PaperSize = 10
            Case A5
                VSPrinter1.PaperSize = 11
            Case B4
                VSPrinter1.PaperSize = 12
            Case B5
                VSPrinter1.PaperSize = 13
        End Select

        '用紙方向設定
        If Option1(0).Value = True Then
            intPaperOrient = 0
        ElseIf Option1(1).Value = True Then
            intPaperOrient = 1
        End If

        VSPrinter1.Orientation = intPaperOrient

        '部数設定
        VSPrinter1.Copies = imText1.Text

        VSPrinter1.StartDoc
        VSPrinter1.Paragraph = Form1.Text3.Text
        VSPrinter1.EndDoc

    Else
        Exit Sub
    End If

End Sub


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

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






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