Sub myprintform(formname As Form, dbname As String, tablename As String, tbcaption As String, prifields() As String, prifieldscount As Integer, prifieldscp() As String, ofields() As String, ofieldscount As Integer, ofieldscp() As String)
Dim length As Single
Dim mydb As Database
Dim MyTable As Recordset
Dim buff As String, bufflen As Integer, delta As Integer, cofline As Integer
Dim midpos(20) As Integer '记录字段内容的居中位置
Dim leftpos(20) As Integer '居左位置
Dim leftpoint As Integer
Dim j As Integer, i As Integer
Dim cpleft(20) As Integer
Dim bufferlen As Integer
Set mydb = OpenDatabase(App.Path & "\" & dbname)
Set MyTable = mydb.OpenRecordset(tablename, dbOpenDynaset)
With formname
.FontName = "宋体"
.FontSize = 20
.FontBold = True
.FontItalic = False
.FontUnderline = False
.Font.Strikethrough = False
End With
length = formname.TextWidth(tbcaption)
If length >= formname.Width Then
MsgBox "打印机纸张尺寸不够,请更换更宽的纸张!"
Exit Sub
End If '检查纸宽是否够打表头
formname.CurrentX = formname.ScaleWidth / 2 - (formname.TextWidth(tbcaption)) / 2
formname.CurrentY = 10
formname.RightToLeft = False
formname.Print tbcaption '打印表头
formname.Print
formname.CurrentX = 20
formname.Print Date
' formname.Print
Call drawline(formname)
bufflen = 0
For i = 1 To prifieldscount
formname.FontSize = 9.4
bufflen = bufflen + formname.TextWidth(prifieldscp(i) & " ") + formname.TextWidth(MyTable.Fields(prifields(i))) + formname.TextWidth(Space(10))
If bufferlen > formname.ScaleWidth Then
formname.Print
End If
formname.Print prifieldscp(i) & " " & MyTable.Fields(prifields(i)); Space(10);
Next i
formname.Print '打印主字段
Call drawline(formname)
buff = "" '计算辅助字段布局
bufflen = 0
formname.FontSize = 9.4
cofline = 0
For i = 1 To ofieldscount
cofline = cofline + MyTable.Fields(ofields(i)).Size
Next i
bufflen = formname.TextWidth("p") * cofline
For i = ofieldscount To 1 Step -1
leftpoint = leftpoint - delta - formname.TextWidth("p") * MyTable.Fields(ofields(i)).Size
leftpos(i) = leftpoint
Next i '计算辅助字段内容坐上角点的横坐标
'''''''''''''''''''''''''''''''''''''''''''''''
'For i = 1 To ofieldscount
' midpos(i) = leftpos(i) + formname.TextWidth("p") * mytable.Fields(ofields(i)).Size / 2
' cpleft(i) = midpos(i) - formname.TextWidth(ofieldscp(i)) / 2
'Next i '计算辅助字段标题左端坐标
'''''''''''''''''''''''''''''''''''''''字段标题与字段内容左对齐,故取消计算
formname.FontUnderline = True
For i = 1 To ofieldscount
formname.CurrentX = leftpos(i)
formname.Print ofieldscp(i);
Next i
formname.Print '打印辅助字段
formname.FontUnderline = False
If MyTable.EOF <> True And MyTable.BOF <> True Then
MyTable.MoveFirst
End If
Do While MyTable.EOF <> True
For i = 1 To ofieldscount
formname.CurrentX = leftpos(i)
formname.Print MyTable.Fields(ofields(i));
Next i
formname.Print '打印字段内容
MyTable.MoveNext
Loop
MyTable.Close
mydb.Close
'''试验
formname.Print "fuck you"
'''
formname.Show
End Sub
Sub drawline(formname As Form)
Dim buff As String, bufflen As Integer, i As Integer
buff = "-"
bufflen = formname.ScaleWidth / formname.TextWidth(buff)
For i = 1 To bufflen
buff = buff & "-"
Next i
formname.Print buff
'formname.Print '划线
End Sub