51:
The sample displays the value in years, months, weeks, days, hours, minutes and secons


oDCOCX_Exontrol1:Expression := "trim((1:=int((0:=value)/365) ? =:1 + ` year(s) ` : ``)  + (1:=int((0:=(=:0 - (=:1*365)))/31) ? =:1 + ` month(s) ` : ``) + (1:=int((0:=(=:0 - (=:1*31)))/7) ? =:1 + ` week(s) ` : ``) + (1:=int((0:=(=:0 - (=:1*7)))/1) ? =:1 + ` day(s) ` : ``) + (1:=int((0:=(=:0 - =:1 + 1/24/60/60/2))*24) ? =:1 + ` hour(s) ` : ``) + (1:=int((0:=(=:0*24 - =:1))*60) ? =:1 + ` min(s) ` : ``) + (1:=int((0:=(=:0*60 - =:1))*60) ? =:1 + ` sec(s)` : ``))"
oDCOCX_Exontrol1:EvaluationText := "value = 1\r\nvalue=2 + 1/24/60\r\nvalue=365 + 12 * 1/24\r\nvalue=1212.25\r\nvalue=366.02512"
oDCOCX_Exontrol1:SplitPaneWidth := 464

50:
The sample displays the value in seconds


oDCOCX_Exontrol1:Expression := "(1:=(int(0:=(value*24*60*60 + 1/24/60/60/2))) ? =: 1 + ` sec(s)` : ``)"
oDCOCX_Exontrol1:EvaluationText := "value = 1\r\nvalue=2 + 1/24/60\r\nvalue=365 + 12 * 1/24\r\nvalue=1212.25\r\nvalue=366.02512"
oDCOCX_Exontrol1:SplitPaneWidth := 256

49:
The sample displays the value in minutes and seconds


oDCOCX_Exontrol1:Expression := "trim((1:=(int(0:=(value*24*60 + 1/24/60/60/2))) ? =: 1 + ` min(s)` : ``) + ` ` + (2:=int((=:0 - =:1)*60) ? =:2 + ` sec(s)` : ``))"
oDCOCX_Exontrol1:EvaluationText := "value = 1\r\nvalue=2 + 1/24/60\r\nvalue=365 + 12 * 1/24\r\nvalue=1212.25\r\nvalue=366.02512"
oDCOCX_Exontrol1:SplitPaneWidth := 256

48:
The sample displays the value in hours and minutes


oDCOCX_Exontrol1:Expression := "((1:=int(0:=( 24*int(value) + (value - int(value) + 1/24/60/60/2)*24))) != 0 ? =:1 + ' hour(s)' : '' ) + (=:1 ? ' ' : '' ) + ((1:=round((=:0 - =:1)*60)) != 0 ? =:1 + ' min(s)' : '')"
oDCOCX_Exontrol1:EvaluationText := "value = 1\r\nvalue=2 + 1/24/60\r\nvalue=365 + 12 * 1/24\r\nvalue=1212.25\r\nvalue=366.02512"
oDCOCX_Exontrol1:SplitPaneWidth := 256

47:
How can I check for a blank-date (sample 3) Expression


oDCOCX_Exontrol1:Expression := "type(value) case ( default : `<fgcolor=000000><s>invalid</s></fgcolor>`; 0 : `<fgcolor=FF0000>null</fgcolor>`; 1 : `null` ; 7 : longdate(value) )"
oDCOCX_Exontrol1:SplitPaneWidth := 256

46:
How can I check for a blank-date (sample 2) Expression


oDCOCX_Exontrol1:Expression := "len(value) ? longdate(value) : ``"
oDCOCX_Exontrol1:SplitPaneWidth := 256

45:
How can I check for a blank-date (sample 1) Expression


oDCOCX_Exontrol1:Expression := "type(value) = 7 ? longdate(value) : ``"
oDCOCX_Exontrol1:SplitPaneWidth := 256

44:
Easter Sunday


oDCOCX_Exontrol1:Expression := "date(dateS('3/1/' + year(value)) + ((1:=(((255 - 11 * (year(value) mod 19)) - 21) mod 30) + 21) + (=:1 > 48 ? -1 : 0) + 6 - ((year(value) + int(year(value) / 4)) + =:1 + (=:1 > 48 ? -1 : 0) + 1) mod 7))"
oDCOCX_Exontrol1:SplitPaneWidth := 256

43:
The sample displays the value in days, hours and minutes


oDCOCX_Exontrol1:Expression := "((1:=int(0:= (value))) != 0 ? (=:1 + ' day(s)') : '') + (=:1 ? ' ' : '' ) + ((1:=int(0:=((=:0 - =:1 + 1/24/60/60/2)*24))) != 0 ? =:1 + ' hour(s)' : '' ) + (=:1 ? ' ' : '' ) + ((1:=round((=:0 - =:1)*60)) != 0 ? =:1 + ' min(s)' : '')"
oDCOCX_Exontrol1:SplitPaneWidth := 256

