******************************************************************** * Description.......: myHeader.Definition * Calling Samples...: * Parameter List....: tcCaption * Ideas by..........: Cetin Basoz & David Frankenbach & Vlad Grynchyshyn * Modified by.......: Nadya Nosonovsky 09/14/2001 10:50:09 AM ******************************************************************** define class MyHeader as header mcArrowName = "" && name of the arrow used for all headers of the grid mlAscending = .f. && flag for sort order mlColumnMoved = .f. && flag indicating column was moved mnColumnOrder = 0 && original column order mlColumnSized = .f. && flag indicating column was resized mnColumnWidth = 0 && original size of column nOriginalForeColor = 0 && original ForeColor nForeColorAsc = 16711935 && Fore Color, when the column is in ASC order nForeColorDesc = 8388863 && Fore Color, when the column is in DESC order procedure init lparameters tcCaption local ix, lcProperty with this if vartype(m.tcCaption) # "C" ; or empty(m.tcCaption) tcCaption = .caption endif .caption = m.tcCaption .alignment = 2 .nOriginalForeColor=.forecolor if !pemstatus(.parent.parent,"nCurOrderedColumnIndex",5) .parent.parent.addproperty("nCurOrderedColumnIndex",0) endif if !pemstatus(.parent.parent,"nCurActiveColumnIndex",5) .parent.parent.addproperty("nCurActiveColumnIndex",0) endif endwith endproc procedure ForeColor_assign lparameters vNewVal *To do: Modify this routine for the Assign method with this if inlist(m.vNewVal, .nForeColorAsc, .nForeColorDesc) .parent.parent.nCurOrderedColumnIndex=.GetColumnIndex() else .nOriginalForeColor= m.vNewVal .parent.parent.nCurActiveColumnIndex=.GetColumnIndex() endif .forecolor = m.vNewVal endwith procedure GetColumnIndex local lnI, lnIndex lnIndex=0 with this.parent for lnI=1 to .parent.columncount if .parent.columns[m.lnI].columnorder=.columnorder lnIndex=m.lnI exit endif next endwith return m.lnIndex endproc procedure Order_Highlight local lnOldIndex, lnIndex * lnIndex = this.GetColumnIndex() lnOldIndex = this.parent.parent.nCurOrderedColumnIndex with this.parent.parent if m.lnOldIndex > 0 .columns[m.lnOldIndex].Header1.forecolor= ; .columns[m.lnOldIndex].Header1.nOriginalForeColor endif endwith with this if .mlAscending .forecolor = .nForeColorAsc && Red else .forecolor = .nForeColorDesc endif endwith endproc procedure click local nTempCurRec, lcTagName with this if ! .mlColumnMoved and ! .mlColumnSized * sortable column that was clicked .mlAscending = ! .mlAscending thisform.lockscreen = .t. lcTagName=justext(.parent.controlsource) select (.parent.parent.recordsource) if tagno(m.lcTagName)> 0 nTempCurRec = recno(.parent.parent.recordsource) if .mlAscending set order to tag (m.lcTagName) ; in (.parent.parent.recordsource) ascending else set order to tag (m.lcTagName) ; in (.parent.parent.recordsource) descending endif .Order_Highlight() && Show color .parent.parent.refresh if type('thisform.navstand.name')='C' thisform.navstand.lstOrders.value=m.lcTagName endif if between(m.nTempCurRec,1,reccount(.parent.parent.recordsource)) go m.nTempCurRec in (.parent.parent.recordsource) endif endif thisform.lockscreen = .f. endif endwith endproc procedure mousedown lparameters nButton, nShift, nXCoord, nYCoord with this * initialize items that will be tested in MouseUp .mnColumnOrder = this.parent.columnorder .mnColumnWidth = this.parent.width endwith endproc procedure mouseup lparameters nButton, nShift, nXCoord, nYCoord with this * check to see if this was a resize or move .mlColumnMoved = ( this.parent.columnorder != .mnColumnOrder ) .mlColumnSized = ( this.parent.width != .mnColumnWidth ) * .ForeColor=.nOriginalForeColor endwith endproc procedure dblclick this.parent.parent.SetOrder(this.parent.controlsource) endproc enddefineAnd here is EditInGrid.GotFocus() event:
******************************************************************** * Description.......: EditInGrid.GotFocus() * Calling Samples...: * Parameter List....: * Created by........: * Modified by.......: Nadya Nosonovsky 09/14/2001 01:57:54 PM ******************************************************************** local lnWhiteColor, lnIndex, lnOldIndex, lnBlackColor lnBlackColor = rgb(0,0,0) && Black lnIndex = this.GetColumnIndex() if !pemstatus(this.parent.parent,"nCurActiveColumnIndex",5) this.parent.parent.AddProperty("nCurActiveColumnIndex",0) endif lnOldIndex = this.parent.parent.nCurActiveColumnIndex if m.lnOldIndex > 0 and m.lnOldIndex <> m.lnIndex with this.parent.parent.columns[m.lnOldIndex].Header1 && I probably should check for the name... .backcolor = rgb(192,192,192) && gray if pemstatus(this.parent.parent.columns[m.lnOldIndex].Header1,"nForeColorAsc",5) && nForeColorAsc exists if not inlist(.forecolor,.nForeColorAsc, .nForeColorDesc) .forecolor= m.lnBlackCOlor && black .nOriginalForeColor = m.lnBlackColor endif else && Normal Header .forecolor=rgb(0,0,0) && black endif endwith endif this.parent.parent.nCurActiveColumnIndex = m.lnIndex lnWhiteColor = rgb(255,255,255) with this if .parent.readonly or .parent.parent.readonly set cursor off endif .backcolor=.parent.parent.cCurRecBackColor .forecolor=.parent.parent.cCurRecForeColor .fontbold=.t. .OldValue=evaluate(.parent.controlsource) && Save the current value if type('this.parent.header1.name')='C' with .parent.Header1 .backcolor=rgb(64,128,128) && green if pemstatus(.parent.parent,"nCurOrderedColumnIndex",5) if .nOriginalForeColor = m.lnWhiteColor ** Don't update ForeColor, already White else .forecolor = m.lnWhiteColor endif else .forecolor = m.lnWhiteColor && white endif endwith endif endwith dodefault()Uf, now I have to concentrate on all other tasks...
>>>LPARAMETERS nButton, nShift, nXCoord, nYCoord >>>local lnI >>>for lnI = 1 to This.Parent.Parent.ColumnCount >>> This.Parent.Parent.Columns(lnI).Header1.ForeColor = rgb(0,0,0) >>>endfor >>>This.ForeColor = rgb(200,0,0)>>>