METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... Local nDeltaLen, lDraw := .F. Default xRow := nRowPos, lDrawCell := .T. ... If lDrawCell lDraw := TSDrawCell( hWnd, ; // 1 ... !(::lCellBrw .and. nJ != ::nCell) ) // 32 Invert color Else lDraw := .T. EndIf nStartCol += aColSizes[ nJ ] + nDeltaLen ... METHOD DrawSuper() CLASS TSBrowse Local nI, nJ, nBegin, nStartCol, l3DLook, nClrFore, lAdjBmp, nClrTo, lOpaque, nClrBack, hFont, cHeading, hBitMap, ; lMulti, nHAlign, nVAlign, nWidth, nS, nLineStyle, lBrush, ; nMaxWidth := ::nWidth() , ; aColSizes := AClone( ::aColSizes ), ; // use local copies for speed aSuperHead := AClone( ::aSuperHead ), ; nHeightHead := ::nHeightHead, ; nHeightFoot := ::nHeightFoot, ; nHeightSuper := ::nHeightSuper, ; nHeightSpecHd:= ::nHeightSpecHd Local hWnd := ::hWnd, ; hDC := ::hDc, ; nClrText := ::nClrText, ; nClrPane := ::nClrPane, ; nClrLine := ::nClrLine Local l3DText, nClr3dL, nClr3dS Local oCol, aDrawCols If Empty( ::aColumns ) Return Nil EndIf ::DrawSelect( , .F. ) ; aDrawCols := ::aDrawCols // create current draw columns array nClrFore := ::nForeSupHdGet( 1, aSuperHead ) nClrBack := ::nBackSupHdGet( 1, aSuperHead ) l3DLook := aSuperHead[ 1, 6 ] hFont := ::hFontSupHdGet( 1, aSuperHead ) nLineStyle := aSuperHead[ 1, 10 ] nClrLine := aSuperHead[ 1, 11 ] nBegin := nI := 1 While nI <= Len( aSuperHead ) If aSuperHead[ nI, 1 ] > nBegin nJ := aSuperHead[ nI, 1 ] - 1 ASize( aSuperHead, Len( aSuperHead ) + 1 ) AIns( aSuperHead, nI ) aSuperHead[ nI ] := { nBegin, nJ, "", nClrFore, nClrBack, l3DLook , hFont, .F., .F., nLineStyle, ; nClrLine, 1, 1, .F. } nBegin := nJ + 1 Else nBegin := aSuperHead[ nI++, 2 ] + 1 EndIf EndDo nI := Len( aSuperHead ) nClrFore := ::nForeSupHdGet( nI, aSuperHead ) nClrBack := ::nBackSupHdGet( nI, aSuperHead ) l3DLook := aSuperHead[ nI, 6 ] hFont := ::hFontSupHdGet( nI, aSuperHead ) nLineStyle := aSuperHead[ nI, 10 ] nClrLine := aSuperHead[ nI, 11 ] If ( nI := ATail( aSuperHead )[ 2 ] ) < Len( ::aColumns ) AAdd( aSuperHead, { nI + 1, Len( ::aColumns ), "", nClrFore, nClrBack, l3DLook, hFont, .F., .F., nLineStyle, ; nClrLine, 1, 1, .F. } ) EndIf nStartCol := nWidth := 0 If ::lAdjColumn nS := 1 FOR nI := 1 TO Len( ::aColumns ) oCol := ::aColumns[ nI ] If oCol:nEditWidth > 0 aColSizes[ nI ] := oCol:nEditWidth - iif( ::lNoVScroll, GetVScrollBarWidth(), 0 ) Else aColSizes[ nI ] := oCol:nWidth EndIf NEXT For nI := 1 To Len( aSuperHead ) For nJ := aSuperHead[ nI, 1 ] To aSuperHead[ nI, 2 ] If nI == 1 .and. AScan(aDrawCols, nJ) > 0 nWidth += aColSizes[ nJ ] EndIf Next Next Else nBegin := If( ::nColPos == ::nFreeze + 1, ::nColPos - ::nFreeze, ::nColPos ) For nS := 1 To Len( aSuperHead ) If nBegin >= aSuperHead[ nS, 1 ] .and. nBegin <= aSuperHead[ nS, 2 ] Do Case Case nBegin > aSuperHead[ nS, 1 ] .and. nS == 1 For nJ := aSuperHead[ nS, 1 ] To nBegin - 1 nStartCol -= ::aColSizes[ nJ ] Next For nJ := aSuperHead[ nS, 1 ] To aSuperHead[ nS, 2 ] nWidth += aColSizes[ nJ ] Next Case nBegin > aSuperHead[ nS, 1 ] .and. nS > 1 For nJ := 1 To ::nFreeze nStartCol += ::aColSizes[ nJ ] Next For nJ := nBegin To aSuperHead[ nS, 2 ] nWidth += aColSizes[ nJ ] Next OtherWise If nBegin > 1 For nJ := 1 To ::nFreeze nStartCol += ::aColSizes[ nJ ] Next EndIf For nJ := aSuperHead[ nS, 1 ] To aSuperHead[ nS, 2 ] nWidth += aColSizes[ nJ ] Next EndCase Exit EndIf Next EndIf For nI := nS To Len( aSuperHead ) + 1 If nStartCol > nMaxWidth Exit EndIf If nI <= Len( aSuperHead ) nClrFore := ::nForeSupHdGet( nI, aSuperHead ) nClrBack := ::nBackSupHdGet( nI, aSuperHead ) lBrush := Valtype( nClrBack ) == "O" If ValType( nClrBack ) == "A" nClrBack := ::nClrBackArr( nClrBack, nI ) nClrTo := nClrBack[ 2 ] nClrBack := nClrBack[ 1 ] Else nClrTo := nClrBack EndIf cHeading := ::cTextSupHdGet( nI, aSuperHead ) lMulti := Valtype( cHeading ) == "C" .and. At( Chr( 13 ), cHeading ) > 0 l3DLook := aSuperHead[ nI, 6 ] hFont := ::hFontSupHdGet( nI, aSuperHead ) hBitMap := aSuperHead[ nI, 8 ] hBitMap := If( ValType( hBitMap ) == "B", Eval( hBitMap ), hBitMap ) hBitMap := If( ValType( hBitMap ) == "O", Eval( ::bBitMapH, hBitMap ), hBitMap ) lAdjBmp := aSuperHead[ nI, 9 ] nLineStyle := aSuperHead[ nI, 10 ] nClrLine := aSuperHead[ nI, 11 ] nHAlign := aSuperHead[ nI, 12 ] nVAlign := aSuperHead[ nI, 13 ] lOpaque := aSuperHead[ nI, 14 ] Default hBitMap := 0, ; lOpaque := .T. lOpaque := ! lOpaque Else cHeading := "" nWidth := ::nPhantom hBitmap := 0 lOpaque := .F. nClrBack := If( ::nPhantom == -2, nClrPane, Atail( aSuperHead)[ 5 ] ) nClrBack := ::GetValProp( nClrBack, nClrBack, nI ) If ValType( nClrBack ) == "A" nClrBack := ::nClrBackArr( nClrBack, nI ) nClrTo := nClrBack[ 2 ] nClrBack := nClrBack[ 1 ] Else nClrTo := nClrBack endif EndIf If nI <= Len( aSuperHead ) .and. ::aColumns[ aSuperHead[ nI, 1 ] ]:l3DTextHead != Nil l3DText := ::aColumns[ aSuperHead[ nI, 1 ] ]:l3DTextHead nClr3dL := ::aColumns[ aSuperHead[ nI, 1 ] ]:nClr3DLHead nClr3dS := ::aColumns[ aSuperHead[ nI, 1 ] ]:nClr3DSHead nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nStartCol ), nClr3dL ) nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nStartCol ), nClr3dS ) Else l3DText := nClr3dL := nClr3dS := Nil EndIf TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 nWidth, ; // 5 cHeading, ; // 6 nHAlign, ; // 7 nClrFore, ; // 8 nClrBack, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightHead, ; // 12 l3DLook, ; // 13 nLineStyle, ; // 14 nClrLine, ; // 15 3, ; // 16 1=Header 2=Footer 3=Super nHeightHead, ; // 17 nHeightFoot, ; // 18 nHeightSuper, ; // 19 nHeightSpecHd, ; // 20 lAdjBmp, ; // 21 lMulTi, ; // 22 Multiline text nVAlign, ; // 23 0, ; // 24 nVertLine nClrTo, ; // 25 lOpaque, ; // 26 If( lBrush, ; nClrBack:hBrush, 0 ), ; // 27 l3DText, ; // 28 3D text nClr3dL, ; // 29 3D text light color nClr3dS ) // 30 3D text shadow color nStartCol += nWidth nWidth := 0 If nI < Len( aSuperHead ) For nJ := aSuperHead[ nI + 1, 1 ] To aSuperHead[ nI + 1, 2 ] If ::lAdjColumn If AScan(aDrawCols, nJ) > 0 nWidth += aColSizes[ nJ ] EndIf Else nWidth += aColSizes[ nJ ] EndIf Next EndIf Next Return Nil ...
|