| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1242 人关注过本帖
标题:CommonDialog 控件哪里设置纸张大小?
只看楼主 加入收藏
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
CommonDialog 控件哪里设置纸张大小?
CommonDialog控件哪里设置纸张大小?即从哪里可以将纸张大小传递到了printer.PaperSize ?好像CommonDialog控件不接收纸张大小设定?
2014-10-21 14:23
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
各位版主大人,也不帮帮我吗?
2014-10-21 22:51
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
最简单的方法是在打印服务里添加一个自定义的纸张大小,然后遍历打印机打印尺寸,遍历打印尺寸的代码如下:

  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
2014-10-22 06:16
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
问题是如果打印机默认纸张是A4,但这次我选用了A3,如何将选择结果传递到printer对象呢?CommonDialog控件没有接收纸张大小的属性啊?Printer有paperSize属性,可人机互动不是靠CommonDialog控件来传递消息么?版主以上的代码虽遍历了打印机能打印的所有尺寸,但它却怎么知道我这次选用的尺寸?我的打印机是A3、A4纸同时装在打印机上的(A4是装在底盒里,A3是装在机侧,打印时可自由选择,但默认是A4)。
2014-10-22 08:59
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
Printer.PaperSize = 8是a3纸
2014-10-22 11:00
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
CommonDialog控件打开的打印对话框中有纸张选项,但好像CommonDialog控件本身却没有PaperSize属性,那通过什么将我要设的纸张大小传给Printer.PaperSize呢?
总不能再在窗体上增加一个ComboBox控件来专门接收纸张大小啊,这样也太搞笑了点。
请各位高手帮帮我!
2014-10-22 11:18
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
回复 5 楼 xzlxzlxzl
我知道 Printer.PaperSize = 8 是A3纸,但这个8我通过窗口什么传给程序呢,如果就这样写进代码里,那就永远只能用A3纸打印了
2014-10-22 11:22
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:20 
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
2014-10-22 23:32
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
回复 8 楼 xzlxzlxzl
今天停一天电,晚上刚来电。谢谢版主解答!
2014-10-23 19:14
快速回复:CommonDialog 控件哪里设置纸张大小?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052143 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved