1. 程式人生 > >類似於-“中國移動話費單列印”的思路

類似於-“中國移動話費單列印”的思路

前一陣子給 安徽省棉麻交易市場 作了一個咚咚
(類似於中國移動話費單列印)
其中一個模組的功能就是實現單據列印
單據是專用紙,不是白紙
模組程式簡單,主要是思路要對,要不然就複雜了

開始走了彎路,老是想怎麼用報表
比如datareport,ms的MSFlexGrid,還有更為複雜的第三方水晶報表

事實上用一個極為簡單的Printer.CurrentX和printer.CurrentY就可以了
要做的準備工作就是量好單據每個要列印項的座標
再乘以56.7,轉化成“緹”
如果是水平列印,則要先將印表機的走紙設為橫向(控制面板裡。。)

還有個細節是換行問題
在VB中,text文字框的輸入是可以自動換行的,但列印則不會自動換行
為此,我編寫了一個函式實現每個文字框每行最多列印6個字元:

Sub PrintSingleLine(s As String, X As Long, n As Integer)
     Dim nLines As Integer
    
     nLines = Len(s) / n
     If Len(s) > n * nLines Then nLines = nLines + 1
     If Len(s) = 0 Then nLines = 1 ' 空 行
     For i = 0 To nLines - 1
     Printer.CurrentX = X
     Printer.Print Mid(s, i * n + 1, n)
     Next
    End Sub

再實行以下呼叫:

 Dim s As String, sLine As String
    
     Printer.CurrentY = 72 * 56.7   '72是我例子的座標
     s = txtProductInfo(2).Text   '我例子的文字框
     pos = InStr(s, vbCrLf)  'vbCrlf索回車的意思。。
    
Do While pos > 0
     sLine = Left(s, pos - 1)
     s = Mid(s, pos + 2)
     PrintSingleLine Trim(sLine), 49 * 56.7, 6
     pos = InStr(s, vbCrLf)
 Loop
    
PrintSingleLine Trim(s), 49 * 56.7, 6  '每行6個字元

---------作者卡卡---------