DO CASE example
The following is a key event handler for a custom entryfield that handles dates. It recognizes special keystrokes to move the date forward or backward one day, to the first and last day of the month, and so forth:
function key(nChar, nPosition)
local c1
c1 = upper(chr(nChar))
do case
case c1 == "T" // Today
this.value := date()
case c1 == "-" or c1 == "_" // Next day
this.value--
case c1 == "+" or c1 == "=" // Previous day
this.value++
case c1 == "M" // First day of the month
this.value := FDoM(iif( this.lastKey == "M", --this.value, this.value))
case c1 == "H" // Last day of the month
this.value := LDoM(iif(this.lastKey == "H", ++this.value, this.value))
case c1 == "Y" // First day of the year
this.value := FDoY(iif(this.lastKey == "Y", --this.value, this.value))
case c1 == "R" // Last day of the year
this.value := LDoY(iif(this.lastKey == "R", ++this.value, this.value))
otherwise
this.lastKey := null // Clear stored keystroke
return true // Handle key normally
endcase
this.lastKey := c1 // Store as property for comparison next time
return false // Ignore key
The functions FDoM( ), LDoM( ), FDoY( ), and LDoY( ) are defined elsewhere.