注册 登录
编程论坛 VB6论坛

CommonDialog 控件哪里设置纸张大小?

zhengang1026 发布于 2014-10-21 14:23, 1242 次点击
CommonDialog控件哪里设置纸张大小?即从哪里可以将纸张大小传递到了printer.PaperSize ?好像CommonDialog控件不接收纸张大小设定?
8 回复
#2
zhengang10262014-10-21 22:51
各位版主大人,也不帮帮我吗?
#3
xzlxzlxzl2014-10-22 06:16
最简单的方法是在打印服务里添加一个自定义的纸张大小,然后遍历打印机打印尺寸,遍历打印尺寸的代码如下:

  Dim i As Integer, j As Integer
  On Error Resume Next   '如果是喷墨或激光打印机不能选择自定义纸张,所以要做出错处理
  Printer.ScaleMode = 7  '打印尺寸以厘米为单位
  j = -1
  For i = 0 To 256
    Printer.PaperSize = i
    If Err.Number = 0 Then If Printer.ScaleWidth = 我定义的纸宽 And Printer.ScaleHeight = 我定义的纸高 Then j = i
  Next
  If j < 0 Then MsgBox "没有找到你自定义的纸张大小或打印机不支持自定义纸张大小"

一般来说,针式打印机都支持自定义的纸张,喷墨或激光打印机虽然可以在打印服务自定义,但不能选择该尺寸打印,如果选择会出错。vb也可以用代码设置自定义的纸张,但比较复杂,使用好几个api
#4
zhengang10262014-10-22 08:59
问题是如果打印机默认纸张是A4,但这次我选用了A3,如何将选择结果传递到printer对象呢?CommonDialog控件没有接收纸张大小的属性啊?Printer有paperSize属性,可人机互动不是靠CommonDialog控件来传递消息么?版主以上的代码虽遍历了打印机能打印的所有尺寸,但它却怎么知道我这次选用的尺寸?我的打印机是A3、A4纸同时装在打印机上的(A4是装在底盒里,A3是装在机侧,打印时可自由选择,但默认是A4)。
#5
xzlxzlxzl2014-10-22 11:00
Printer.PaperSize = 8是a3纸
#6
zhengang10262014-10-22 11:18
CommonDialog控件打开的打印对话框中有纸张选项,但好像CommonDialog控件本身却没有PaperSize属性,那通过什么将我要设的纸张大小传给Printer.PaperSize呢?
总不能再在窗体上增加一个ComboBox控件来专门接收纸张大小啊,这样也太搞笑了点。
请各位高手帮帮我!
#7
zhengang10262014-10-22 11:22
回复 5 楼 xzlxzlxzl
我知道 Printer.PaperSize = 8 是A3纸,但这个8我通过窗口什么传给程序呢,如果就这样写进代码里,那就永远只能用A3纸打印了
#8
xzlxzlxzl2014-10-22 23:32
CommonDialog.ShowPrinter的设置结果并不和printer对象关联,由于CommonDialog.ShowPrinter并不输出其纸张类型,只能通过变通了(如果不使用对话框就很容易解决了),在窗体里添加一个CommonDialog1控件和一个command1控件,输入如下代码:

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Sub Command1_Click()
  Dim h As Long, w As Long, h1 As Long, w1 As Long, i As Integer, j As Integer
  On Error Resume Next
  CommonDialog1.CancelError = True
  CommonDialog1.Flags = cdlPDPrintSetup + cdlPDReturnDC
  CommonDialog1.ShowPrinter
  If Err.Number = 32755 Then Exit Sub         '选择了取消
  w = GetDeviceCaps(CommonDialog1.hDC, 110)   '获取CommonDialog1打印纸宽
  h = GetDeviceCaps(CommonDialog1.hDC, 111)   '获取CommonDialog1打印纸高
  Printer.ScaleMode = 3: j = -1
  For i = 0 To 255
    Err.Clear
    Printer.PaperSize = i
    If Err.Number = 0 Then
      w1 = GetDeviceCaps(Printer.hDC, 110)   '获取Printer打印纸宽
      h1 = GetDeviceCaps(Printer.hDC, 111)   '获取Printer打印纸高
      If w1 = w And h1 = h Then
        j = i
        Exit For
      End If
    End If
  Next
  If j > 0 Then
    MsgBox "打印纸尺寸类型为" & j & ",代码为: Printer.PaperSize=" & j
  Else
    MsgBox "出错"
  End If
  'Me.PrintForm     '打印窗体
  'Printer.EndDoc   '结束打印
End Sub
#9
zhengang10262014-10-23 19:14
回复 8 楼 xzlxzlxzl
今天停一天电,晚上刚来电。谢谢版主解答!
1