>DEFINE CLASS txtdate AS txtbase >Alignment = 3 >Value = {} >Format = "D" > >*-- Used to store the actual DateTime ControlSource of the control so we can enter Date Values and update the "real" datetinme controlsource manually behind the scenes >ccontrolsource = "" >Name = "txtdate" > > >*-- Called from the Valid to update the field specified in the cControlSource property from the control's value. It expects the specified field to of data type datetime. >PROCEDURE updatecontrolsource >LOCAL ldValue, lcField, lcAlias > >ldValue = IIF( VARTYPE( This.Value ) = 'T', TTOD( This.Value ), This.Value ) >lcField = JUSTEXT( This.cControlSource ) >lcAlias = JUSTSTEM( This.cControlSource ) > >*** Update cControlSource from the Control's Value >IF NOT EMPTY( This.cControlSource ) > IF EMPTY( NVL( ldValue, {} ) ) > *** Check to see if we are updating a form property > IF UPPER( LEFT( This.cControlSource, 4 ) ) == 'THIS' > lcControlSource = This.cControlSource > &lcControlSource = {/:} > ELSE > REPLACE ( lcField ) WITH .NULL. IN ( lcAlias ) > ENDIF > ELSE > *** make sure we have a valid date > *** so we do not get datetime overflow errors > *** in sql server when we attempt an update > IF NOT( UPPER( LEFT( This.cControlSource, 4 ) ) == 'THIS' ) > IF BETWEEN( ldValue, {^1900-01-01}, {^3000-01-01} ) > REPLACE ( lcField ) WITH DTOT( ldValue ) IN ( lcAlias ) > ELSE > MESSAGEBOX( 'Invalid Date', 16, 'Please Fix Your Input' ) > RETURN .F. > ENDIF > ELSE > lcControlSource = This.cControlSource > &lcControlSource = DTOT( ldValue ) > ENDIF > ENDIF >ENDIF >ENDPROC > >*-- Refreshes the control's (DATE) value from the datetime value conained in the field specified in its cControlSource property >PROCEDURE refreshvalue >LOCAL ltValue > >IF NOT EMPTY( This.cControlSource ) > ltValue = EVALUATE( This.cControlSource ) > > *** Update the control's value from its cControlSource > IF EMPTY( NVL( ltValue, {/:} ) ) > This.Value = {} > ELSE > IF VARTYPE( ltValue ) = 'T' > This.Value = TTOD( ltValue ) > ELSE > This.Value = ltValue > ENDIF > ENDIF >ELSE > This.Value = {} >ENDIF >ENDPROC > >PROCEDURE Refresh >DODEFAULT() >This.RefreshValue() >ENDPROC > >PROCEDURE Valid >IF NOT This.UpdateControlSource() > RETURN 0 >ENDIF >ENDPROC > >PROCEDURE Init >DODEFAULT() > >*** Unbind the control and save the controlsource to a special property >IF NOT EMPTY( This.ControlSource ) > This.cControlSource = This.ControlSource > This.ControlSource = '' >ENDIF >This.Format = 'D' >This.Value = {} >ENDPROC > >ENDDEFINE >