Cetin
Fabulous!!!!
By the way - don't you ever sleep?????
Thanks for all your help
Colin
>You can absolutely use RGB() instead of 0x... Actually you can use anything there that returns a numeric value in the range 0...16777215.
>
>I wast lazy to write rgb(255,0,0) and use 0xFF instead (to be clear 0x0000FF). All of these return the same value:
>
>? rgb(255,255,0)
>? 0x0000FF
>? 255
>
>In RGB() function colors are RGB( red, green, blue ). Each of the red,green,blue components could be in 0..255 range (which in hex notation 0x0...0xFF). With hex type writing it's however:
>
>0xBlueGreenRed
>
>rgb(0,0,0) = 0x000000 = 0
>rgb(255,255,255) = 0xFFFFFF = 16777215
>rgb(255,255,0) = 0x00FFFF = 65535
>rgb(128,128,128) = 0x808080 = 8421504
>and so on.
>
>A more flexible version of the code (I suggest this one in fact, as it's easier to modify per column as you wish).
>
>
>Public oForm
>oForm = Createobject("myForm")
>oForm.Show()
>
>Define Class myForm As Form
> DataSession = 2
> Height = 400
> Width = 600
>
> Add Object myGrid As Grid With ;
> Height = 400, Width = 600, RecordSource="employee"
>
> Procedure Load
> Use employee
> Endproc
>
> Procedure Init
> For Each oColumn In This.myGrid.Columns
> oColumn.DynamicBackColor = "thisform.MyColColor(["+oColumn.ControlSource+"])"
> Endfor
> Endproc
>
> Procedure myColColor
> Lparameters tcControlSource
> Local luValue, lnColor
> lnColor = 0xFFFFFF
> If Type(m.tcControlSource) = 'G'
> Return m.lnColor
> Endif
> luValue = Evaluate(m.tcControlSource)
> Do Case
> Case Lower(m.tcControlSource) = "employee.title"
> If Lower(m.luValue) = "sales manager"
> lnColor = Rgb(255,255,0)
> Endif
> Case Lower(m.tcControlSource) = "employee.birth_date"
> If Year(luValue) % 2 = 0
> lnColor = Rgb(0,255,255)
> Endif
> Endcase
> Return m.lnColor
> Endproc
>Enddefine
>
>
>With this version:
>
> Procedure Init
> For Each oColumn In This.myGrid.Columns
> oColumn.DynamicBackColor = "thisform.MyColColor(["+oColumn.ControlSource+"])"
> Endfor
> Endproc
>
>Sets each column's dynamicbackcolor relevant to its contents (controlsource name is sent to method). If you check columns' properties at runtime it shows as:
>Column1.ControlSource = ...
>...
>ColumnX.ControlSource = "employee.title"
>ColumnX.DynamicBackColor = "thisform.myColColor([employee.title])"
>ColumnY.ControlSource = "employee.birth_date"
>ColumnY.DynamicBackColor = "thisform.myColColor([employee.birth_date])"
>
>MyColor method then checks passed controlsource. If it's a general field returns default color white at top. Otherwise checks if it's 'title' or 'birth_date' column and returns choosen colors for the current row value (ie: if born on an even year Cyan). While it's not too late I suggest you code as this version. It's much more flexible for later modifications if need be.
>Cetin
Specialist in Advertising, Marketing, especially Direct Marketing
I run courses in Business Management and Marketing