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

📄 clstableprint.cls

📁 一个VB表格控件
💻 CLS
📖 第 1 页 / 共 3 页
字号:
                            lHeaderMergeRow(L) = -1
                            bFlag = True
                        End If
                        rctDraw.Right = rctDraw.Right + lArrCW(L) '- 2 * lPixXOffset
                        If bFlag Then
                            If lHeaderMergeRow(L) = -1 Then
                                rctDraw.Top = objOutput.ScaleY(sngYStart + lRow * sngHeaderRowH, iSM, vbPixels)
                                rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY(sngHeaderRowH, iSM, vbPixels)
                            Else
                                rctDraw.Top = objOutput.ScaleY(sngYStart + lHeaderMergeRow(L) * sngHeaderRowH, iSM, vbPixels)
                                rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY((lRow - lHeaderMergeRow(L) + 1) * sngHeaderRowH, iSM, vbPixels)
                                lHeaderMergeRow(lRow) = -1
                            End If
                            If Not (LastFont Is mvarHeaderFont(lRow, L)) Then
                                Set LastFont = mvarHeaderFont(lRow, L)
                                Set objOutput.Font = LastFont
                            End If
                            If m_MergeHeaderRow(lRow) Then
                                If L < mvarCols - 1 Then
                                    If mvarHeaderText(lRow, L) = mvarHeaderText(lRow, L + 1) Then
                                        bHeaderFlag(lRow) = False
                                        bMerged(lRow) = True
                                    Else
                                        If bMerged(lRow) And bHeaderFlag(lRow) Then bMerged(lRow) = False
                                        bHeaderFlag(lRow) = True
                                    End If
                                Else
                                    bHeaderFlag(lRow) = True
                                End If
                            Else
                                bHeaderFlag(lRow) = True
                            End If
                            If bHeaderFlag(lRow) Then
                                objOutput.ScaleMode = vbPixels
                                objOutput.Line (rctDraw.Left - lPixXOffset, rctDraw.Top)-(rctDraw.Right + lPixXOffset, rctDraw.Bottom), , B
                                objOutput.ScaleMode = iSM
                                
                                pDoVCenter objOutput.hDC, rctDraw, mvarHeaderText(lRow, L)
                                DrawText objOutput.hDC, mvarHeaderText(lRow, L), -1, rctDraw, c_DTDefFmt Or IIf((bMerged(lRow) And CenterMergedHeader), DT_CENTER, mvarColAlignment(L))
                            End If
                        End If
                        sngTmp = sngTmp + m_ColWidth(L)
                        If bHeaderFlag(lRow) Then rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
                    Next
                Next
                LastTop = LastTop + sngHeaderRowH * mvarHeaderRows
            End If
            lRH = objOutput.ScaleY(sngNormalRowH, iSM, vbPixels)
            objOutput.DrawWidth = mvarLineThickness
            ReDim lHeaderMergeRow(0 To mvarRows - 1)
            For L = 0 To UBound(lHeaderMergeRow())
                lHeaderMergeRow(L) = -1
'                bHeaderFlag(L) = False
            Next
            sngYStart = LastTop
            rctDraw.Left = lMargPix + lPixXOffset
            sngTmp = mvarMarginLeft
            For L = 0 To mvarCols - 1
'                If Not (objOutput.Font Is mvarColFont(L)) Then
'                    Set objOutput.Font = mvarColFont(L)
'                End If
                rctDraw.Top = objOutput.ScaleY(sngYStart, iSM, vbPixels)
                LastTop = sngYStart
                rctDraw.Right = rctDraw.Left + lArrCW(L) - 2 * lPixXOffset
                rctDraw.Bottom = rctDraw.Top
                bFlag = True
                For lRow = StartRow To LastRow
                    If Not (LastFont Is m_FontMatrix(lRow, L)) Then
                        Set LastFont = m_FontMatrix(lRow, L)
                        Set objOutput.Font = LastFont
                    End If
                    rctDraw.Bottom = rctDraw.Bottom + lRH
'                    If bFlag Then objOutput.Line (sngTmp, LastTop)-(sngTmp + m_ColWidth(L), LastTop)
                    If m_MergeCol(L) Then
                        If lRow < LastRow Then
                            If mvarTextMatrix(lRow, L) = mvarTextMatrix(lRow + 1, L) Then
                                bFlag = False
                            Else
                                bFlag = True
                            End If
                        Else
                            bFlag = True
                        End If
                    Else
                        bFlag = True
                    End If
                    If bFlag Then
                        If m_MergeRow(lRow) Then
                            If L < mvarCols - 1 Then
                                If mvarTextMatrix(lRow, L) = mvarTextMatrix(lRow, L + 1) Then
                                    'Now ColPos:
                                    If lHeaderMergeRow(lRow) = -1 Then lHeaderMergeRow(lRow) = rctDraw.Left 'L
                                    bMerged(0) = False
                                Else
                                    bMerged(0) = True
                                End If
                            Else
                                bMerged(0) = True
                            End If
                        Else
                            bMerged(0) = True
                            lHeaderMergeRow(lRow) = -1
                        End If

                        If bMerged(0) Then
                            If lHeaderMergeRow(lRow) <> -1 Then
                                lTmp = rctDraw.Left
                                rctDraw.Left = lHeaderMergeRow(lRow)
                            End If
                            If Not (mvarPictureMatrix(lRow, L) Is Nothing) Then
                                picCoords(3) = objOutput.ScaleX(mvarPictureMatrix(lRow, L).Width, vbHimetric, iSM)
                                picCoords(4) = objOutput.ScaleY(mvarPictureMatrix(lRow, L).Height, vbHimetric, iSM)
                                If picCoords(4) > (m_ColWidth(L) - 2 * mvarCellXOffset) Then picCoords(4) = (m_ColWidth(L) - 2 * mvarCellXOffset)
                                picCoords(2) = (objOutput.ScaleY(rctDraw.Bottom - rctDraw.Top, vbPixels, iSM) - picCoords(4)) / 2
                                If picCoords(2) < 0 Then
                                    picCoords(3) = picCoords(3) + 2 * picCoords(2)
                                    picCoords(2) = 0
                                End If
                                picCoords(2) = picCoords(2) + LastTop
                                If mvarColAlignment(L) = eLeft Then
                                    picCoords(1) = objOutput.ScaleX(rctDraw.Left, vbPixels, iSM)
                                ElseIf mvarColAlignment(L) = eRight Then
                                    picCoords(1) = sngTmp + (m_ColWidth(L) - mvarCellXOffset - picCoords(4))
                                ElseIf mvarColAlignment(L) = eCenter Then
                                    picCoords(1) = sngTmp + (m_ColWidth(L) - picCoords(4)) / 2
                                End If
                                On Error Resume Next
                                objOutput.PaintPicture mvarPictureMatrix(lRow, L), picCoords(1), picCoords(2), , , , , picCoords(3), picCoords(4)
                                On Error GoTo 0
                            End If
                            
                            objOutput.ScaleMode = vbPixels
                            objOutput.Line (rctDraw.Left - lPixXOffset, rctDraw.Top)-(rctDraw.Right + lPixXOffset, rctDraw.Bottom), , B
                            objOutput.ScaleMode = iSM
                            pDoVCenter objOutput.hDC, rctDraw, mvarTextMatrix(lRow, L)
                            DrawText objOutput.hDC, mvarTextMatrix(lRow, L), -1, rctDraw, c_DTDefFmt Or mvarColAlignment(L)
                            If lHeaderMergeRow(lRow) <> -1 Then
                                lHeaderMergeRow(lRow) = -1
                                rctDraw.Left = lTmp
                            End If
                        End If
                        rctDraw.Top = rctDraw.Bottom
                    End If
                    LastTop = LastTop + sngNormalRowH
                Next
'                objOutput.Line (sngTmp, sngYStart)-(sngTmp, LastTop)
                rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
                sngTmp = sngTmp + m_ColWidth(L)
            Next
            'objOutput.Line (sngSW, sngYStart)-(sngSW, LastTop)
            If mvarHasFooter And (LastRow >= mvarRows - 1) Then
                objOutput.DrawWidth = mvarFooterLineThickness
                objOutput.Line (mvarMarginLeft, LastTop)-(sngSW, LastTop + sngFooterRowH), , B
                'objOutput.Line (mvarMarginLeft, sngYStart + sngHeaderRowH)-(sngSW, sngYStart )
                lTmp = rctDraw.Top
                rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY(sngHeaderRowH, iSM, vbPixels)
                rctDraw.Left = lMargPix + lPixXOffset
                sngTmp = mvarMarginLeft
                For L = 0 To mvarCols - 1
                    If Not (LastFont Is mvarFooterFont(L)) Then
                        Set LastFont = mvarFooterFont(L)
                        Set objOutput.Font = LastFont
                    End If
                    rctDraw.Right = rctDraw.Left + lArrCW(L) - 2 * lPixXOffset
                    rctDraw.Top = lTmp
                    
                    pDoVCenter objOutput.hDC, rctDraw, mvarFooterText(L)
                    DrawText objOutput.hDC, mvarFooterText(L), -1, rctDraw, c_DTDefFmt Or mvarColAlignment(L)
                    rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
                    
                    If L > 0 Then  'We don't need to draw the first line
                        objOutput.Line (sngTmp, LastTop)-(sngTmp, LastTop + sngFooterRowH)
                    End If
                    sngTmp = sngTmp + m_ColWidth(L)
                Next
                LastTop = LastTop + sngFooterRowH
'            Else
'                objOutput.Line (mvarMarginLeft, LastTop)-(sngSW, LastTop)
            End If
        End If
        objOutput.CurrentY = LastTop
        If LastRow < mvarRows - 1 Then
            bFlag = False
            bMerged(0) = False
            RaiseEvent NewPage(objOutput, bFlag, bMerged(0), LastRow)
            'bMerged(0) is the cancel flag here !
            If bMerged(0) Then Exit Do
            If Not bFlag Then
                objOutput.CurrentY = mvarMarginTop
            End If
            PgNum = PgNum + 1
        Else
            Exit Do
        End If
        ReDim lHeaderMergeRow(0 To mvarCols - 1)
    Loop
    Set objOutput.Font = OldFont
End Sub

Public Property Let CellXOffset(ByVal vData As Single)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.CellXOffset = 5
    mvarCellXOffset = vData
End Property


Public Property Get CellXOffset() As Single
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.CellXOffset
    CellXOffset = mvarCellXOffset
End Property



Public Property Let CellYOffset(ByVal vData As Single)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.CellYOffset = 5
    mvarCellYOffset = vData
End Property


Public Property Get CellYOffset() As Single
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.CellYOffset
    CellYOffset = mvarCellYOffset
End Property



Public Property Let FooterLineThickness(ByVal vData As Integer)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.FooterLineThickness = 5
    mvarFooterLineThickness = vData
End Property


Public Property Get FooterLineThickness() As Integer
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.FooterLineThickness
    FooterLineThickness = mvarFooterLineThickness
End Property



Public Property Let HeaderLineThickness(ByVal vData As Integer)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.HeaderLineThickness = 5
    mvarHeaderLineThickness = vData
End Property


Public Property Get HeaderLineThickness() As Integer
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.HeaderLineThickness
    HeaderLineThickness = mvarHeaderLineThickness
End Property



Public Property Let LineThickness(ByVal vData As Integer)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.LineThickness = 5
    mvarLineThickness = vData
End Property


Public Property Get LineThickness() As Integer
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.LineThickness
    LineThickness = mvarLineThickness
End Property



'Public Property Let MarginRight(ByVal vData As Single)
''wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
''Syntax: X.MarginRight = 5
'    mvarMarginRight = vData
'End Property


'Public Property Get MarginRight() As Single
''wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
''Syntax: Debug.Print X.MarginRight
'    MarginRight = mvarMarginRight
'End Property



Public Property Let MarginLeft(ByVal vData As Single)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.MarginLeft = 5
    mvarMarginLeft = vData
End Property


Public Property Get MarginLeft() As Single
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.MarginLeft
    MarginLeft = mvarMarginLeft
End Property



Public Property Let MarginBottom(ByVal vData As Single)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.MarginBottom = 5
    mvarMarginBottom = vData
End Property


Public Property Get MarginBottom() As Single
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.MarginBottom
    MarginBottom = mvarMarginBottom
End Property



Public Property Let MarginTop(ByVal vData As Single)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.MarginTop = 5
    mvarMarginTop = vData
End Property


Public Property Get MarginTop() As Single
'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
'Syntax: Debug.Print X.MarginTop
    MarginTop = mvarMarginTop
End Property



Public Property Let FooterText(ByVal Col As Long, ByVal vData As String)
'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
'Syntax: X.FooterText = 5
    If Col < 0 Then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -