>set safety OFF >set talk OFF >set exact ON >set near OFF >CLOSE TABLES all >CLOSE DATABASES all > >CREATE TABLE tpolicy(po_number c(25), po_status c(3), po_name c(20)) >APPEND BLANK >REPLACE po_name WITH "John T. Smith" >REPLACE po_number WITH "123456" >REPLACE po_status WITH "CXP" >APPEND BLANK >REPLACE po_name WITH "Sally A. Taylor" >REPLACE po_number WITH "789012" >REPLACE po_status WITH "NB" >APPEND BLANK >REPLACE po_name WITH "Craig Abernathy" >REPLACE po_number WITH "AAB123" >REPLACE po_status WITH "REN" >APPEND BLANK >REPLACE po_name WITH "Chris Johnson" >REPLACE po_number WITH "890123" >REPLACE po_status WITH "AP" >sele 0 >CREATE TABLE vstatus (st_status c(3), st_attrib c(16)) >APPEND BLANK >REPLACE st_status WITH "CXP" >REPLACE st_attrib WITH "RGB(255,128,192)" >APPEND BLANK >REPLACE st_status WITH "NB" >REPLACE st_attrib WITH "RGB(255,255,0)" >APPEND BLANK >REPLACE st_status WITH "AP" >REPLACE st_attrib WITH "RGB(128,255,255)" > >COPY TO ARRAY _vstatus FIELDS ST_STATUS, ST_ATTRIB FOR !EMPTY(ST_STATUS) > >SELE tpolicy >GO top > >oform = createobj('testform') > >oform.show() >oform.SetPolicyGridColor() >oform.refresh() > >read events > >CLOSE ALL >return > >DEFINE CLASS testform AS form > > > Top = 0 > Left = 0 > Height = 227 > Width = 461 > DoCreate = .T. > Caption = "Test Highlight Change " > *-- Specifies the grid's selected row background color. > highlightbackcolor = .F. > *-- Specifies whether the selected row is highlighted and also if it remains highlighted when user changes focus to another control on the form. > highlightstyle = .F. > gridbackcolor = .F. > gridforecolor = .F. > Name = "TESTFORM" > > > ADD OBJECT grid1 AS grid WITH ; > ColumnCount = 3, ; > Height = 200, ; > Left = 24, ; > Panel = 1, ; > RecordSource = "tpolicy", ; > RecordSourceType = 1, ; > Top = 12, ; > Width = 410, ; > Themes = .F., ; > HighlightBackColor = RGB(0,128,192), ; > HighlightForeColor = RGB(0,0,0), ; > SelectedItemBackColor = RGB(0,128,192), ; > SelectedItemForeColor = RGB(0,0,0), ; > HighlightStyle = 2, ; > Name = "grid1", ; > Column1.ControlSource = "tpolicy.po_number", ; > Column1.Width = 154, ; > Column1.Name = "Column1", ; > Column2.ControlSource = "tpolicy.po_status", ; > Column2.Name = "Column2",; > Column3.ControlSource = "tpolicy.po_name", ; > Column3.Width = 154, ; > Column3.Name = "Column3" > > > PROCEDURE setpolicygridcolor > WITH this.grid1 > FOR nColumnID = 1 TO .columncount > colorvalue = thisform.getpolicygridcolor(.recordsource,.columns(nColumnID).controlsource) > .Columns(nColumnID).dynamicbackcolor = colorvalue > ENDFOR > ENDWITH > ENDPROC > > > PROCEDURE getpolicygridcolor > LPARAMETERS tcolortable, tcolorfield > > EXTERNAL ARRAY _vstatus > EXTERNAL ARRAY _vtype > > defaultcolorvalue = "RGB(255,255,255)" > > IF EMPTY(tcolortable) .OR. TYPE('tcolortable') <> "C" .OR. !USED(tcolortable) > RETURN defaultcolorvalue > ENDIF > IF TYPE('tcolorfield') <> "C" .OR. EMPTY(tcolorfield) > RETURN defaultcolorvalue > ENDIF > IF AT('.',tcolorfield) > 0 > tcolorfield = SUBSTR(tcolorfield,AT('.',tcolorfield)+1) > ENDIF > > tcolorfield = UPPER(ALLTRIM(tcolorfield)) > > SELECT (tcolortable) > > DO CASE > CASE tcolorfield = "PO_SUSP" > RETURN "IIF(!EMPTY(po_status),IIF(ASCAN(_vstatus,po_status)>0,IIF(!EMPTY(_vstatus(ASCAN(_vstatus,po_status)+1)),EVALUATE(_vstatus(ASCAN(_vstatus,po_status)+1)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))" > CASE tcolorfield = "PO_STATUS" > RETURN "IIF(!EMPTY(po_status),IIF(ASCAN(_vstatus,po_status)>0,IIF(!EMPTY(_vstatus(ASCAN(_vstatus,po_status)+1)),EVALUATE(_vstatus(ASCAN(_vstatus,po_status)+1)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))" > CASE tcolorfield = "PO_TYPE" > RETURN "IIF(!EMPTY(po_type),IIF(ASCAN(_vtype,po_type)>0,IIF(!EMPTY(_vtype(ASCAN(_vtype,po_type)+2)),EVALUATE(_vtype(ASCAN(_vtype,po_type)+2)),RGB(255,255,255)),RGB(255,255,255)),RGB(255,255,255))" > ENDCASE > > RETURN defaultcolorvalue > ENDPROC > > > PROCEDURE highlight_row > THISFORM.LOCKSCREEN = .T. > > PRIVATE llsethighlight > llsethighlight = .F. > > WITH THISFORM.grid1 > > FOR lnColumn = 1 TO .COLUMNCOUNT > > PRIVATE loCurrentControl > STORE NULL TO loCurrentControl > FOR EACH loControl IN .COLUMNS(lnColumn).CONTROLS > IF loControl.NAME = loControl.PARENT.CURRENTCONTROL > loCurrentControl = loControl > ENDIF > ENDFOR > > IF TYPE("loCurrentControl") = "O" AND NOT ISNULL(loCurrentControl) > IF LOWER(loCurrentControl.BASECLASS) = "textbox" .OR. LOWER(loCurrentControl.BASECLASS) = "editbox" > IF PEMSTATUS(loCurrentControl, "BackColor", 5 ) && Some controls in the column (i.e. Image) may not have .BackColor Property > IF !EMPTY(.COLUMNS(lnColumn).DYNAMICBACKCOLOR) > loCurrentControl.BACKCOLOR = EVALUATE(.COLUMNS(lnColumn).DYNAMICBACKCOLOR) > IF loCurrentControl.BACKCOLOR = THISFORM.gridbackcolor > .Columns(lnColumn).Sparse = .t. > loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR > ELSE > .COLUMNS(lnColumn).SPARSE = .F. > llsethighlight = .T. && change the highlightstyle on the grid > ENDIF > ELSE > .Columns(lnColumn).Sparse = .t. > loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR > ENDIF > ENDIF > ENDIF > ENDIF > > ENDFOR > > IF llsethighlight > .HIGHLIGHTSTYLE = 0 && do not show the highlight - we emulate a highlight > ELSE > .HIGHLIGHTSTYLE = THISFORM.HIGHLIGHTSTYLE && set the highlight back to the default > ENDIF > > ENDWITH > > THISFORM.LOCKSCREEN = .F. > ENDPROC > > > PROCEDURE Destroy > DODEFAULT() > CLEAR EVENTS > ENDPROC > > > PROCEDURE Init > DODEFAULT() > WITH this.grid1 > thisform.highlightbackcolor = .highlightbackcolor > thisform.highlightstyle = .highlightstyle > thisform.gridbackcolor = .backcolor > thisform.gridforecolor = .forecolor > ENDWITH > this.highlight_row() > ENDPROC > > > PROCEDURE grid1.AfterRowColChange > LPARAMETERS nColIndex > thisform.highlight_row() > ENDPROC > > >ENDDEFINE >>
>> WITH THIS.grid1 >> THISFORM.HIGHLIGHTBACKCOLOR = .HIGHLIGHTBACKCOLOR >> THISFORM.HIGHLIGHTSTYLE = .HIGHLIGHTSTYLE >> THISFORM.gridbackcolor = .BACKCOLOR >> THISFORM.gridforecolor = .FORECOLOR >> >> ***** AAAAADDDDDDDDEEEEDDDDDD ******** >> .columns[2].Sparse = .F. >> ENDWITH >>>>
IF loCurrentControl.BACKCOLOR = THISFORM.gridbackcolor .Columns(lnColumn).Sparse = .t. * loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR && !! this is useless ELSE .COLUMNS(lnColumn).SPARSE = .F. llsethighlight = .T. && change the highlightstyle on the grid ENDIF ELSE .Columns(lnColumn).Sparse = .t. * loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR && !! this is useless ENDIF