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)) APPEND BLANK REPLACE po_number WITH "123456" REPLACE po_status WITH "CXP" APPEND BLANK REPLACE po_number WITH "789012" REPLACE po_status WITH "NB" APPEND BLANK 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(124,24,32)" COPY TO ARRAY _vstatus FIELDS ST_STATUS, ST_ATTRIB FOR !EMPTY(ST_STATUS) *oform = creatobj('testform') DO FORM testform NAME oform LINKED oform.show() oform.SetPolicyGridColor oform.refresh() read events CLOSE ALL return DEFINE CLASS testform AS form Top = 0 Left = 0 Height = 227 Width = 717 DoCreate = .T. Caption = "Test Highlight Change " Name = "TESTFORM" ADD OBJECT grid1 AS grid WITH ; ColumnCount = 2, ; Height = 200, ; Left = 24, ; Panel = 1, ; RecordSource = "tpolicy", ; RecordSourceType = 1, ; Top = 12, ; Width = 410, ; HighlightBackColor = RGB(0,0,160), ; HighlightForeColor = RGB(255,255,0), ; HighlightStyle = 2, ; Name = "grid1", ; Column1.ControlSource = "tpolicy.po_number", ; Column1.Width = 154, ; Column1.Name = "Column1", ; Column2.ControlSource = "tpolicy.po_status", ; Column2.Name = "Column2" ADD OBJECT testform.grid1.column1.header1 AS header WITH ; Caption = "po_number", ; Name = "Header1" ADD OBJECT testform.grid1.column1.text1 AS textbox WITH ; BorderStyle = 0, ; Margin = 0, ; ForeColor = RGB(0,0,0), ; BackColor = RGB(255,255,255), ; Name = "Text1" ADD OBJECT testform.grid1.column2.header1 AS header WITH ; Caption = "po_status", ; Name = "Header1" ADD OBJECT testform.grid1.column2.text1 AS textbox WITH ; BorderStyle = 0, ; Margin = 0, ; ForeColor = RGB(0,0,0), ; BackColor = RGB(255,255,255), ; Name = "Text1" ADD OBJECT label1 AS label WITH ; BackStyle = 0, ; Caption = ("Note how the dynamicbackcolor "+CHR(13)+"does not show through the highlight. " +CHR(13)+"I need to change the highlight over"+CHR(13)+"the single cell or at least change "+CHR(13)+"the highlight forecolor."), ; Height = 84, ; Left = 502, ; Top = 13, ; Width = 204, ; ForeColor = RGB(255,0,0), ; Name = "Label1" ADD OBJECT line1 AS line WITH ; BorderWidth = 3, ; Height = 0, ; Left = 411, ; Top = 42, ; Width = 84, ; Name = "Line1" ADD OBJECT line2 AS line WITH ; BorderWidth = 3, ; Height = 24, ; Left = 407, ; Top = 41, ; Width = 24, ; Name = "Line2" ADD OBJECT line3 AS line WITH ; BorderWidth = 3, ; Height = 24, ; Left = 406, ; Top = 18, ; Width = 24, ; LineSlant = "/", ; Name = "Line3" 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 Destroy DODEFAULT() CLEAR EVENTS ENDPROC PROCEDURE Init DODEFAULT() ENDPROC ENDDEFINEI can see Nick's class setting the highlight forecolor to the column's backcolor but I cannot see how it is actually being done. I have been through the setdynamiccolor() and the highlight_row() methods. I'm feeling pretty stupid today. Any help or small example doing this with a grid on a form would be greatly appreciated.