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 " highlightbackcolor = .F. highlightstyle = .F. gridbackcolor = .F. gridforecolor = .F. gridhighlightforecolor = .F. cvalue = "" Name = "TESTFORM" ADD OBJECT grid1 AS grid WITH ; ColumnCount = 2, ; Height = 200, ; Left = 24, ; Panel = 1, ; RecordSource = "tpolicy", ; RecordSourceType = 1, ; Top = 12, ; Width = 310, ; 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 = 160, ; Column1.Name = "Column1", ; Column2.ControlSource = "tpolicy.po_status", ; Column2.Width = 160, ; Column2.Name = "Column2" 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 .COLUMNS(lnColumn).SPARSE = .T. && default all columns to .t. 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 loCurrentControl.BACKCOLOR = THISFORM.HIGHLIGHTBACKCOLOR ELSE .COLUMNS(lnColumn).SPARSE = .F. llsethighlight = .T. && change the highlightstyle on the grid ENDIF ELSE 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 thisform.gridhighlightforecolor = .highlightforecolor ENDWITH this.highlight_row() this.refresh() ENDPROC PROCEDURE grid1.AfterRowColChange LPARAMETERS nColIndex thisform.highlight_row() ENDPROC ENDDEFINE