使用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的打印驱动程序了。
此问题由李海回答。
| |
|
|
| |
|
|