可以有很多方法,VB自己提供了设计器。但我更喜欢使用printer对象进行代码控制,下面有部分代码是在一张A4纸张上打印图表的,很早以前写的,乱,希望你能看懂:) 只要你把printer的currentx和currenty转换成思维模型了,就很容易在头脑里建立起一个预览图来了。 Option Explicit Dim mouse_Down As Boolean Dim mouse_X As Single Dim mouse_Y As Single Dim str_X As Integer Dim str_Y As Integer Dim out_PRINT As Boolean Dim moneyHANZI As String Dim print_BIANHAO As String Dim print_NAME As String Dim print_DANWEI As String Dim print_DANJIA As Single Dim print_NUM As Integer Dim print_HEJI As Single Dim print_MOVE As Boolean Private Sub chkPrint_Click() If chkPrint.value = 1 Then out_PRINT = True cmdPrintView.Visible = False cmdPrint.Visible = True Else out_PRINT = False cmdPrintView.Visible = True cmdPrint.Visible = False End If End Sub Private Sub cmdClose_Click() Unload Me End Sub Private Sub cmdPrint_Click() printOUT End Sub Private Sub cmdPrintView_Click() picPrint.Cls printOUT End Sub Private Sub Form_Load() With Me .Left = 90 .Top = 60 End With out_PRINT = False cmdPrintView.Visible = True cmdPrint.Visible = False str_X = 850 str_Y = 283 picPrint.Cls printOUT End Sub Private Sub imgClose_Click() Unload Me End Sub Private Sub imgTitle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then If mouse_Down <> True Then mouse_Down = True mouse_X = X mouse_Y = Y imgTitle.MousePointer = 5 End If End If \’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’窗体移动代码1:判断是否移动 End Sub Private Sub imgTitle_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If mouse_Down = True Then Me.Left = Me.Left + X - mouse_X Me.Top = Me.Top + Y - mouse_Y End If \’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’窗体移动代码2:窗体移动 End Sub Private Sub imgTitle_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If mouse_Down <> False Then mouse_Down = False imgTitle.MousePointer = 0 End If \’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’窗体移动代码3:鼠标变换默认 End Sub Private Sub labTitle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) imgTitle_MouseDown Button, Shift, X, Y labTitle.MousePointer = 5 \’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’窗体移动代码4:鼠标变换 End Sub Private Sub labTitle_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) imgTitle_MouseMove Button, Shift, X, Y \’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’\’调用函数执行窗体移动 End Sub Private Sub labTitle_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) imgTitle_MouseUp Button, Shift, X, Y labTitle.MousePointer = 0 End Sub Private Sub printTEST() Dim i As Integer With picTEST .CurrentX = 1900 .CurrentY = 310 .Font = "黑体" .FontSize = 15 .FontBold = False picTEST.Print " 中翔医院管理系统 药 品 清 单" .Font = "宋体" .FontSize = 9 .CurrentX = 7300 .CurrentY = .CurrentY + 100 picTEST.Print "时 间: " & getTime \’ .CurrentX = 1900 .CurrentY = .CurrentY + 50 picTEST.Line (850, .CurrentY)-(9870, .CurrentY) .CurrentX = 1200 .CurrentY = .CurrentY + 150 picTEST.Print "药品编号"; .CurrentX = 2700 picTEST.Print "药品名称"; .CurrentX = 4200 picTEST.Print "单 位"; .CurrentX = 5700 picTEST.Print "单 价"; .CurrentX = 7200 picTEST.Print "数 量"; .CurrentX = 8700 picTEST.Print "合计(元)" .CurrentY = .CurrentY + 50 If frmYaoPinMain.gridYaoPin.Rows > 1 Then For i = 1 To frmYaoPinMain.gridYaoPin.Rows - 1 Sql = "SELECT * FROM yaocontrol where bianhao like \’" & frmYaoPinMain.gridYaoPin.TextMatrix(i, 0) & "\’" Set Rs = Conn.execute(Sql) If Not (Rs.EOF And Rs.bof) Then If .CurrentY >= 5600 Then picTEST.Height = (Int(.CurrentY / 5667) + 1) * 5667 Else picTEST.Height = 5667 End If print_BIANHAO = Trim(Rs("bianhao")) print_NAME = Trim(Rs("name")) print_DANWEI = Trim(Rs("danwei")) print_DANJIA = Rs("danjia") print_NUM = Rs("shuliang") print_HEJI = print_DANJIA * print_NUM .CurrentX = 1200 .CurrentY = .CurrentY + 150 picTEST.Print print_BIANHAO; .CurrentX = 2700 picTEST.Print print_NAME; .CurrentX = 4200 picTEST.Print print_DANWEI; .CurrentX = 5700 picTEST.Print Format(print_DANJIA, "0.000"); .CurrentX = 7200 picTEST.Print print_NUM; .CurrentX = 8700 picTEST.Print Format(print_HEJI, "0.000") End If Next End If End With End Sub Private Sub printOUT() Dim i As Integer Dim j As Integer Dim rootRs On Error Resume Next printTEST picPrint.Height = picTEST.Height If picPrint.Height > 5667 Then picUP.Visible = True picDOWN.Visible = True End If If out_PRINT = False Then With picPrint .CurrentX = 1900 .CurrentY = 310 .Font = "黑体" .FontSize = 15 .FontBold = False picPrint.Print " 中翔医院管理系统 药 品 清 单" .Font = "宋体" .FontSize = 9 .CurrentX = 7300 .CurrentY = .CurrentY + 100 picPrint.Print "时 间: " & getTime \’ .CurrentX = 1900 .CurrentY = .CurrentY + 50 picPrint.Line (850, .CurrentY)-(9870, .CurrentY) .CurrentX = 1200 .CurrentY = .CurrentY + 150 picPrint.Print "药品编号"; .CurrentX = 2500 picPrint.Print "药品名称"; .CurrentX = 5200 picPrint.Print "单 位"; .CurrentX = 6400 picPrint.Print "单 价"; .CurrentX = 7600 picPrint.Print "数 量"; .CurrentX = 8900 picPrint.Print "合计(元)" .CurrentY = .CurrentY + 50 If frmYaoPinMain.gridYaoPin.Rows > 1 Then For i = 1 To frmYaoPinMain.gridYaoPin.Rows - 1 Sql = "SELECT * FROM yaocontrol where bianhao like \’" & frmYaoPinMain.gridYaoPin.TextMatrix(i, 0) & "\’" Set Rs = Conn.execute(Sql) If Not (Rs.EOF And Rs.bof) Then If .CurrentY >= 5600 Then picTEST.Height = (Int(.CurrentY / 5667) + 1) * 5667 Else picTEST.Height = 5667 End If print_BIANHAO = Trim(Rs("bianhao")) print_NAME = Trim(Rs("name")) print_DANWEI = Trim(Rs("danwei")) print_DANJIA = Rs("danjia") print_NUM = Rs("shuliang") print_HEJI = print_DANJIA * print_NUM .CurrentX = 1200 .CurrentY = .CurrentY + 150 picPrint.Print print_BIANHAO; .CurrentX = 2500 picPrint.Print print_NAME; .CurrentX = 5400 picPrint.Print print_DANWEI; .CurrentX = 6500 picPrint.Print Format(print_DANJIA, "0.000"); .CurrentX = 7700 picPrint.Print print_NUM; .CurrentX = 8900 picPrint.Print Format(print_HEJI, "0.000") End If Next End If End With ElseIf out_PRINT = True Then With Printer .CurrentX = 1900 .CurrentY = 310 .Font = "黑体" .FontSize = 15 .FontBold = False Printer.Print " 中翔医院管理系统 药 品 清 单" .Font = "宋体" .FontSize = 9 .CurrentX = 7300 .CurrentY = .CurrentY + 100 Printer.Print "时 间: " & getTime \’ .CurrentX = 1900 .CurrentY = .CurrentY + 50 Printer.Line (850, .CurrentY)-(9870, .CurrentY) .CurrentX = 1200 .CurrentY = .CurrentY + 150 Printer.Print "药品编号"; .CurrentX = 2500 Printer.Print "药品名称"; .CurrentX = 5200 Printer.Print "单 位"; .CurrentX = 6400 Printer.Print "单 价"; .CurrentX = 7600 Printer.Print "数 量"; .CurrentX = 8900 Printer.Print "合计(元)" .CurrentY = .CurrentY + 50 If frmYaoPinMain.gridYaoPin.Rows > 1 Then For i = 1 To frmYaoPinMain.gridYaoPin.Rows - 1 Sql = "SELECT * FROM yaocontrol where bianhao like \’" & frmYaoPinMain.gridYaoPin.TextMatrix(i, 0) & "\’" Set Rs = Conn.execute(Sql) If Not (Rs.EOF And Rs.bof) Then If .CurrentY >= 5600 Then picTEST.Height = (Int(.CurrentY / 5667) + 1) * 5667 Else picTEST.Height = 5667 End If print_BIANHAO = Trim(Rs("bianhao")) print_NAME = Trim(Rs("name")) print_DANWEI = Trim(Rs("danwei")) print_DANJIA = Rs("danjia") print_NUM = Rs("shuliang") print_HEJI = print_DANJIA * print_NUM .CurrentX = 1200 .CurrentY = .CurrentY + 150 Printer.Print print_BIANHAO; .CurrentX = 2500 Printer.Print print_NAME; .CurrentX = 5400 Printer.Print print_DANWEI; .CurrentX = 6500 Printer.Print Format(print_DANJIA, "0.000"); .CurrentX = 7700 Printer.Print print_NUM; .CurrentX = 8900 Printer.Print Format(print_HEJI, "0.000") End If Next End If Printer.Line (850, picTEST.Height)-(852, picTEST.Height) Printer.EndDoc If Err <> 0 Then If Err = 482 Then Rs.Close err_NUM = 27 ErrMSG err_NUM, 1 Exit Sub Else Rs.Close err_NUM = 26 ErrMSG err_NUM, 1 Exit Sub End If End If End With End If End Sub Function getHANZI(ByVal str As String) Select Case str Case "0" getHANZI = "零" Case "1" getHANZI = "壹" Case "2" getHANZI = "贰" Case "3" getHANZI = "叁" Case "4" getHANZI = "肆" Case "5" getHANZI = "伍" Case "6" getHANZI = "陆" Case "7" getHANZI = "柒" Case "8" getHANZI = "捌" Case "9" getHANZI = "玖" Case "\\" getHANZI = "\" End Select End Function Private Function numToHanZi(ByVal str As String) Dim leftnum As Integer Dim leftstr As String Dim rightstr As String Dim strall As String Dim i As Integer str = Left(str, Len(str) - 1) leftnum = InStr(str, ".") - 1 leftstr = Left(str, leftnum) rightstr = Right(str, 2) If Len(leftstr) > 5 Then numToHanZi = "金额超过十万" Exit Function End If For i = leftnum To 4 leftstr = "\\" & leftstr Next strall = leftstr & rightstr Debug.Print strall numToHanZi = getHANZI(Left(strall, 1)) & "万 " & getHANZI(Mid(strall, 2, 1)) & "千 " & getHANZI(Mid(strall, 3, 1)) & "百 " & getHANZI(Mid(strall, 4, 1)) & "十 " & getHANZI(Mid(strall, 5, 1)) & "元 " & getHANZI(Mid(strall, 6, 1)) & "角 " & getHANZI(Right(strall, 1)) & "分" End Function Private Sub picDOWN_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then print_MOVE = True Do Until (picMAP.Height) - (picPrint.Top + picPrint.Height) >= 240 picPrint.Top = picPrint.Top - 10 If print_MOVE = False Then Exit Sub DoEvents If print_MOVE = False Then Exit Sub Loop End If End Sub Private Sub picDOWN_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) print_MOVE = False End Sub Private Sub picUP_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then print_MOVE = True Do Until picPrint.Top >= 240 picPrint.Top = picPrint.Top + 10 If print_MOVE = False Then Exit Sub DoEvents If print_MOVE = False Then Exit Sub Loop End If End Sub Private Sub picUP_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) print_MOVE = False End Sub

评论