Re: Browse Owner-Drawing
Posted: Fri Oct 31, 2014 7:05 pm
by RDalzell
Roger,
This is what you had helped me with before...
*---
STATIC FUNCTION ViolationScan(aGetList)
LOCAL GetList[0], GetOptions, oBrowse, aPres, aBrowPres, aSort, aSort2[8], cSeek := Space(25), cSeek0 := cSeek, cIndex := "CodeDx04", oGet, ;
bOwnerDraw, cHighlight := Space(10), oFontNormal, oFontLarge, oBitmap, bColorBlock
SELECT CodeDtl
SET ORDER TO 4
DbGoTop()
cPartial := Space(30)
aPres := DC_BrowPres()
aSort := DC_BrowseSort()
aBrowPres := {{ XBP_PP_COL_HA_FGCLR, GRA_CLR_BLACK }, /* Header FG Color */ ;
{ XBP_PP_COL_HA_BGCLR, GRA_CLR_PALEGRAY }, /* Header BG Color */ ;
{ XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep */ ;
{ XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }, /* Col Sep */ ;
{ XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, /* Row FG Color */ ;
{ XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE }, /* Row BG Color */ ;
{ XBP_PP_COL_DA_ROWHEIGHT, 11 }, /* Row Height */ ;
{ XBP_PP_COL_DA_CELLHEIGHT, 11 }, /* Cell Height */ ;
{ XBP_PP_COL_HA_HEIGHT, 12 }, /* Header Height */ ;
{ XBP_PP_COL_DA_HILITE_FGCLR, GRA_CLR_BLUE }, /* Cursor FG Color */ ;
{ XBP_PP_COL_DA_HILITE_BGCLR, GRA_CLR_PALEGRAY}, /* Cursor BG Color */ ;
{ XBP_PP_HILITE_FGCLR, GRA_CLR_WHITE }, /* Hilite FG color */ ;
{ XBP_PP_HILITE_BGCLR, GRA_CLR_BLUE }, /* Hilite BG color */ ;
{ XBP_PP_COL_FA_FGCLR, GRA_CLR_WHITE }, /* Footer FG Color */ ;
{ XBP_PP_COL_FA_BGCLR, GRA_CLR_PALEGRAY }, /* Footer BG Color */ ;
{ XBP_PP_COL_DA_COMPOUNDNAME,'9.Arial'}, /* Font */ ;
{ XBP_PP_COL_HA_COMPOUNDNAME,'9.Helv'}, /* Font */ ;
{ XBP_PP_COL_FA_HEIGHT, 12 }, /* Footer Height */ ;
{ XBP_PP_COL_HA_ALIGNMENT,XBPALIGN_HCENTER} /* Header Alignment */ ;
}
oFontLarge := XbpFont():new():create('12.Lucida Console Bold')
oBitmap := XbpBitmap():new()
oBitmap:transparentClr := GraMakeRGBColor({192,192,192})
oBitmap:create()
oBitmap:loadFile('\Express\Bitmaps\Forwards.Bmp')
bOwnerDraw := {|a,b| DrawCellHighlighted(a,b,AllTrim(cSeek0), oBrowse, oFontLarge, oBitmap) }
bColorBlock := {|| IIF(Dc_GetColArray(11,oBrowse) =.f., IIF(oBrowse:arrayElement%2 == 0, {Nil, GraMakeRGBColor({220,220,255})}, {Nil, GRA_CLR_WHITE}),{Nil,GRA_CLR_YELLOW}) }
aSort2[1] := GRA_CLR_RED // Sort Selected Color (Foreground) // PC CAW 01-13-05
aSort2[2] := GRA_CLR_PALEGRAY // Sort Selected Color (Background)
aSort2[3] := GRA_CLR_BLACK // Sort Unselectable Color (Foreground)
aSort2[4] := GRA_CLR_PALEGRAY // Sort Unselectable Color (Background)
// aSort2[5] := Nil // No Longer Utilized
// aSort2[6] := Nil // No Longer Utilized
aSort2[7] := GRA_CLR_BLACK // Sort Unselected Color (Foreground) - Able to select
aSort2[8] := GRA_CLR_PALEGRAY // Sort Unselected Color (Background) - Able to select
DC_BrowPres(aBrowPres) // save browse presentation factors
DC_BrowseSort(aSort2)
@ 1.00, 1.00 DCSAY "Find: " GET cSeek0 SAYRIGHT Picture '@!' ;
GETOBJECT oGet ;
GETID "cSeek0" ;
GETTOOLTIP 'Example:; "*PARK" for All Violations; Containing the Letters "PARK"' ;
KEYBLOCK {|a,b,o| o:getData(), oBrowse:invalidateRect(), CodeDtl->(_620Seek(a, b, o, oBrowse, GetList, cIndex, @cSeek0)) }
@ 1.25,40.00 DCSAY {|| cPartial } SAYSIZE 25 PARENT oBrowse COLOR GRA_CLR_RED
@ 1.25,67.50 DCSAY '(enter an "*" before the desired search text to locate a Violation Descriptions containing that text)' ;
SAYSIZE 85 PARENT oBrowse COLOR GRA_CLR_BLUE
@ 2.50, 1.00 DCBROWSE oBrowse ALIAS 'CodeDtl' SIZE 50,20 ;
FIT ;
SCOPE ;
NOHSCROLL ;
HEADLINES 2 ;
NOSOFTTRACK ;
USEVISUALSTYLE ;
PRESENTATION DC_BrowPres() ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SORTUPBITMAP BITMAP_RD_UP_RED ;
SORTDOWNBITMAP BITMAP_RD_DOWN_RED ;
SORTSCOLOR GRA_CLR_RED, GRA_CLR_PALEGRAY ;
SORTUCOLOR GRA_CLR_BLACK, GRA_CLR_PALEGRAY ;
ZEBRA aEvenRowColor,aOddRowColor ;
SUBCLASS "DC_XbpBrowseOwnerDraw()" ;
ITEMMARKED {|| oBrowse:invalidateRect() } ;
ITEMSELECTED {|a,b,o| DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList) } ;
EVAL {|o| o:ownerDrawBlock := bOwnerDraw, SetAppFocus(DC_GetObject(GetList,"cSeek0")) }
DCBROWSECOL DATA {|| CodeDtl->V_Alter } HEADER 'Violation;Number' WIDTH 7 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX12') } LEFTBUTTON
DCBROWSECOL DATA {|| CodeDtl->V_Type } HEADER 'Violation;Type' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX01') } LEFTBUTTON
DCBROWSECOL DATA {|| TRANSFORM(CodeDtl->V_Chapter,"9999.999") } HEADER 'Chapter;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX02') } LEFTBUTTON
DCBROWSECOL DATA {|| TRANSFORM(CodeDtl->V_Section,"99999") } HEADER 'Section;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX14') } LEFTBUTTON
DCBROWSECOL DATA {|| CodeDtl->V_ParaGrph } HEADER 'Paragraph;Number' WIDTH 6 PARENT oBrowse ;
ALIGN 5 ; // Align Center [horizontal & vertical]
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX15') } LEFTBUTTON
DCBROWSECOL DATA {|| CodeDtl->Ucr } HEADER 'UCR;Code' WIDTH 6 PARENT oBrowse ;
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX16') } LEFTBUTTON
DCBROWSECOL DATA {|| Trim(CodeDtl->V_Desc) } HEADER ';Violation Description' WIDTH 25 PARENT oBrowse ;
EVAL {|o| o:drawMode := XBP_DRAW_OWNER } ;
PRESENTATION {{XBP_PP_COL_HA_COMPOUNDNAME, '9.Helv Bold'}} ;
SORT {|| OrdSetFocus('CODEDX04') } LEFTBUTTON _DEFAULT OrdSetFocus() == 'CODEDX04'
DCBROWSECOL DATA {|| OffenseType(CodeDtl->ParkType) } HEADER 'Citation;Type' WIDTH 7 PARENT oBrowse
DCBROWSECOL DATA {|| FineClass(CodeDtl->V_FineType, CodeDtl->V_Class) } HEADER 'Fine;Classification' WIDTH 7 PARENT oBrowse
DCBROWSECOL DATA {|| VMIN(CodeDtl->V_FineType, CodeDtl->V_Class, CodeDtl->V_Min) } HEADER 'Minimum;Fine' WIDTH 5 PARENT oBrowse
DCBROWSECOL DATA {|| VMAX(CodeDtl->V_FineType, CodeDtl->V_Class, CodeDtl->V_Max) } HEADER 'Maximum;Fine' WIDTH 5 PARENT oBrowse
DCBROWSECOL DATA {|| DeptDesc(CodeDtl->V_Dept) } HEADER ';Department' WIDTH 12 PARENT oBrowse
DCREAD GUI TO lStatus ;
FIT ;
MODAL ;
ADDBUTTONS ;
EVAL { || SetAppFocus(oBrowse) } ;
TITLE 'Select The Desired Violation'
IF lStatus
nViolation := CodeDtl->V_Alter
cVdesc := AllTrim(CodeDtl->V_Desc)
DC_GetRefresh(aGetList)
SetAppFocus(DC_GetObject(aGetList,"Get_cOffense"))
ELSE
SetAppFocus(DC_GetObject(aGetList,"Get_nViolation"))
ENDIF
DC_BrowPres(aPres) // save browse presentation factors
DC_BrowseSort(aSort)
RETURN nViolation
*---
CLASS DC_XbpBrowseOwnerDraw FROM DC_XbpBrowse
PROTECTED: ; EXPORTED:
VAR ownerDrawBlock
INLINE METHOD destroy ; ::DC_XbpBrowse:destroy() ; RETURN Self
INLINE METHOD Init( a,b,c,d,e,f,g) ; ::DC_XbpBrowse:init(a,b,c,d,e,f,g) ; ::drawMode := XBP_DRAW_OWNER ; RETURN Self
INLINE METHOD Create( a,b,c,d,e,f,g) ; ::DC_XbpBrowse:create( a,b,c,d,e,f,g) ; RETURN Self
INLINE METHOD CustomDrawCell( a,b ) ; RETURN Eval(::ownerdrawBlock, a,b)
ENDCLASS
*---
STATIC FUNCTION DrawCellHighlighted( oPS, aInfo, cHighLight, oBrowse, oFontLarge, oBitmap )
LOCAL xData, nPos, nRow, aRect, oCell := aInfo[5], oColumn
IF oCell:isDerivedFrom('DC_MultiLineCellGroup') // It's a header
RETURN .t.
ENDIF
xData := UPPER(DC_XtoC(aInfo[ XBP_DRAWINFO_AREA ]:getCell( aInfo[ XBP_DRAWINFO_ITEM ] )))
nRow := aInfo[1]
oColumn := oCell:setParent()
// IF nRow == oBrowse:rowPos
// oPS:setFont(oFontLarge)
// ENDIF
IF SubStr(cHighLight,1,1) == "*"
cHighLight := SubStr(cHighLight,2)
ENDIF
IF xData <> Nil .AND. ( nPos := At( cHighlight, xData ) ) > 0
oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] == XBP_DRAWSTATE_SELECTED, ;
XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )
IF nRow == oBrowse:rowPos
oPS:setColor( GRA_CLR_DARKPINK )
ELSE
oPS:setColor( GRA_CLR_RED )
ENDIF
IF nPos == 1
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], { aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, cHighlight )
ELSE
aRect := GraQueryTextBox( oPS, Left( xData, nPos - 1 ) )
GraCaptionStr( oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ] + aRect[ 3, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ] }, ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ;
cHighlight )
ENDIF
RETURN .f.
ELSE
oPS:setColor( IIF( aInfo[ XBP_DRAWINFO_STATE ] == XBP_DRAWSTATE_SELECTED, ;
XBPSYSCLR_MENUHILITE, XBPSYSCLR_WINDOWSTATICTEXT ) )
// IF nRow == oBrowse:rowPos
// oPS:setColor( GRA_CLR_BLUE )
// ENDIF
IF nRow == oBrowse:rowPos .AND. oColumn == oBrowse:getColumn(1)
aRect := GraQueryTextBox( oPS, Left( xData, nPos - 1 ) )
oBitmap:draw(oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ] + aRect[ 3, 1 ], ;
aInfo[ XBP_DRAWINFO_RECT, 2 ] } )
GraCaptionStr( oPS,{ aInfo[ XBP_DRAWINFO_RECT, 1 ] + oBitmap:xSize + 2, ;
aInfo[ XBP_DRAWINFO_RECT, 2 ] }, ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ] + oBitmap:xSize + 2, ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )
ELSE
GraCaptionStr( oPS, aInfo[ XBP_DRAWINFO_RECT ], ;
{ aInfo[ XBP_DRAWINFO_RECT, 3 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )
ENDIF
RETURN .f.
ENDIF
RETURN .t.