热情软件屋

 

使用WritePrinter打印出来的字都一样大


编号:QA004418
建立日期: 2001年9月19日 最后修改日期:2001年9月19日
所属类别:

newman2:
    操作系统: win98
    编程工具: vb6.0
    问题: 本人使用的是SP322S票据打印机,由于要模仿DOS下面的打印原理(即输入一行,打印机就打一行),就到微软相关站点参照其代码,并把代码编成模块以便调用,但无论怎样调试打印出来的字都一样大,即使使用PRINTER.FONTSIZE属性都无法改变字的大小?请阁下指点。
    我编的模块如下:
    Option Explicit
     Public Type DOCINFO
     pDocName As String
     pOutputFile As String
     pDatatype As String
     End Type
    
     Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
     Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
     Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
     Public Declare Function OpenPrinter Lib "winspool.drv" Alias _
     "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
     ByVal pDefault As Long) As Long
     Public Declare Function StartDocPrinter Lib "winspool.drv" Alias _
     "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
     pDocInfo As DOCINFO) As Long
     Public Declare Function StartPagePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long) As Long
     Public Declare Function WritePrinter Lib "winspool.drv" (ByVal _
     hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, _
     pcWritten As Long) As Long
    
     Public Sub ppin(s1 As String, s2 As String, s3 As String, s4 As String, _ s5 As String, s6 As String)
     Dim lhPrinter As Long
     Dim lReturn As Long
     Dim lpcWritten As Long
     Dim lDoc As Long
     Dim sWrittenData As String
     Dim MyDocInfo As DOCINFO
     lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
     If lReturn = 0 Then
     MsgBox "The Printer Name you typed wasn't recognized."
     Exit Sub
     End If
     MyDocInfo.pDocName = "AAAAAA"
     MyDocInfo.pOutputFile = vbNullString
     MyDocInfo.pDatatype = vbNullString
     lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
     Call StartPagePrinter(lhPrinter)
     sWrittenData = vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf &_ vbCrLf & vbCrLf & " " & s1 & " " & s2 & vbCrLf & _ vbCrLf & vbCrLf & " " & s3 & " " & s4 & vbCrLf & _ vbCrLf & " " & s5 & vbCrLf & vbCrLf & _ vbCrLf& " " & s6 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _ vbCrLf & vbCrLf & vbCrLf & vbCrLf
     lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
     Len(sWrittenData), lpcWritten)
     lReturn = EndPagePrinter(lhPrinter)
     lReturn = EndDocPrinter(lhPrinter)
     lReturn = ClosePrinter(lhPrinter)
     End Sub

回答:

    WritePrinter直接将数据发送给打印机,Windows的打印驱动程序不对其进行任何处理,所以,Printer的各种属性都无效,打印机打出的字体当然相同。如果想打出不同字体,必须参考打印机的手册,看它支持什么控制指令。
    Windows的打印驱动程序只支持逐页打印,使用WritePrinter虽然可以支持逐行打印,但就无法利用Windows的打印驱动程序了。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio