home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Mileage_Lo2070316112007.psc / clsTablePrint.cls < prev    next >
Text File  |  2007-06-09  |  42KB  |  1,049 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsTablePrint"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. Option Explicit
  17. '############################################
  18. '# Grid printing class                      #
  19. '# Author: Jonas Wolz (jwolzvb@yahoo.de)    #
  20. '#------------------------------------------#
  21. '# You are free to use this class in your   #
  22. '# own projects (without paying me a fee).  #
  23. '# If you redistribute this class in        #
  24. '# source form a notification would be      #
  25. '# appreciated.                             #
  26. '# This project comes with absolutely NO    #
  27. '# warranty ! Use it at your own risk !!!   #
  28. '# Please note: I've created the raw        #
  29. '# structure of this class with the class   #
  30. '# builder utility (I didn't want to write  #
  31. '# all those Property Gets and Lets). So    #
  32. '# the German comments inside most of those #
  33. '# Property Get/Lets (and near private      #
  34. '# variables) are only the utility's        #
  35. '# standard comments. (Don't get confused   #
  36. '# by them)                                 #
  37. '############################################
  38.  
  39. Private Type RECT
  40.         Left As Long
  41.         Top As Long
  42.         Right As Long
  43.         Bottom As Long
  44. End Type
  45.  
  46. Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
  47. Private Const DT_LEFT = &H0
  48. Private Const DT_CENTER = &H1
  49. Private Const DT_NOPREFIX = &H800
  50. Private Const DT_RIGHT = &H2
  51. Private Const DT_SINGLELINE = &H20
  52. Private Const DT_VCENTER = &H4
  53. Private Const DT_CALCRECT = &H400
  54. Private Const DT_WORDBREAK = &H10
  55. Private Const c_DTDefFmt = DT_NOPREFIX 'Or DT_SINGLELINE Or DT_VCENTER
  56.  
  57.  
  58. Public Enum EAlignment
  59.     eRight = DT_RIGHT
  60.     eLeft = DT_LEFT
  61.     eCenter = DT_CENTER
  62. End Enum
  63.  
  64. 'lokale Variable(n) zum Zuweisen der Eigenschaft(en)
  65. Private mvarCols As Long 'lokale Kopie
  66. 'lokale Variable(n) zum Zuweisen der Eigenschaft(en)
  67. Private mvarRows As Long 'lokale Kopie
  68. Private mvarTextMatrix() As String 'lokale Kopie
  69. 'Private mvarColFont() As StdFont 'lokale Kopie
  70. Private mvarHeaderText() As String 'lokale Kopie
  71. Private mvarHeaderFont() As StdFont 'lokale Kopie
  72. Private mvarColAlignment() As EAlignment 'lokale Kopie
  73. Private mvarHasFooter As Boolean 'lokale Kopie
  74. Private mvarFooterFont() As StdFont 'lokale Kopie
  75. Private mvarFooterText() As String 'lokale Kopie
  76. Private mvarMarginTop As Single 'lokale Kopie
  77. Private mvarMarginBottom As Single 'lokale Kopie
  78. Private mvarMarginLeft As Single 'lokale Kopie
  79. 'Private mvarMarginRight As Single 'lokale Kopie
  80. Private mvarLineThickness As Integer 'lokale Kopie
  81. Private mvarHeaderLineThickness As Integer 'lokale Kopie
  82. Private mvarFooterLineThickness As Integer 'lokale Kopie
  83. Private mvarCellYOffset As Single 'lokale Kopie
  84. Private mvarCellXOffset As Single 'lokale Kopie
  85. Private m_ColWidth() As Single
  86. Private m_MergeCol() As Boolean
  87. Private m_FontMatrix() As StdFont
  88. Private mvarHeaderRows As Long 'lokale Kopie
  89. Private mvarPictureMatrix() As IPictureDisp 'lokale Kopie
  90. Private m_MergeHeaderCol() As Boolean
  91. Private m_MergeHeaderRow() As Boolean
  92. Private m_MergeRow() As Boolean
  93.  
  94. 'Um dieses Ereignis auszul÷sen, verwenden Sie RaiseEvent mit der folgenden Syntax:
  95. 'RaiseEvent NewPage[(arg1, arg2, ... , argn)]
  96. Public Event NewPage(objOutput As Object, TopMarginAlreadySet As Boolean, bCancel As Boolean, ByVal lLastPrintedRow As Long)
  97.  
  98. Public PrintHeaderOnEveryPage As Boolean
  99. Public CenterMergedHeader As Boolean
  100. Public RowHeightMin As Single, HeaderRowHeightMin As Single, FooterRowHeightMin As Single
  101. Public ResizeCellsToPicHeight As Boolean
  102.  
  103. Function CalcNumRowsPerPage(objOutput As Object, Optional ByVal bWithHeader = True, Optional ByVal bWithFooter)
  104.     Dim sngNormalRowH As Single, sngHeaderRowH As Single, sngFooterRowH As Single
  105.     Dim LastFont As StdFont, sngTmp As Single, lRow As Long, L As Long
  106.     
  107.     If IsMissing(bWithFooter) Then
  108.         bWithFooter = mvarHasFooter
  109.     End If
  110.     
  111.     sngNormalRowH = RowHeightMin - 2 * mvarCellYOffset
  112.     sngHeaderRowH = HeaderRowHeightMin - 2 * mvarCellYOffset
  113.     sngFooterRowH = FooterRowHeightMin - 2 * mvarCellYOffset
  114.     
  115.     For L = 0 To mvarCols - 1
  116.         For lRow = 0 To mvarRows - 1
  117.             If Not (LastFont Is m_FontMatrix(lRow, L)) Then
  118.                 Set LastFont = m_FontMatrix(lRow, L)
  119.                 Set objOutput.Font = LastFont
  120.             End If
  121.             sngTmp = objOutput.TextHeight(mvarTextMatrix(lRow, L))
  122.             If sngTmp > sngNormalRowH Then sngNormalRowH = sngTmp
  123.             If ResizeCellsToPicHeight Then
  124.                 If Not (mvarPictureMatrix(lRow, L) Is Nothing) Then
  125.                     sngTmp = objOutput.ScaleY(mvarPictureMatrix(lRow, L).Height, vbHimetric, objOutput.ScaleMode)
  126.                     If sngTmp > sngNormalRowH Then sngNormalRowH = sngTmp
  127.                 End If
  128.             End If
  129.         Next
  130.         For lRow = 0 To mvarHeaderRows - 1
  131.             If Not (LastFont Is mvarHeaderFont(lRow, L)) Then
  132.                 Set LastFont = mvarHeaderFont(lRow, L)
  133.                 Set objOutput.Font = LastFont
  134.             End If
  135.             sngTmp = objOutput.TextHeight(mvarHeaderText(lRow, L))
  136.             If sngTmp > sngHeaderRowH Then sngHeaderRowH = sngTmp
  137.         Next
  138.         If mvarHasFooter Then
  139.             If Not (LastFont Is mvarFooterFont(L)) Then
  140.                 Set LastFont = mvarFooterFont(L)
  141.                 Set objOutput.Font = LastFont
  142.             End If
  143.             sngTmp = objOutput.TextHeight(mvarFooterText(L))
  144.             If sngTmp > sngFooterRowH Then sngFooterRowH = sngTmp
  145.         End If
  146.     Next
  147.     
  148.     sngNormalRowH = sngNormalRowH + 2 * mvarCellYOffset
  149.     sngHeaderRowH = sngHeaderRowH + 2 * mvarCellYOffset
  150.     If sngFooterRowH > 0 Then sngFooterRowH = sngFooterRowH + 2 * mvarCellYOffset
  151.     
  152.     sngTmp = (objOutput.ScaleHeight - mvarMarginBottom - mvarMarginTop)
  153.     'CalcNumRowsPerPage = Int((objOutput.ScaleHeight - sngHeaderRowH - sngFooterRowH - mvarMarginBottom - mvarMarginTop) / sngNormalRowH)
  154.     If bWithHeader Then
  155.         'CalcNumRowsPerPage = CalcNumRowsPerPage + 1
  156.         sngTmp = sngTmp - sngHeaderRowH * mvarHeaderRows
  157.     End If
  158.     If bWithFooter Then
  159.         'CalcNumRowsPerPage = CalcNumRowsPerPage + 1
  160.         sngTmp = sngTmp - sngFooterRowH
  161.     End If
  162.     CalcNumRowsPerPage = Int(sngTmp / sngNormalRowH)
  163. End Function
  164.  
  165. Private Sub pDoVCenter(ByVal hDC As Long, rcDraw As RECT, sText As String)
  166.     Dim rcTmp As RECT, lRet As Long
  167.     lRet = DrawText(hDC, sText, -1, rcTmp, c_DTDefFmt Or DT_CALCRECT)
  168.     rcDraw.Top = (rcDraw.Bottom - rcDraw.Top - lRet) \ 2 + rcDraw.Top
  169. End Sub
  170.  
  171.  
  172. Public Property Set PictureMatrix(ByVal Row As Long, ByVal Col As Long, ByVal vData As IPictureDisp)
  173.     Dim L As Long, L2 As Long
  174.     If (Row < 0) And (Col < 0) Then
  175.         For L = 0 To mvarRows - 1
  176.             For L2 = 0 To mvarCols - 1
  177.                 Set mvarPictureMatrix(L, L2) = vData
  178.             Next
  179.         Next
  180.     ElseIf (Row < 0) Then
  181.         For L = 0 To mvarRows - 1
  182.             Set mvarPictureMatrix(L, Col) = vData
  183.         Next
  184.     ElseIf (Col < 0) Then
  185.         For L = 0 To mvarCols - 1
  186.             Set mvarPictureMatrix(Row, L) = vData
  187.         Next
  188.     Else
  189.         Set mvarPictureMatrix(Row, Col) = vData
  190.     End If
  191.  
  192. End Property
  193.  
  194.  
  195. Public Property Get PictureMatrix(ByVal Row As Long, ByVal Col As Long) As IPictureDisp
  196. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  197. 'Syntax: Debug.Print X.PictureMatrix
  198.     Set PictureMatrix = mvarPictureMatrix(Row, Col)
  199. End Property
  200.  
  201.  
  202.  
  203. Public Property Let HeaderRows(ByVal vData As Long)
  204. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  205. 'Syntax: X.HeaderRows = 5
  206.     If vData < 1 Then
  207.         Err.Raise 380
  208.     End If
  209.     mvarHeaderRows = vData
  210.     pRedimArrays
  211. End Property
  212.  
  213.  
  214. Public Property Get HeaderRows() As Long
  215. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  216. 'Syntax: Debug.Print X.HeaderRows
  217.     HeaderRows = mvarHeaderRows
  218. End Property
  219.  
  220.  
  221.  
  222. Public Sub DrawTable(objOutput As Object, Optional lRowToStart As Long = 0, Optional lStartPage As Long = 1)
  223.     Dim rctDraw As RECT, LastRow As Long, PgNum As Long
  224.     Dim sngNormalRowH As Single, sngHeaderRowH As Single, sngFooterRowH As Single
  225.     Dim sngSW As Single, L As Long, sngTmp As Single, bFlag As Boolean
  226.     Dim sngYStart As Single, iSM As Integer, lArrCW() As Long, lMargPix As Long
  227.     Dim lRow As Long, lRH As Long, StartRow As Long, LastTop As Single
  228.     Dim lPixXOffset As Long, OldFont As StdFont, bMerged() As Boolean, LastFont As StdFont
  229.     Dim picCoords(1 To 4) As Single, lPixYOffset As Long, lTmp As Long
  230.     Dim lHeaderMergeRow() As Long, bHeaderFlag() As Boolean
  231.     
  232.     'sngSW = objOutput.ScaleWidth - mvarMarginRight
  233.     
  234.     Set OldFont = objOutput.Font
  235.     Set LastFont = OldFont
  236.     ReDim lArrCW(0 To mvarCols - 1)
  237.     ReDim lHeaderMergeRow(0 To mvarCols - 1) ' Below again (Loop)
  238.     ReDim bHeaderFlag(0 To mvarHeaderRows - 1)
  239.     ReDim bMerged(0 To mvarHeaderRows - 1)
  240.     
  241.      'Print the Title and Date
  242.     Form2.picTarget.CurrentX = 3200
  243.     Form2.picTarget.CurrentY = 300
  244.     Form2.picTarget.FontSize = 12
  245.     Form2.picTarget.FontBold = True
  246.     Form2.picTarget.Print "Daily Business and Personel Mileage Log"
  247.     Form2.picTarget.Print
  248.     Form2.picTarget.CurrentX = 3200
  249.     Form2.picTarget.Print "___________________________________"
  250.     Form2.picTarget.CurrentX = 5000
  251.     Form2.picTarget.CurrentY = Form2.picTarget.CurrentY - 300
  252.     Form2.picTarget.Print Form1.txtMonYear.Text
  253.     Form2.picTarget.FontBold = False
  254.     Form2.picTarget.FontSize = 10
  255.     Form2.picTarget.CurrentX = 5000
  256.     Form2.picTarget.CurrentY = 1200
  257.     Form2.picTarget.Print "Month and Year"
  258.     
  259.     Form2.picTarget.FontBold = True
  260.     Form2.picTarget.CurrentY = 10700
  261.     Form2.picTarget.CurrentX = 4000: Form2.picTarget.CurrentY = Form2.picTarget.CurrentY + 100
  262.     Form2.picTarget.Print "Monthly Totals:"
  263.     Form2.picTarget.CurrentX = 6000: Form2.picTarget.CurrentY = Form2.picTarget.CurrentY - 230
  264.     Form2.picTarget.Print Form1.Label2.Caption
  265.     Form2.picTarget.CurrentX = 7200: Form2.picTarget.CurrentY = Form2.picTarget.CurrentY - 240
  266.     Form2.picTarget.Print Form1.Label3.Caption
  267.     Form2.picTarget.CurrentX = 8600: Form2.picTarget.CurrentY = Form2.picTarget.CurrentY - 230
  268.     Form2.picTarget.Print Form1.Label4.Caption
  269.     Form2.picTarget.FontBold = False
  270.     
  271.     iSM = objOutput.ScaleMode
  272.     sngSW = mvarMarginLeft
  273.     Form2.picTarget.CurrentY = 2000
  274.     sngNormalRowH = RowHeightMin - 2 * mvarCellYOffset
  275.     sngHeaderRowH = HeaderRowHeightMin - 2 * mvarCellYOffset
  276.     sngFooterRowH = FooterRowHeightMin - 2 * mvarCellYOffset
  277.    
  278.     For L = 0 To mvarCols - 1
  279.         For lRow = 0 To mvarRows - 1
  280.             If Not (LastFont Is m_FontMatrix(lRow, L)) Then
  281.                 Set LastFont = m_FontMatrix(lRow, L)
  282.                 Set objOutput.Font = LastFont
  283.             End If
  284.             sngTmp = objOutput.TextHeight(mvarTextMatrix(lRow, L))
  285.             If sngTmp > sngNormalRowH Then sngNormalRowH = sngTmp
  286.             If ResizeCellsToPicHeight Then
  287.                 If Not (mvarPictureMatrix(lRow, L) Is Nothing) Then
  288.                     sngTmp = objOutput.ScaleY(mvarPictureMatrix(lRow, L).Height, vbHimetric, iSM)
  289.                     If sngTmp > sngNormalRowH Then sngNormalRowH = sngTmp
  290.                 End If
  291.             End If
  292.         Next
  293.         For lRow = 0 To mvarHeaderRows - 1
  294.             If Not (LastFont Is mvarHeaderFont(lRow, L)) Then
  295.                 Set LastFont = mvarHeaderFont(lRow, L)
  296.                 Set objOutput.Font = LastFont
  297.             End If
  298.             sngTmp = objOutput.TextHeight(mvarHeaderText(lRow, L))
  299.             If sngTmp > sngHeaderRowH Then sngHeaderRowH = sngTmp
  300.         Next
  301.         If mvarHasFooter Then
  302.             If Not (LastFont Is mvarFooterFont(L)) Then
  303.                 Set LastFont = mvarFooterFont(L)
  304.                 Set objOutput.Font = LastFont
  305.             End If
  306.             sngTmp = objOutput.TextHeight(mvarFooterText(L))
  307.             If sngTmp > sngFooterRowH Then sngFooterRowH = sngTmp
  308.         End If
  309.         sngSW = sngSW + m_ColWidth(L)
  310.         lArrCW(L) = objOutput.ScaleX(m_ColWidth(L), iSM, vbPixels)
  311.         lHeaderMergeRow(L) = -1
  312.     Next
  313.     lMargPix = objOutput.ScaleX(mvarMarginLeft, iSM, vbPixels)
  314.     lPixXOffset = objOutput.ScaleX(mvarCellXOffset, iSM, vbPixels)
  315.     lPixYOffset = objOutput.ScaleY(mvarCellYOffset, iSM, vbPixels)
  316.     
  317.     sngNormalRowH = sngNormalRowH + 2 * mvarCellYOffset
  318.     sngHeaderRowH = sngHeaderRowH + 2 * mvarCellYOffset
  319.     If sngFooterRowH > 0 Then sngFooterRowH = sngFooterRowH + 2 * mvarCellYOffset
  320.     
  321.     'objOutput.CurrentX = mvarMarginLeft
  322.     objOutput.FillStyle = vbFSTransparent
  323.     PgNum = lStartPage
  324.     LastRow = lRowToStart - 1
  325.     Do
  326.         sngTmp = 0
  327.         sngTmp = (objOutput.ScaleHeight - objOutput.CurrentY - mvarMarginBottom)
  328.         'L = Int((objOutput.ScaleHeight - objOutput.CurrentY - sngHeaderRowH - sngFooterRowH - mvarMarginBottom) / sngNormalRowH)
  329.         If sngTmp >= sngNormalRowH Then
  330.  
  331.             If LastRow >= mvarRows Then
  332.                 'LastRow = LastRow + 1 'We don't need the footer !
  333.                 sngTmp = sngTmp - sngFooterRowH
  334.             End If
  335.             If PrintHeaderOnEveryPage Or (PgNum > 1) Then
  336.                 'LastRow = LastRow + 1
  337.                 sngTmp = sngTmp - sngHeaderRowH * mvarHeaderRows
  338.             End If
  339.             StartRow = LastRow + 1
  340.             L = Int(sngTmp / sngNormalRowH)
  341.             LastRow = LastRow + L
  342.             If LastRow > mvarRows - 1 Then
  343.                 LastRow = mvarRows - 1
  344.             End If
  345.             
  346.             sngYStart = objOutput.CurrentY
  347.             LastTop = sngYStart
  348.             If PrintHeaderOnEveryPage Or (PgNum = 1) Then
  349.                 objOutput.DrawWidth = mvarHeaderLineThickness
  350.                 For lRow = 0 To mvarHeaderRows - 1
  351. '                    rctDraw.Bottom = rctDraw.Bottom + objOutput.ScaleY(sngHeaderRowH, iSM, vbPixels)
  352.                     'objOutput.Line (mvarMarginLeft, sngYStart + lRow * sngHeaderRowH)-(sngSW, sngYStart + sngHeaderRowH * (lRow + 1)), , B
  353.                     'objOutput.Line (mvarMarginLeft, sngYStart + sngHeaderRowH)-(sngSW, sngYStart )
  354. '                    rctDraw.Top = objOutput.ScaleY(sngYStart + lRow * sngHeaderRowH, iSM, vbPixels)
  355.                     rctDraw.Left = lMargPix + lPixXOffset
  356.                     rctDraw.Right = lMargPix - lPixXOffset
  357.                     sngTmp = mvarMarginLeft
  358.                     bHeaderFlag(lRow) = False
  359.                     bMerged(lRow) = False
  360.                     For L = 0 To mvarCols - 1
  361.                         If m_MergeHeaderCol(L) Then
  362.                             If lRow < mvarHeaderRows - 1 Then
  363.                                 If mvarHeaderText(lRow, L) = mvarHeaderText(lRow + 1, L) Then
  364.                                     bFlag = False
  365.                                     If lHeaderMergeRow(L) = -1 Then lHeaderMergeRow(L) = lRow
  366.                                 Else
  367.                                     bFlag = True
  368.                                 End If
  369.                             Else
  370.                                 bFlag = True
  371.                             End If
  372.                         Else
  373.                             lHeaderMergeRow(L) = -1
  374.                             bFlag = True
  375.                         End If
  376.                         rctDraw.Right = rctDraw.Right + lArrCW(L) '- 2 * lPixXOffset
  377.                         If bFlag Then
  378.                             If lHeaderMergeRow(L) = -1 Then
  379.                                 rctDraw.Top = objOutput.ScaleY(sngYStart + lRow * sngHeaderRowH, iSM, vbPixels)
  380.                                 rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY(sngHeaderRowH, iSM, vbPixels)
  381.                             Else
  382.                                 rctDraw.Top = objOutput.ScaleY(sngYStart + lHeaderMergeRow(L) * sngHeaderRowH, iSM, vbPixels)
  383.                                 rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY((lRow - lHeaderMergeRow(L) + 1) * sngHeaderRowH, iSM, vbPixels)
  384.                                 lHeaderMergeRow(lRow) = -1
  385.                             End If
  386.                             If Not (LastFont Is mvarHeaderFont(lRow, L)) Then
  387.                                 Set LastFont = mvarHeaderFont(lRow, L)
  388.                                 Set objOutput.Font = LastFont
  389.                             End If
  390.                             If m_MergeHeaderRow(lRow) Then
  391.                                 If L < mvarCols - 1 Then
  392.                                     If mvarHeaderText(lRow, L) = mvarHeaderText(lRow, L + 1) Then
  393.                                         bHeaderFlag(lRow) = False
  394.                                         bMerged(lRow) = True
  395.                                     Else
  396.                                         If bMerged(lRow) And bHeaderFlag(lRow) Then bMerged(lRow) = False
  397.                                         bHeaderFlag(lRow) = True
  398.                                     End If
  399.                                 Else
  400.                                     bHeaderFlag(lRow) = True
  401.                                 End If
  402.                             Else
  403.                                 bHeaderFlag(lRow) = True
  404.                             End If
  405.                             If bHeaderFlag(lRow) Then
  406.                                 objOutput.ScaleMode = vbPixels
  407.                                 objOutput.Line (rctDraw.Left - lPixXOffset, rctDraw.Top)-(rctDraw.Right + lPixXOffset, rctDraw.Bottom), , B
  408.                                 objOutput.ScaleMode = iSM
  409.                                 
  410.                                 pDoVCenter objOutput.hDC, rctDraw, mvarHeaderText(lRow, L)
  411.                                 DrawText objOutput.hDC, mvarHeaderText(lRow, L), -1, rctDraw, c_DTDefFmt Or IIf((bMerged(lRow) And CenterMergedHeader), DT_CENTER, mvarColAlignment(L))
  412.                             End If
  413.                         End If
  414.                         sngTmp = sngTmp + m_ColWidth(L)
  415.                         If bHeaderFlag(lRow) Then rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
  416.                     Next
  417.                 Next
  418.                 LastTop = LastTop + sngHeaderRowH * mvarHeaderRows
  419.             End If
  420.             lRH = objOutput.ScaleY(sngNormalRowH, iSM, vbPixels)
  421.             objOutput.DrawWidth = mvarLineThickness
  422.             ReDim lHeaderMergeRow(0 To mvarRows - 1)
  423.             For L = 0 To UBound(lHeaderMergeRow())
  424.                 lHeaderMergeRow(L) = -1
  425. '                bHeaderFlag(L) = False
  426.             Next
  427.             sngYStart = LastTop
  428.             rctDraw.Left = lMargPix + lPixXOffset
  429.             sngTmp = mvarMarginLeft
  430.             For L = 0 To mvarCols - 1
  431. '                If Not (objOutput.Font Is mvarColFont(L)) Then
  432. '                    Set objOutput.Font = mvarColFont(L)
  433. '                End If
  434.                 rctDraw.Top = objOutput.ScaleY(sngYStart, iSM, vbPixels)
  435.                 LastTop = sngYStart
  436.                 rctDraw.Right = rctDraw.Left + lArrCW(L) - 2 * lPixXOffset
  437.                 rctDraw.Bottom = rctDraw.Top
  438.                 bFlag = True
  439.                 For lRow = StartRow To LastRow
  440.                     If Not (LastFont Is m_FontMatrix(lRow, L)) Then
  441.                         Set LastFont = m_FontMatrix(lRow, L)
  442.                         Set objOutput.Font = LastFont
  443.                     End If
  444.                     rctDraw.Bottom = rctDraw.Bottom + lRH
  445. '                    If bFlag Then objOutput.Line (sngTmp, LastTop)-(sngTmp + m_ColWidth(L), LastTop)
  446.                     If m_MergeCol(L) Then
  447.                         If lRow < LastRow Then
  448.                             If mvarTextMatrix(lRow, L) = mvarTextMatrix(lRow + 1, L) Then
  449.                                 bFlag = False
  450.                             Else
  451.                                 bFlag = True
  452.                             End If
  453.                         Else
  454.                             bFlag = True
  455.                         End If
  456.                     Else
  457.                         bFlag = True
  458.                     End If
  459.                     If bFlag Then
  460.                         If m_MergeRow(lRow) Then
  461.                             If L < mvarCols - 1 Then
  462.                                 If mvarTextMatrix(lRow, L) = mvarTextMatrix(lRow, L + 1) Then
  463.                                     'Now ColPos:
  464.                                     If lHeaderMergeRow(lRow) = -1 Then lHeaderMergeRow(lRow) = rctDraw.Left 'L
  465.                                     bMerged(0) = False
  466.                                 Else
  467.                                     bMerged(0) = True
  468.                                 End If
  469.                             Else
  470.                                 bMerged(0) = True
  471.                             End If
  472.                         Else
  473.                             bMerged(0) = True
  474.                             lHeaderMergeRow(lRow) = -1
  475.                         End If
  476.  
  477.                         If bMerged(0) Then
  478.                             If lHeaderMergeRow(lRow) <> -1 Then
  479.                                 lTmp = rctDraw.Left
  480.                                 rctDraw.Left = lHeaderMergeRow(lRow)
  481.                             End If
  482.                             If Not (mvarPictureMatrix(lRow, L) Is Nothing) Then
  483.                                 picCoords(3) = objOutput.ScaleX(mvarPictureMatrix(lRow, L).Width, vbHimetric, iSM)
  484.                                 picCoords(4) = objOutput.ScaleY(mvarPictureMatrix(lRow, L).Height, vbHimetric, iSM)
  485.                                 If picCoords(4) > (m_ColWidth(L) - 2 * mvarCellXOffset) Then picCoords(4) = (m_ColWidth(L) - 2 * mvarCellXOffset)
  486.                                 picCoords(2) = (objOutput.ScaleY(rctDraw.Bottom - rctDraw.Top, vbPixels, iSM) - picCoords(4)) / 2
  487.                                 If picCoords(2) < 0 Then
  488.                                     picCoords(3) = picCoords(3) + 2 * picCoords(2)
  489.                                     picCoords(2) = 0
  490.                                 End If
  491.                                 picCoords(2) = picCoords(2) + LastTop
  492.                                 If mvarColAlignment(L) = eLeft Then
  493.                                     picCoords(1) = objOutput.ScaleX(rctDraw.Left, vbPixels, iSM)
  494.                                 ElseIf mvarColAlignment(L) = eRight Then
  495.                                     picCoords(1) = sngTmp + (m_ColWidth(L) - mvarCellXOffset - picCoords(4))
  496.                                 ElseIf mvarColAlignment(L) = eCenter Then
  497.                                     picCoords(1) = sngTmp + (m_ColWidth(L) - picCoords(4)) / 2
  498.                                 End If
  499.                                 On Error Resume Next
  500.                                 objOutput.PaintPicture mvarPictureMatrix(lRow, L), picCoords(1), picCoords(2), , , , , picCoords(3), picCoords(4)
  501.                                 On Error GoTo 0
  502.                             End If
  503.                             
  504.                             objOutput.ScaleMode = vbPixels
  505.                             objOutput.Line (rctDraw.Left - lPixXOffset, rctDraw.Top)-(rctDraw.Right + lPixXOffset, rctDraw.Bottom), , B
  506.                             objOutput.ScaleMode = iSM
  507.                             pDoVCenter objOutput.hDC, rctDraw, mvarTextMatrix(lRow, L)
  508.                             DrawText objOutput.hDC, mvarTextMatrix(lRow, L), -1, rctDraw, c_DTDefFmt Or mvarColAlignment(L)
  509.                             If lHeaderMergeRow(lRow) <> -1 Then
  510.                                 lHeaderMergeRow(lRow) = -1
  511.                                 rctDraw.Left = lTmp
  512.                             End If
  513.                         End If
  514.                         rctDraw.Top = rctDraw.Bottom
  515.                     End If
  516.                     LastTop = LastTop + sngNormalRowH
  517.                 Next
  518. '                objOutput.Line (sngTmp, sngYStart)-(sngTmp, LastTop)
  519.                 rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
  520.                 sngTmp = sngTmp + m_ColWidth(L)
  521.             Next
  522.             'objOutput.Line (sngSW, sngYStart)-(sngSW, LastTop)
  523.             If mvarHasFooter And (LastRow >= mvarRows - 1) Then
  524.                 objOutput.DrawWidth = mvarFooterLineThickness
  525.                 objOutput.Line (mvarMarginLeft, LastTop)-(sngSW, LastTop + sngFooterRowH), , B
  526.                 'objOutput.Line (mvarMarginLeft, sngYStart + sngHeaderRowH)-(sngSW, sngYStart )
  527.                 lTmp = rctDraw.Top
  528.                 rctDraw.Bottom = rctDraw.Top + objOutput.ScaleY(sngHeaderRowH, iSM, vbPixels)
  529.                 rctDraw.Left = lMargPix + lPixXOffset
  530.                 sngTmp = mvarMarginLeft
  531.                 For L = 0 To mvarCols - 1
  532.                     If Not (LastFont Is mvarFooterFont(L)) Then
  533.                         Set LastFont = mvarFooterFont(L)
  534.                         Set objOutput.Font = LastFont
  535.                     End If
  536.                     rctDraw.Right = rctDraw.Left + lArrCW(L) - 2 * lPixXOffset
  537.                     rctDraw.Top = lTmp
  538.                     
  539.                     pDoVCenter objOutput.hDC, rctDraw, mvarFooterText(L)
  540.                     DrawText objOutput.hDC, mvarFooterText(L), -1, rctDraw, c_DTDefFmt Or mvarColAlignment(L)
  541.                     rctDraw.Left = rctDraw.Right + 2 * lPixXOffset
  542.                     
  543.                     If L > 0 Then  'We don't need to draw the first line
  544.                         objOutput.Line (sngTmp, LastTop)-(sngTmp, LastTop + sngFooterRowH)
  545.                     End If
  546.                     sngTmp = sngTmp + m_ColWidth(L)
  547.                 Next
  548.                 LastTop = LastTop + sngFooterRowH
  549. '            Else
  550. '                objOutput.Line (mvarMarginLeft, LastTop)-(sngSW, LastTop)
  551.             End If
  552.         End If
  553.         objOutput.CurrentY = LastTop
  554.         If LastRow < mvarRows - 1 Then
  555.             bFlag = False
  556.             bMerged(0) = False
  557.             RaiseEvent NewPage(objOutput, bFlag, bMerged(0), LastRow)
  558.             'bMerged(0) is the cancel flag here !
  559.             If bMerged(0) Then Exit Do
  560.             If Not bFlag Then
  561.                 objOutput.CurrentY = mvarMarginTop
  562.             End If
  563.             PgNum = PgNum + 1
  564.         Else
  565.             Exit Do
  566.         End If
  567.         ReDim lHeaderMergeRow(0 To mvarCols - 1)
  568.     Loop
  569.     
  570.     Set objOutput.Font = OldFont
  571.     
  572. End Sub
  573.  
  574. Public Property Let CellXOffset(ByVal vData As Single)
  575. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  576. 'Syntax: X.CellXOffset = 5
  577.     mvarCellXOffset = vData
  578. End Property
  579.  
  580.  
  581. Public Property Get CellXOffset() As Single
  582. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  583. 'Syntax: Debug.Print X.CellXOffset
  584.     CellXOffset = mvarCellXOffset
  585. End Property
  586.  
  587.  
  588.  
  589. Public Property Let CellYOffset(ByVal vData As Single)
  590. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  591. 'Syntax: X.CellYOffset = 5
  592.     mvarCellYOffset = vData
  593. End Property
  594.  
  595.  
  596. Public Property Get CellYOffset() As Single
  597. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  598. 'Syntax: Debug.Print X.CellYOffset
  599.     CellYOffset = mvarCellYOffset
  600. End Property
  601.  
  602.  
  603.  
  604. Public Property Let FooterLineThickness(ByVal vData As Integer)
  605. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  606. 'Syntax: X.FooterLineThickness = 5
  607.     mvarFooterLineThickness = vData
  608. End Property
  609.  
  610.  
  611. Public Property Get FooterLineThickness() As Integer
  612. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  613. 'Syntax: Debug.Print X.FooterLineThickness
  614.     FooterLineThickness = mvarFooterLineThickness
  615. End Property
  616.  
  617.  
  618.  
  619. Public Property Let HeaderLineThickness(ByVal vData As Integer)
  620. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  621. 'Syntax: X.HeaderLineThickness = 5
  622.     mvarHeaderLineThickness = vData
  623. End Property
  624.  
  625.  
  626. Public Property Get HeaderLineThickness() As Integer
  627. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  628. 'Syntax: Debug.Print X.HeaderLineThickness
  629.     HeaderLineThickness = mvarHeaderLineThickness
  630. End Property
  631.  
  632.  
  633.  
  634. Public Property Let LineThickness(ByVal vData As Integer)
  635. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  636. 'Syntax: X.LineThickness = 5
  637.     mvarLineThickness = vData
  638. End Property
  639.  
  640.  
  641. Public Property Get LineThickness() As Integer
  642. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  643. 'Syntax: Debug.Print X.LineThickness
  644.     LineThickness = mvarLineThickness
  645. End Property
  646.  
  647.  
  648.  
  649. 'Public Property Let MarginRight(ByVal vData As Single)
  650. ''wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  651. ''Syntax: X.MarginRight = 5
  652. '    mvarMarginRight = vData
  653. 'End Property
  654.  
  655.  
  656. 'Public Property Get MarginRight() As Single
  657. ''wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  658. ''Syntax: Debug.Print X.MarginRight
  659. '    MarginRight = mvarMarginRight
  660. 'End Property
  661.  
  662.  
  663.  
  664. Public Property Let MarginLeft(ByVal vData As Single)
  665. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  666. 'Syntax: X.MarginLeft = 5
  667.     mvarMarginLeft = vData
  668. End Property
  669.  
  670.  
  671. Public Property Get MarginLeft() As Single
  672. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  673. 'Syntax: Debug.Print X.MarginLeft
  674.     MarginLeft = mvarMarginLeft
  675. End Property
  676.  
  677.  
  678.  
  679. Public Property Let MarginBottom(ByVal vData As Single)
  680. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  681. 'Syntax: X.MarginBottom = 5
  682.     mvarMarginBottom = vData
  683. End Property
  684.  
  685.  
  686. Public Property Get MarginBottom() As Single
  687. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  688. 'Syntax: Debug.Print X.MarginBottom
  689.     MarginBottom = mvarMarginBottom
  690. End Property
  691.  
  692.  
  693.  
  694. Public Property Let MarginTop(ByVal vData As Single)
  695. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  696. 'Syntax: X.MarginTop = 5
  697.     mvarMarginTop = vData
  698. End Property
  699.  
  700.  
  701. Public Property Get MarginTop() As Single
  702. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  703. 'Syntax: Debug.Print X.MarginTop
  704.     MarginTop = mvarMarginTop
  705. End Property
  706.  
  707.  
  708.  
  709. Public Property Let FooterText(ByVal Col As Long, ByVal vData As String)
  710. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  711. 'Syntax: X.FooterText = 5
  712.     If Col < 0 Then
  713.         pLetAllArrItems mvarFooterText, vData
  714.     Else
  715.         mvarFooterText(Col) = vData
  716.     End If
  717. End Property
  718.  
  719.  
  720. Public Property Get FooterText(ByVal Col As Long) As String
  721. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  722. 'Syntax: Debug.Print X.FooterText
  723.     FooterText = mvarFooterText(Col)
  724. End Property
  725.  
  726.  
  727.  
  728. Public Property Set FooterFont(ByVal Col As Long, ByVal vData As StdFont)
  729. 'wird beim Zuweisen eines Objekts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  730. 'Syntax: Set x.FooterFont = Form1
  731.     If Col < 0 Then
  732.         pSetAllArrItems mvarFooterFont, vData
  733.     Else
  734.         Set mvarFooterFont(Col) = vData
  735.     End If
  736. End Property
  737.  
  738.  
  739. Public Property Get FooterFont(ByVal Col As Long) As StdFont
  740. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  741. 'Syntax: Debug.Print X.FooterFont
  742.     Set FooterFont = mvarFooterFont(Col)
  743. End Property
  744.  
  745.  
  746.  
  747. Public Property Let HasFooter(ByVal vData As Boolean)
  748. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  749. 'Syntax: X.HasFooter = 5
  750.     mvarHasFooter = vData
  751. End Property
  752.  
  753.  
  754. Public Property Get HasFooter() As Boolean
  755. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  756. 'Syntax: Debug.Print X.HasFooter
  757.     HasFooter = mvarHasFooter
  758. End Property
  759.  
  760.  
  761.  
  762. Public Property Let ColAlignment(ByVal Col As Long, ByVal vData As EAlignment)
  763. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  764. 'Syntax: X.ColAlignment = 5
  765.     If Col < 0 Then
  766.         pLetAllArrItems mvarColAlignment, vData
  767.     Else
  768.         mvarColAlignment(Col) = vData
  769.     End If
  770. End Property
  771.  
  772.  
  773. Public Property Get ColAlignment(ByVal Col As Long) As EAlignment
  774. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  775. 'Syntax: Debug.Print X.ColAlignment
  776.     ColAlignment = mvarColAlignment(Col)
  777. End Property
  778.  
  779.  
  780.  
  781. Public Property Set HeaderFont(ByVal Row As Long, ByVal Col As Long, ByVal vData As Object)
  782. 'wird beim Zuweisen eines Objekts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  783. 'Syntax: Set x.HeaderFont = Form1
  784.     Dim L As Long, L2 As Long
  785.     If (Row < 0) And (Col < 0) Then
  786.         For L = 0 To mvarHeaderRows - 1
  787.             For L2 = 0 To mvarCols - 1
  788.                 Set mvarHeaderFont(L, L2) = vData
  789.             Next
  790.         Next
  791.     ElseIf (Row < 0) Then
  792.         For L = 0 To mvarHeaderRows - 1
  793.             Set mvarHeaderFont(L, Col) = vData
  794.         Next
  795.     ElseIf (Col < 0) Then
  796.         For L = 0 To mvarCols - 1
  797.             Set mvarHeaderFont(Row, L) = vData
  798.         Next
  799.     Else
  800.         Set mvarHeaderFont(Row, Col) = vData
  801.     End If
  802. End Property
  803.  
  804.  
  805. Public Property Get HeaderFont(ByVal Row As Long, ByVal Col As Long) As StdFont
  806. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  807. 'Syntax: Debug.Print X.HeaderFont
  808.     Set HeaderFont = mvarHeaderFont(Row, Col)
  809. End Property
  810.  
  811.  
  812.  
  813. Public Property Let HeaderText(ByVal Row As Long, ByVal Col As Long, ByVal vData As String)
  814. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  815. 'Syntax: X.HeaderText = 5
  816.     Dim L As Long, L2 As Long
  817.     If (Row < 0) And (Col < 0) Then
  818.         For L = 0 To mvarHeaderRows - 1
  819.             For L2 = 0 To mvarCols - 1
  820.                 mvarHeaderText(L, L2) = vData
  821.             Next
  822.         Next
  823.     ElseIf (Row < 0) Then
  824.         For L = 0 To mvarHeaderRows - 1
  825.             mvarHeaderText(L, Col) = vData
  826.         Next
  827.     ElseIf (Col < 0) Then
  828.         For L = 0 To mvarCols - 1
  829.             mvarHeaderText(Row, L) = vData
  830.         Next
  831.     Else
  832.         mvarHeaderText(Row, Col) = vData
  833.     End If
  834.  
  835. End Property
  836.  
  837.  
  838. Public Property Get HeaderText(ByVal Row As Long, ByVal Col As Long) As String
  839. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  840. 'Syntax: Debug.Print X.HeaderText
  841.     HeaderText = mvarHeaderText(Row, Col)
  842. End Property
  843.  
  844.  
  845.  
  846. Public Property Set ColFont(ByVal Col As Long, ByVal vData As StdFont)
  847. '    If Col < 0 Then
  848. '        pSetAllArrItems mvarColFont(), vData
  849. '    Else
  850. '        Set mvarColFont(Col) = vData
  851. '    End If
  852.     Set FontMatrix(-1, Col) = vData
  853. End Property
  854.  
  855.  
  856. Public Property Get ColFont(ByVal Col As Long) As StdFont
  857. '    Set ColFont(Col) = mvarColFont(Col)
  858.     Set ColFont = FontMatrix(0, Col)
  859. End Property
  860. Public Property Get MergeHeaderRow(ByVal Row As Long) As Boolean
  861.     MergeHeaderRow = m_MergeHeaderRow(Row)
  862. End Property
  863. Public Property Let MergeHeaderRow(ByVal Row As Long, ByVal NewV As Boolean)
  864.     m_MergeHeaderRow(Row) = NewV
  865. End Property
  866. Public Property Get MergeHeaderCol(ByVal Col As Long) As Boolean
  867.     MergeHeaderCol = m_MergeHeaderCol(Col)
  868. End Property
  869. Public Property Let MergeHeaderCol(ByVal Col As Long, ByVal NewV As Boolean)
  870.     m_MergeHeaderCol(Col) = NewV
  871. End Property
  872. Public Property Get MergeRow(ByVal Row As Long) As Boolean
  873.     MergeRow = m_MergeRow(Row)
  874. End Property
  875. Public Property Let MergeRow(ByVal Row As Long, ByVal NewV As Boolean)
  876.     m_MergeRow(Row) = NewV
  877. End Property
  878. Public Property Get MergeCol(ByVal Col As Long) As Boolean
  879.     MergeCol = m_MergeCol(Col)
  880. End Property
  881. Public Property Let MergeCol(ByVal Col As Long, ByVal NewV As Boolean)
  882.     m_MergeCol(Col) = NewV
  883. End Property
  884. Private Sub pLetAllArrItems(vArr As Variant, vValue As Variant)
  885.     Dim L As Long
  886.     
  887.     For L = LBound(vArr) To UBound(vArr)
  888.         vArr(L) = vValue
  889.     Next
  890. End Sub
  891. Private Sub pSetAllArrItems(vArr As Variant, objValue As Object)
  892.     Dim L As Long
  893.     
  894.     For L = LBound(vArr) To UBound(vArr)
  895.         Set vArr(L) = objValue
  896.     Next
  897. End Sub
  898. Private Sub pRedimArrays()
  899.     If mvarRows > 0 Then
  900.         ReDim mvarTextMatrix(0 To mvarRows - 1, 0 To mvarCols - 1)
  901.         ReDim m_FontMatrix(0 To mvarRows - 1, 0 To mvarCols - 1)
  902.         ReDim mvarPictureMatrix(0 To mvarRows - 1, 0 To mvarCols - 1)
  903.     Else
  904.         Erase mvarTextMatrix
  905.         Erase m_FontMatrix
  906.         Erase mvarPictureMatrix
  907.     End If
  908.     'ReDim mvarColFont(0 To mvarCols - 1)
  909.     ReDim mvarColAlignment(0 To mvarCols - 1)
  910.     ReDim mvarHeaderText(0 To mvarHeaderRows - 1, 0 To mvarCols - 1)
  911.     ReDim mvarHeaderFont(0 To mvarHeaderRows - 1, 0 To mvarCols - 1)
  912.     ReDim m_ColWidth(0 To mvarCols - 1)
  913.     ReDim m_MergeCol(0 To mvarCols - 1)
  914.     ReDim m_MergeHeaderCol(0 To mvarCols - 1)
  915.     ReDim m_MergeRow(0 To mvarRows - 1)
  916.     ReDim m_MergeHeaderRow(0 To mvarHeaderRows - 1)
  917.     
  918.     If mvarHasFooter Then
  919.         ReDim mvarFooterText(0 To mvarCols - 1)
  920.         ReDim mvarFooterFont(0 To mvarCols - 1)
  921.     Else
  922.         Erase mvarFooterText
  923.         Erase mvarFooterFont
  924.     End If
  925.     
  926.     pLetAllArrItems m_ColWidth, 15
  927. End Sub
  928.  
  929. Public Property Let TextMatrix(ByVal Row As Long, ByVal Col As Long, ByVal vData As String)
  930. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  931. 'Syntax: X.TextMatrix = 5
  932.     Dim L As Long, L2 As Long
  933.     If (Row < 0) And (Col < 0) Then
  934.         For L = 0 To mvarRows - 1
  935.             For L2 = 0 To mvarCols - 1
  936.                 mvarTextMatrix(L, L2) = vData
  937.             Next
  938.         Next
  939.     ElseIf (Row < 0) Then
  940.         For L = 0 To mvarRows - 1
  941.             mvarTextMatrix(L, Col) = vData
  942.         Next
  943.     ElseIf (Col < 0) Then
  944.         For L = 0 To mvarCols - 1
  945.             mvarTextMatrix(Row, L) = vData
  946.         Next
  947.     Else
  948.         mvarTextMatrix(Row, Col) = vData
  949.     End If
  950. End Property
  951.  
  952.  
  953. Public Property Get TextMatrix(ByVal Row As Long, ByVal Col As Long) As String
  954. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  955. 'Syntax: Debug.Print X.TextMatrix
  956.     TextMatrix = mvarTextMatrix(Row, Col)
  957. End Property
  958.  
  959. Public Property Set FontMatrix(ByVal Row As Long, ByVal Col As Long, ByVal vData As StdFont)
  960.     Dim L As Long, L2 As Long
  961.     If (Row < 0) And (Col < 0) Then
  962.         For L = 0 To mvarRows - 1
  963.             For L2 = 0 To mvarCols - 1
  964.                 Set m_FontMatrix(L, L2) = vData
  965.             Next
  966.         Next
  967.     ElseIf (Row < 0) Then
  968.         For L = 0 To mvarRows - 1
  969.             Set m_FontMatrix(L, Col) = vData
  970.         Next
  971.     ElseIf (Col < 0) Then
  972.         For L = 0 To mvarCols - 1
  973.             Set m_FontMatrix(Row, L) = vData
  974.         Next
  975.     Else
  976.         Set m_FontMatrix(Row, Col) = vData
  977.     End If
  978. End Property
  979.  
  980.  
  981. Public Property Get FontMatrix(ByVal Row As Long, ByVal Col As Long) As StdFont
  982.     Set FontMatrix = m_FontMatrix(Row, Col)
  983. End Property
  984.  
  985. Public Property Let Rows(ByVal vData As Long)
  986. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  987. 'Syntax: X.Rows = 5
  988.     If vData < 0 Then
  989.         Err.Raise 380
  990.     End If
  991.     mvarRows = vData
  992.     pRedimArrays
  993. End Property
  994.  
  995.  
  996. Public Property Get Rows() As Long
  997. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  998. 'Syntax: Debug.Print X.Rows
  999.     Rows = mvarRows
  1000. End Property
  1001.  
  1002.  
  1003.  
  1004.  
  1005. Public Property Let Cols(ByVal vData As Long)
  1006. 'wird beim Zuweisen eines Werts in eine Eigenschaft auf der linken Seite der Gleichung, verwendet.
  1007. 'Syntax: X.Cols = 5
  1008.     If vData < 1 Then
  1009.         Err.Raise 380
  1010.     End If
  1011.     mvarCols = vData
  1012.     pRedimArrays
  1013. End Property
  1014.  
  1015.  
  1016. Public Property Get Cols() As Long
  1017. 'wird beim Ermitteln einer Eignschaft auf der rechten Seite der Gleichung verwendet.
  1018. 'Syntax: Debug.Print X.Cols
  1019.     Cols = mvarCols
  1020. End Property
  1021.  
  1022.  
  1023.  
  1024. Private Sub Class_Initialize()
  1025.     mvarRows = 5
  1026.     mvarCols = 2
  1027.     mvarHasFooter = True
  1028.     mvarLineThickness = 1
  1029.     mvarHeaderLineThickness = 1
  1030.     mvarFooterLineThickness = 1
  1031.     mvarHeaderRows = 1
  1032.     pRedimArrays
  1033. End Sub
  1034.  
  1035.  
  1036.  
  1037. Public Property Get ColWidth(ByVal Col As Long) As Single
  1038.     ColWidth = m_ColWidth(Col)
  1039. End Property
  1040.  
  1041. Public Property Let ColWidth(ByVal Col As Long, ByVal vNewValue As Single)
  1042.     If Col < 0 Then
  1043.         pLetAllArrItems m_ColWidth, vNewValue
  1044.     Else
  1045.         m_ColWidth(Col) = vNewValue
  1046.     End If
  1047. End Property
  1048.  
  1049.