42:
How can I display the date in short format


oDCOCX_Exontrol1:Expression := "shortdate(date(value))"
oDCOCX_Exontrol1:SplitPaneWidth := 256

41:
How can I display the date in long format


oDCOCX_Exontrol1:Expression := "longdate(date(value))"
oDCOCX_Exontrol1:SplitPaneWidth := 256

40:
The sample displays the positive values in blue, being preceded by + sign, negative values in red preceded by - sign, 0 as 0.00 while for null values is displays null. The numbers are displayed using 2 digits, . as decimal separator and grouping by 3 digits by , separator


oDCOCX_Exontrol1:Expression := "type(value) in (0,1) ? 'null' : ( dbl(value)<0 ? '<fgcolor=FF0000>'+ (value format '2|.|3,' ) : (dbl(value)>0 ? '<fgcolor=0000FF>+'+(value format '2|.|3,' ): '0.00') ) "
oDCOCX_Exontrol1:SplitPaneWidth := 256

39:
How can I format a numeric value so it display as a currency


oDCOCX_Exontrol1:Expression := "currency(dbl(value))"
oDCOCX_Exontrol1:SplitPaneWidth := 256

38:
How can I format a numeric value to with grouping


oDCOCX_Exontrol1:Expression := "dbl(value) format ''"
oDCOCX_Exontrol1:SplitPaneWidth := 256

37:
How can I convert the value to a numeric ( integer ) value


oDCOCX_Exontrol1:Expression := "int(value)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

36:
How can I convert the value to a numeric ( double ) value


oDCOCX_Exontrol1:Expression := "dbl(value)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

35:
How can I format a date as YYYY-MMM-DD (sample 4)


oDCOCX_Exontrol1:Expression := "(year(value) + '-') + (month(value) array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')) + '-' + (day(value)<10 ? '0' : '') + day(value)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

34:
How can I format a date as YYYY-MMM-DD (sample 3)


oDCOCX_Exontrol1:Expression := "(2 array ( 0 := (shortdateF(value) split `/`) ) ) + `-`+ ((month(value) - 1) array `Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec` split ` `) + `-`+ (1 array =: 0)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

33:
How can I format a date as YYYY-MMM-DD (sample 2)


oDCOCX_Exontrol1:Expression := "ltrim((2 array longdate(value) split `,`)) + `-` +  ((1 array (1 array longdate(value) split `,`) split ` `) left 3 ) + `-` + (`00` left (2 - len(day(value)))) + day(value)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

32:
How can I format a date as YYYY-MMM-DD (sample 1)


oDCOCX_Exontrol1:Expression := "year(value) + `-` +  (month(value)-1 array ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')) + `-` + (`00` left (2 - len(day(value)))) + day(value)"
oDCOCX_Exontrol1:SplitPaneWidth := 256

31:
How can I use my own operators only


oDCOCX_Exontrol1:AllowValueKeyword := false
oDCOCX_Exontrol1:AllowDefaultOperators := false
oDCOCX_Exontrol1:AddCustomOperator("+","<b>+</b>","This is a new binary-operator",2)
oDCOCX_Exontrol1:AddCustomOperator("xxx","<b>xxx</b>","This is a new keyword",0)
oDCOCX_Exontrol1:AddCustomOperator("yyy","<b>yyy</b>","This is a unary-operator",1)
oDCOCX_Exontrol1:AddCustomOperator("zzz","<b>zzz</b>","This is a binary-operator",2)
oDCOCX_Exontrol1:Text := "xxx + yyy(100 zzz 200)"

30:
How can I add a new binary-operator


oDCOCX_Exontrol1:AddCustomOperator("xxx","<b>xxx</b>","This is a new binary-operator",2)
oDCOCX_Exontrol1:Text := "value + 100 xxx 200"

29:
How can I add a new unary-operator


oDCOCX_Exontrol1:AddCustomOperator("xxx","<b>xxx</b>","This is a new unary-operator",1)
oDCOCX_Exontrol1:Text := "value + xxx(100)"

28:
How can I add a new keyword


oDCOCX_Exontrol1:AddCustomOperator("xxx","<b>xxx</b>","This is a new keyword",0)
oDCOCX_Exontrol1:Text := "value + xxx"

27:
How can I disable all operators

oDCOCX_Exontrol1:AllowValueKeyword := false
oDCOCX_Exontrol1:AllowDefaultOperators := false

26:
How can I disable the value keyword

oDCOCX_Exontrol1:AllowValueKeyword := false

25:
Usage of and ( and operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "(value contains 1) and (value != 1)"

24:
Usage of or ( or operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "(value=1) or value=`string`"

23:
Usage of not ( not operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "not(value=1)"

22:
Usage of - ( subtraction operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value - 2"

21:
Usage of + ( addition operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value + 2"

20:
Usage of mod ( reminder operator )


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value mod 2"

19:
Usage of / (divide operator)


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value / 2"

18:
Usage of * (multiplicity operator)


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "2 * value"

17:
How can I get the word from cursor when user double clicks the control
METHOD OCX_Exontrol1DblClick(Shift,X,Y) CLASS MainDialog
	// DblClick event - Occurs when the user double clicks the left mouse button over an object.
	OutputDebugString(String2Psz( "Word: " ))
	OutputDebugString(String2Psz( oDCOCX_Exontrol1:[WordFromPoint,-1,-1,nil] ))
RETURN NIL


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:AllowSplitter := exVSplitter
oDCOCX_Exontrol1:SplitPaneHeight := 196

16:
How do I determine the word from the cursor
METHOD OCX_Exontrol1Click() CLASS MainDialog
	// Click event - Occurs when the user presses and then releases the left mouse button over the list control.
	OutputDebugString(String2Psz( "Word: " ))
	OutputDebugString(String2Psz( oDCOCX_Exontrol1:[WordFromPoint,-1,-1,nil] ))
RETURN NIL


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:SplitPaneHeight := 196
oDCOCX_Exontrol1:[Background,exVSplitterApp] := RGB(240,240,240)
oDCOCX_Exontrol1:AllowSplitter := exVSplitter

15:
How can I check if the expression is valid/syntactically correct
METHOD OCX_Exontrol1Change() CLASS MainDialog
	// Change event - Indicates that the control's text has changed.
	OutputDebugString(String2Psz( "Valid: " ))
	OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:IsValid) ))
RETURN NIL


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:SplitPaneHeight := 196
oDCOCX_Exontrol1:[Background,exVSplitterApp] := RGB(240,240,240)
oDCOCX_Exontrol1:AllowSplitter := exVSplitter

14:
How can I change the visual appearance of the horizontal splitter


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:SplitPaneHeight := 196
oDCOCX_Exontrol1:[Background,exVSplitterApp] := RGB(240,240,240)
oDCOCX_Exontrol1:AllowSplitter := exVSplitter

13:
How can I change the visual appearance of the vertical splitter


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:[Background,exHSplitterApp] := RGB(240,240,240)

12:
How can I add a new menu-item to control's context menu
METHOD OCX_Exontrol1ExecuteContextMenu(Item,Position) CLASS MainDialog
	// ExecuteContextMenu event - Occurs when the user selects an user item from the control's context menu.
	OutputDebugString(String2Psz( "ExecuteContextMenu: " ))
	OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL


oDCOCX_Exontrol1:Expression := "value + 100"
oDCOCX_Exontrol1:ContextMenuItems := "Test"

11:
How can I change the tooltip that shows when cursor hovers a keyword


oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:[Description,exKeywordValue] := "This is a bit of text to be shown when cursor hovers the <b>value</b> keyword."
oDCOCX_Exontrol1:Refresh()

10:
How do I check if the expression is correct

oDCOCX_Exontrol1:Expression := "currency(value)"
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:IsValid) ))

9:
How do I programmatically evaluate the expression

oDCOCX_Exontrol1:Expression := "currency(value)"
OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:[Evaluate,"value=100"]) ))

8:
How can I assign multiple values for variables %1, %2, ...


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "currency(%1 + %2)"
oDCOCX_Exontrol1:EvaluationText := "%1 = 100;%2 = 200"

7:
How can I change the values to show the result

oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "currency(value)"
oDCOCX_Exontrol1:EvaluationText := "value = 100"

6:
How can I prevent changing the color when expression is invalid

oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value 2"
oDCOCX_Exontrol1:ForeColorInvalid := RGB(0,0,0)

5:
How can I change the color when expression is invalid

oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value 2"
oDCOCX_Exontrol1:ForeColorInvalid := RGB(255,0,0)

4:
How can I prevent evaluation the selection


oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value + 1"
oDCOCX_Exontrol1:EvaluateSelection := false
oDCOCX_Exontrol1:HideSelection := false
oDCOCX_Exontrol1:SelLength := 1

3:
How can I programatically show the result

oDCOCX_Exontrol1:SplitPaneWidth := 196
oDCOCX_Exontrol1:Expression := "value"

2:
How can I get ride of the right-vertical line/split

oDCOCX_Exontrol1:AllowSplitter := exNoSplitter
oDCOCX_Exontrol1:Expression := "value + 1"

1:
How can I change the control's background

oDCOCX_Exontrol1:Expression := "value"
oDCOCX_Exontrol1:BackColor := RGB(240,240,240)