📄 clstableprint.cls
字号:
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 + -