📄 printfrm.frm
字号:
'确定显示页大小(与打印机一致)。
PrintPage.Height = Printer.Height
PrintPage.Width = Printer.Width
End If
'根据纸张大小设置显示页坐标系统(以毫米为单位)。
If Printer.Orientation = 1 Then '纵向打印。
PrintPage.Scale (0, 0)-(OutPaperInfo.PaperWidth / 10, OutPaperInfo.PaperHeight / 10)
Else '横向打印。
PrintPage.Scale (0, 0)-(OutPaperInfo.PaperHeight / 10, OutPaperInfo.PaperWidth / 10)
End If
Me.Caption = App.ProductName & " <课表打印>"
Me.WindowState = 2 '自动最大化.
PrintPage.AutoRedraw = True
ViewPage.AutoRedraw = True
RoomNum = 1
ViewPage.Height = PrintPage.Height / RoomNum
ViewPage.Width = PrintPage.Width / RoomNum
ViewPage.ScaleWidth = PrintPage.ScaleWidth
ViewPage.ScaleHeight = PrintPage.ScaleHeight
'第一次显示页面。
Call Me.PagereRefresh
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
'Ctrl+P打印输出。
If (Chr(KeyCode) = "p" Or Chr(KeyCode) = "P") And Shift = 2 Then Call PrintCom_Click(1)
End Sub
Private Sub Form_Resize()
'调试通过。
On Error Resume Next
Dim TempNumber As Integer
PrintWin.Width = Me.ScaleWidth - SetPageTop.Width
PrintWin.Height = Me.ScaleHeight - SetPageLeft.Height - PrintCom(0).Height
PrintWin.Left = 0
PrintWin.Top = 0
SetPageTop.Height = PrintWin.Height
SetPageTop.Top = 0
SetPageTop.Left = PrintWin.Left + PrintWin.Width
SetPageLeft.Width = PrintWin.Width
SetPageLeft.Left = 0
SetPageLeft.Top = PrintWin.Top + PrintWin.Height
For TempNumber = 0 To PrintCom.Count - 2
PrintCom(TempNumber).Left = Me.ScaleWidth - PrintCom(0).Width * (TempNumber + 1)
PrintCom(TempNumber).Top = SetPageLeft.Top + SetPageLeft.Height
Next
PrintCom(4).Width = Me.SetPageTop.Width
PrintCom(4).Height = Me.SetPageLeft.Height
PrintCom(4).Left = Me.SetPageTop.Left
PrintCom(4).Top = Me.SetPageLeft.Top
ViewPage.Width = PrintPage.Width / RoomNum '确定预览窗口大小。
ViewPage.Height = PrintPage.Height / RoomNum
SetPageLeft.Min = -PrintWin.Width
SetPageLeft.Max = ViewPage.Width
SetPageLeft.SmallChange = (SetPageLeft.Max + Abs(SetPageLeft.Min)) / 50 * 2
SetPageLeft.LargeChange = SetPageLeft.SmallChange
SetPageTop.Min = -PrintWin.Height
SetPageTop.Max = ViewPage.Height
SetPageTop.SmallChange = (SetPageTop.Max + Abs(SetPageTop.Min)) / 50 * 2
SetPageTop.LargeChange = SetPageTop.SmallChange
End Sub
Private Sub PrintCom_Click(Index As Integer)
On Error Resume Next
Dim TemStr As String
Dim ForIndex As Long
Dim OldPageIndex As Long
Dim PageCount As Long
Select Case Index
Case 0: '关闭.
Unload Me
Exit Sub
Case 1: '打印.
'如果未注册,则不允许打印.
If ApplyMode = False Then
If MsgBox("支持国产软件!请注册您的产品!" & Chr(13) & "未注册时不能将课表打印到外部介质!" & Chr(13) & "您现在就要注册吗?", vbYesNo, "未注册...") = vbYes Then Apply.Show 1
Exit Sub
End If
TemStr = Printer.DeviceName '测试打印机是否存在。
If Err.Number <> 0 Then '打印机错误
MsgBox "打印机错误!无法打印.", vbOKOnly, "错误..."
Exit Sub
End If
PageCount = MyDataSet.Tables((DataMode Mod 2)).RowCount \ (MyDataSet.Tables(7).Rows(0).Items(21).Value * MyDataSet.Tables(7).Rows(0).Items(22).Value) + Abs(MyDataSet.Tables((DataMode Mod 2)).RowCount Mod (MyDataSet.Tables(7).Rows(0).Items(21).Value * MyDataSet.Tables(7).Rows(0).Items(22).Value) <> 0)
If DataMode >= 4 Then PageCount = 1
Me.PrintDialog.Max = PageCount '最大页数。
Me.PrintDialog.Min = 1
Me.PrintDialog.CancelError = True
Me.PrintDialog.ShowPrinter
If Err.Number <> 0 Then Exit Sub '用户选择取消。
OldPageIndex = PageIndex
Printer.Scale (0, 0)-(PrintPage.ScaleWidth, PrintPage.ScaleHeight)
For ForIndex = 1 To Me.PrintDialog.Copies '打印份数。
Select Case Me.PrintDialog.Flags Mod 4
Case 0: '打印全部。
For PageIndex = 0 To PageCount - 1
'刷新页面。
Me.PagereRefresh True
'打印页面。
DoEvents
'StretchBlt Printer.hdc, 0, 0, Printer.Width, Printer.Height, PrintPage.hdc, 0, 0, PrintPage.Width, PrintPage.Height, vbSrcCopy
If PageIndex < PageCount - 1 Then Printer.EndDoc '决定是否产生新的打印页。
Next
Case 1: '打印当前页。
Me.PagereRefresh True
'DoEvents
'StretchBlt Printer.hdc, 0, 0, Printer.Width, Printer.Height, PrintPage.hdc, 0, 0, PrintPage.Width, PrintPage.Height, vbSrcCopy
Case 2: '从页到页。
For PageIndex = Me.PrintDialog.FromPage To Me.PrintDialog.ToPage Step (1 - Abs((Me.PrintDialog.FromPage > Me.PrintDialog.ToPage) * 2))
'刷新页面。
Me.PagereRefresh True
'打印页面。
DoEvents
'StretchBlt Printer.hdc, 0, 0, Printer.Width, Printer.Height, PrintPage.hdc, 0, 0, PrintPage.Width, PrintPage.Height, vbSrcCopy
If Me.PrintDialog.FromPage > Me.PrintDialog.ToPage And PageIndex > Me.PrintDialog.ToPage Or Me.PrintDialog.FromPage < Me.PrintDialog.ToPage And PageIndex < Me.PrintDialog.ToPage Then Printer.EndDoc '决定是否产生新的打印页。
Next
End Select
If ForIndex < Me.PrintDialog.Copies Then Printer.EndDoc '决定是否产生新的打印页。
Next
Printer.EndDoc
PageIndex = OldPageIndex '恢复当前显示页并刷新显示。
Me.PagereRefresh
Exit Sub
Case 2: '下一页.汇总表时两个翻页键都不可用。
Me.PagereRefresh
If MyDataSet.Tables(DataMode Mod 2 + Abs(DataMode = 4) * 3).RowCount > (PageIndex + 1) * MyDataSet.Tables(7).Rows(0).Items(21).Value * MyDataSet.Tables(7).Rows(0).Items(22).Value Then
PageIndex = PageIndex + 1
End If
Case 3: '上一页.
If PageIndex > 0 Then PageIndex = PageIndex - 1
Case 4: '归零.
Me.SetPageTop.Value = 0
Me.SetPageLeft.Value = 0
Exit Sub
End Select
Me.PagereRefresh
End Sub
Private Sub SetPageLeft_Change()
'调试通过。
ViewPage.Left = -SetPageLeft.Value
End Sub
Private Sub SetPageLeft_Scroll()
'调试通过
SetPageLeft_Change
End Sub
Private Sub SetPageTop_Change()
'调试通过
ViewPage.Top = -SetPageTop.Value
End Sub
Private Sub SetPageTop_Scroll()
'调试通过
SetPageTop_Change
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'调试通过
'显示菜单。
If Button = 2 Then PopupMenu MenuPrintMain
End Sub
Private Sub PrintWin_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'调试通过
'显示菜单。
If Button = 2 Then PopupMenu MenuPrintMain
End Sub
Private Sub ViewPage_DblClick()
RoomNum = RoomNum - 1
If RoomNum < 1 Then RoomNum = 5
'确定显示页大小及座标系统。
Form_Resize
Me.PagereRefresh
End Sub
Private Sub ViewPage_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'调试通过
'实现拖动。
If Button <> 1 Then Exit Sub
ReleaseCapture
SendMessage ViewPage.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End Sub
Private Sub ViewPage_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'调试通过
'根据定位更新滚动条。
On Error Resume Next
SetPageLeft.Value = -ViewPage.Left
SetPageTop.Value = -ViewPage.Top
End Sub
Private Sub ViewPage_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'调试通过
'显示菜单。
If Button = 2 Then PopupMenu MenuPrintMain
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -