⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printfrm.frm

📁 guan yu pai ke xi tong de ruan jian
💻 FRM
📖 第 1 页 / 共 4 页
字号:
        '确定显示页大小(与打印机一致)。
        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 + -