Class vIntelliSense_Date_Mixin is a Message Procedure vDefine_IntelliSense_Date_Mixin Property Date vpdOriginal_Value Public 0 Property Integer vpbIntelliSense_Date_State Public dfTrue End_Procedure // vDefine_IntelliSense_Date_Mixin // **WvA: Store the current date-value before any changes are made Procedure vDoStoreOriginalDate Local Date dOriginal //If (vpbIntelliSense_Date_State(Self)) Begin Get Value Item 0 To dOriginal Set vpdOriginal_Value To dOriginal //End End_Procedure // vDoStoreOriginalDate Procedure vIntelliSenseDate Local Integer iCurrent iStored iDaysOffSet iSep iDate_Format bChanged Local Date dCurrent dOriginal Local String sStored sCurrent sSep sMask Get Item_Changed_State Item 0 To bChanged Get vpdOriginal_Value To dOriginal If (vpbIntelliSense_Date_State(Self) And (bChanged) And (dOriginal <> 0)) Begin // We need the masked value, because the normal value is corrected by the runtime for // USA dates. Get Masked_Value Item 0 To sCurrent // getting a 2 digit entered date to a // date type variable results in a runtime error Move (Replaces(" ",sCurrent,"")) To sCurrent Get_Attribute DF_DATE_SEPARATOR To iSep Move (Character(iSep)) To sSep Move (sSep+sSep) To sMask // Now check if a 2 digit date is just entered. // Something very special is going on here. We are interpreting a string, so the format // will always be the sane, even for USA or Military dates. "99//" where 9 can be any number If ( (length(sCurrent) > 2) And (Right(sCurrent,2) = sMask) ) Begin Move (replace(sMask,sCurrent,"")) To sCurrent Move sCurrent To iCurrent If ((iCurrent >= 1) And (iCurrent <= 31)) Begin Get_Attribute DF_DATE_FORMAT To iDate_Format If (iDate_Format = DF_DATE_USA) Begin Move (Mid( String(dOriginal),2,4)) To iDaysOffSet End Else If (iDate_Format = DF_DATE_EUROPEAN) Begin Move (Left( String(dOriginal),2 )) To iDaysOffSet End Else If (iDate_Format = DF_DATE_MILITARY) Begin Move (Right( String(dOriginal),2 )) To iDaysOffSet End Set Value Item 0 To (Date(dOriginal - iDaysOffSet + iCurrent)) End // Let the runtime handle the error if value not in the range 1..31 End End End_Procedure // vIntelliSenseDate End_Class // vIntelliSense_Date_Mixin