古老的form.print,古老的问题

claider 2001-08-13 10:54:51
我的一段程序中,把一个窗体作为参数传进一个函数,参数名为formname
在修改过几个font的属性后,用formname.print打印一些文本在窗体上,为何打不出来?
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanren_me 2001-08-13
  • 打赏
  • 举报
回复
up
woowindice 2001-08-13
  • 打赏
  • 举报
回复
你的代码我试过了,可以打印出来的,问题应该出在数据库上,检查一下你的数据库。
xiaoboey 2001-08-13
  • 打赏
  • 举报
回复
formname.autoredraw=true
claider 2001-08-13
  • 打赏
  • 举报
回复
Option Explicit

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

delta = (formname.ScaleWidth - bufflen) / (ofieldscount + 1) '计算辅助字段之间的空间(等间距)
'定位辅助字段
leftpoint = formname.ScaleWidth

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

窗体上没有放任何控件
songyangk 2001-08-13
  • 打赏
  • 举报
回复
是不是被其它控件挡上了,代码贴出来看看。
vbeasy 2001-08-13
  • 打赏
  • 举报
回复
我來參觀學習
我來參觀學習
vbeasy 2001-08-13
  • 打赏
  • 举报
回复
我來參觀學習
我來參觀學習
claider 2001-08-13
  • 打赏
  • 举报
回复
石块是对的

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