Exontrol ExMaskEdit Component - Release Notes (http://www.exontrol.com/exmaskedit.jsp)

15.0.0.3 Nov 22, 2023
*Added: TemplateDef/TemplatePut property allows defining inside variables for the Template feature ( available for /COM only, and useful to assign properties with multiple parameters, which is not supported in dBASE )
*Fixed: The AttachTemplate method fails if using "handle" keyword on x64 version
*Fixed: The expropertieslist/com fails if the user is trying to spy the control (x64 version only, AllowSpy property, browses the object by drag and drop)

15.0.0.1 May 10, 2023
*NEW:   Ability to specify the size to show the icons within the control
*Added: ImageSize property specifies the size of the control' icons. By default, the ImageSize property is 16. The control's Images collection is cleared if the ImageSize property is changed, so it is recommended to set the ImageSize property before calling the Images method.
*Fixed: A GPF may occur on closing the form/window/dialog if one or more events are handled by AttachTemplate method

14.0.0.3 Dec 28, 2022
*Added: Update the samples to support x64 configuration (/COM version)
*Fixed: No control frame is shown in design-mode under MS Excel's spreadsheet
*Fixed: A GPF may occur while the cursor hovers the right-button (evaluation version only)

14.0.0.2 Aug 31, 2022
*Added: PowerBuilder 21.0 sample
*Fixed: The "Do you want to save changes to the design of form ''? Yes, No, Cancel" message occurs in MS Access, every time the form is closed in design mode
*Fixed: Clicking (Custom) property generates "Class Not Registered" error (Windows x64, 'Looking for object with CLSID:{7EBDAAE1-8120-11CF-899F-00AA00688B10}')

14.0.0.1 Apr 20, 2022
*NEW: Z-Events support (Standard .NET event patterns)
*Added: Every event of the control (/NET assembly) provides a Z-Event alternative, of "void OnEventRaised(object sender, EventArgs args)" type. The .NET convention is for an event (Z-event) signature to have a void return and 2 parameters. The first parameter is of type System.Object and is the sender of the event. The second parameter must be of type System.EventArgs or derived from System.EventArgs and contains data passed between sender and receiver. For instance, the "DblClick(object sender, short Shift, int X, int Y)" event is equivalent to "ZDblClick(object sender, ZDblClickArgs e)", where "ZDblClickArgs" type is derived from System.EventArgs and includes definitions for Shift, X and Y properties
*Fixed: "Warning: The  event is a .NET event that does not follow the .NET convention for event signatures (OpenEdge, ABL code)". To prevent this warning, under OpenEdge environment you must use the Z-event alternatives 

13.0.0.2 May 24, 2021
*Added: Sets or gets the control's Font property in design mode, for the /NET version
*Fixed: The BackColor/ForeColor properties of the /NET version are not serialized once the user changes in design mode (the control's background/foreground is set to the default value once the form is started)
*Fixed: The BackColor/ForeColor properties of the /NET version are not copied in design mode, when the user copies the control in design-mode using CTRL + C (copy) and CTRL + V (paste) combination

13.0.0.1 Mar 15, 2021
*Added: ExMaskEdit.pdf (include the control's documentation in PDF format)
*Added: The Images method supports the Microsoft ImageList ( mscomctl.ocx, MSComctlLib.ImageList type) object directly. Shortly, you can define the control's images by calling Images(ImageList1.Object). The ImageList1.Object returns the object of MSComctlLib.ImageList type. The Microsoft ImageList object is available for /COM on x86 and x64 machines (starting from Access 2016)
*Fixed: Improves the conversion of the string to date, while using Regional settings (Windows System) for date like ddd.dd.mm.yyyy (Su.15.02.2021)

12.0.0.1 Jul 22, 2019
*Fixed: Prevents showing the "This application is about to initialize ActiveX controls that might be unsafe. If you trust the source of this file, select OK and the controls will be initialized using your current workspace settings." warning message while the control is running into MS Office forms or user-forms.

11.0.0.1 May 21, 2018
*NEW:   Ability to executes x-script code ( including events ), from a string, file or a safe array of bytes. This feature allows you to load the control's visual appearance and behavior, without having to write any line of code. The x-script code can save EBNs, icons, pictures into BASE64 encoded strings, and so everything can be put into a single file, that should be invoked by AttachTemplate method. This feature allows you to run any x-script code for any configuration of the component (/COM, /NET or /WPF). 
*Added: AttachTemplate method executes the giving x-script code, and attach events if found. The x-script code can contain handle keyword that defines a handler for the specified event. For instance, the AttachTemplate("handle Click() { print(Version) }") sends the control's Version property to the debugger for display. All you need is to open the DebugView tool, and click the control.
*Added: The control's Template page supports AttachTemplate so you can assign x-script code ( including events )  in design mode, and so the control's visual appearance and behavior is changed once the control is created at runtime (/COM version only). 

10.0.0.1 Oct 25, 2017
*NEW:   Display a placeholder for missing icons, images in HTML captions.
*Added: The Key parameter of the HTMLPicture property is case insensitive, so you can display the picture using the insensitive key. For instance, picA is equivalent with pica, or PICA and so on.
*Added: The HTML caption shows a missing image placeholder for images whose source is missing. The missing placeholder displays the index of the icon being missing, or the key of the HTML picture being missing. 
*Fixed: Prevents "Do you want to save ..." / "Save changes...' input box, when the user opens the form in design mode, and close it.

9.0.0.1 Jun 12, 2017
*Added: The Version property includes the SpecialBuild number of the assembly so it provides information like Major.Minor.Build.Revison.SpecialBuild.Type...
*Fixed: Prevents showing the control's view in design mode, while running on FORTH system ( /COM version )
*Fixed: Prevents a memory leak when loading icons, pictures, from BASE64 encoded strings (Images method, HTMLPicture picture).

8.0.0.2 Dec 23, 2015
*Added: The Version property for /NET or /WPF version returns more information about the component/assembly/file.
*Fixed: The element's tooltip is not shown if the user hovers again the object, if previously its tooltip was automatically hidden by elapsing the time specified by the ToolTipPopDelay property.
*Fixed: The show message is shown on the debugger ( dbgview ), when the tooltip is about to be shown.

8.0.0.1 Oct 21, 2015
*NEW:   Windows 8.1 64-bit compatibility
*Added: The /COM 64-bit version is compatible with Microsoft Office Applications: Excel 2013, Access 2013,...
*Added: The /NET(/WPF) 64-bit version is compatible with Microsoft NET Framework 4, 4.5, 4.5.1, ...
*Fixed: "Visual C++ Runtime Error!" occurs if using the  or  with no indicating the color. Correct is , instead 

7.2.0.5 June 22, 2015
*NEW:   Leading-Zero support for masking floating points numbers.
*Added: Any 0 character in the Mask property indicates a leading-zero, if the MaskFloat property is True. The number of 0 characters before decimal character indicates the leading-zero for integer part of the control, while the number of zeros after decimal character indicates the leading-zero for decimal part of the control. For instance, -###,###,##0.00, and control's Text property is 1, the control displays 1.00, if 1.1 if displays 1.10, and if empty, the 0.00 is displayed.
*Fixed: MS Access plays a beep, when the user presses the Backspace key while the control has the focus.
*Fixed: In MS Access, can't use the CTRL+F4 key to close the current form.

7.2.0.4 Apr 08, 2015
*Added: AllowEmptyValue property specifies whether the mask field supports empty values. For instance, if the Invalid property is set to a not-empty value, and the AllowEmptyValue property is exAllowEmptyValueShowNothing, the user can leave the field if it is empty ( not completed ). If the AllowEmptyValue property is exAllowEmptyValueShowNothing the field displays nothing if no entity is completed ( empty ). Once the user starts typing characters the current mask is displayed. The exAllowEmptyValueShowMask option, shows the current mask all the time.
*Added: ValidateAs property indicates the additional validation is performed, once the user leaves the field.
*Added: Refresh method, refreshes the control's content.
*Added: Jumps the literals from the cursor when the Left, Right or Backspace key is pressed.

7.2.0.3 Jan 30, 2015
*Added: ValidateValue(NewValue,Cancel) event occurs once the user leaves the field. If Cancel is set on True, the value is not validated, so the field is keep focused until the user enters an appropriate value. The NewValue indicates the field's value with no masking/placeholders characters. The ValidateValue event is fired only, if the Invalid property is not empty.
*Added: PasswordChar property sets or removes the password character for the field. By default, the black circle character is used as password character, for TrueType fonts, or * for others.
*Added: The Mask property supports "password=value", where the first character in the value indicates the field's password char. If the value is missing, the default password char is used. 
*Fixed: The mask field fails if ends on single \ character

7.2.0.2 Oct 27, 2014
*NEW:   Restrict data input by using validation rule for input-mask fields ( invalid=value, Mask property )
*Added: Invalid property indicates the html message to be displayed when the user enters an inappropriate value for the field. The Invalid property has no effect if empty ( by default ). If the Invalid property is " " ( single space ), the invalid message is not shown, but the field waits until the value is appropriate for the field. For instance, "!(999) 000 0000;;;invalid=The value you entered isn't appropriate for the input mask '<%mask%>' specified for this field." displays the "The value you entered isn't appropriate for the input mask '...' specified for this field." tooltip once the user leaves the field and it is not-valid ( for instance, the field includes entities required and uncompleted ). The <%mask%> keyword in value, substitute the current mask of the field, while the <%value%> keyword substitutes the current value ( including the literals ).
*Added: The Mask property supports "invalid=value" ( in forth part of the Imput-Mask ), which indicates the html message to be displayed when the user enters an inappropriate value for the field ( Invalid property ). 
*Fixed: Can't delete the entire selected text if user presses the Backspace key on a RichMaskEdit field. 

7.2.0.1 Aug 13, 2014
*NEW:   Ability to specify different options in the Mask property
*Added: The Mask property, supports up to four parts, separated by a semicolon (;). For instance, "`Time: `00:00:00;;0;overtype,warning=invalid character,beep", indicates the pattern "00:00" with the prefix Time:, the masking character being the 0, instead _, the field enters in over-type mode, insert-type mode is not allowed, and the field beeps and displays a tooltip in red with the message invalid character when the user enters an invalid character. 
*Added: The first part (pattern) is mandatory. It includes the mask characters or string (series of characters) along with placeholders and literal data such as, parentheses, periods, and hyphens. Characters enclosed in double quotation ("" or ``) marks will be displayed literally. If this part should display/use the  semicolon (;) character is should be included between double quotation ("" or ``) characters or as \; ( escape ). Currently, the special characters separated by space are: # 0 9 x X A a L ? & C > < * { } , [ ] - \    
*Added: The second part is optional and refers to the embedded mask characters and how they are stored within the field. If the second part is set to 0 ( default ), all characters are stored with the data, and if it is set to 1, the literals are stored, not including the masking/placeholder characters, if 2, just typed characters are stored, if 3, optional, required, editable and escaped entities are included (no double quoted text is included).
*Added: The third part of the input mask is also optional and indicates a single character or space that is used as a placeholder. By default, the field uses the underscore (_). If you want to use another character, enter it in the third part of your mask. Only the first character is considered. If this part should display/use the  semicolon (;) character is should be \; ( escape )
*Added: The forth part of the input, indicates a list of options that can be applied to input mask, separated by comma(,) character as follow: float,grouping,decimal,negative,digits,password,right,readonly,inserttype,overtype,nocontext,beep,warning,select

7.1.0.8 Apr 28, 2014
*Added: InsertMode property specifies whether the control is running in Insert mode ( by default ), or Overtype mode.
*Added: AllowToggleInsertMode property specifies whether the control is toggling the InsertMode when the user presses the Insert key. For instance, set the AllowToggleInsertMode property on False, to prevent changing the InsertMode when user presses the Insert key.
*Added: AllowContextMenu property specifies whether the control displays the content menu when user right clicks the control.
*Added: SelectGotFocus property indicates whether the entire text is selected once the field receives the focus.

7.1.0.7 Feb 19, 2014
*Added: TextIncludeLiterals property determines the way the Text property returns or set the value of the field. For instance, having the Mask property on "`Hexa [0-9a-f]: `[0-9a-f][0-9a-f]", TextIncludeLiterals property on exClipModeLiteralsExclude, calling the Text  = "09", causes the field to display "Hexa [0-9a-f]: 09", else if the TextIncludeLiterals property is NOT exClipModeLiteralsExclude, calling the Text  = "09", causes the field to display "Hexa [0-9a-f]: __", as the 0 and 9 are found on the first literal part.
*Added: TextIncludeLiteralsLoseFocus property determines how the field shows its content once it loses the focus.
*Added: Value(ClipModeLiteralsEnum) returns the control's content as default, with literals or without literals. For instance, the Value(exClipModeLiteralsExclude) gets the typed characters only.
*Added: Password property, displays all characters as a black circle for TrueType fonts, * for others

7.1.0.6 Nov 20, 2013
*Added: ForeColorReadOnly property indicates the control's foreground when the control is read only
*Added: BackColorReadOnly property indicates the control's background when the control is read only
*Added: Shows the drop down button of the control using the current visual theme.
*Added: Closes the drop down list of masks when the mask editor loses the focus.

7.1.0.5 Sep 09, 2013
*NEW:   Tooltip support, so your warning can show up once the user enters any invalid character.
*Added: Warning property indicates the html message to be shown when the user enters an invalid character. For instance, "00:00:00;;;warning=invalid character" displays a "invalid character" tooltip once the user types in invalid character, in this case any character that's not a digit. The <%mask%> keyword in value, substitute the current mask of the field, while the <%value%> keyword substitutes the current value ( including the literals ).
*Added: AllowBeep property specifies whether the control plays a beep once the user enters any invalid character
*Added: RClick event, fires when the user right clicks the control.

7.1.0.4 Jul 17, 2013
*Fixed: The mask is removed if the user selects the Delete item from the mask's context menu.
*Fixed: Can not enter numbers, if the minim margin of {} literal is not zero. For instance {1950,2050}, does not accept any number.
*Fixed: The CTRL + X, or Cut from the context menu, does not copy the entire text to the clipboard, inside a input mask field.
*Fixed: In MS Access, the control loses its data once the Visible property is set on False or when the control is hosted to a tab control, and user changes the pages.

7.1.0.3 May 29, 2013
*Fixed: Moves the cursor after the typed literal. For instance, having "##:##", and user types : the cursor will move right after : character, instead in front of it
*Fixed: Unable to complete an ANY entity ( * ) in an input mask editor, if the next entity eats the typed character.
*Fixed: Prevents moving to a typed literal if there are editable entities to it. Having the mask "##.##.## 00", the cursor is moved to first 0 literal found, instead completed  available entity.
*Fixed: The cursor does not advance to the next literal, while user types the literal and the  focused entity is a number ({} entity)

7.1.0.2 May 13, 2013
*Added: CTRL + A, selects all text in caret-type editor.
*Added: Advances to the next field if the current entity is a number, and there is no other possibility. For instance, having the input mask such as "{0,23}:{0,59}:{0,59}", and user types 12, the cursor is advanced to the next field automatically.
*Added: The mask editor selects the entity from the cursor, when user double clicks it. For instance, having the "10:20", clicking the 2 will highlight 20, instead the entire text
*Added: Ability to specify the mask's value with or without literals. For instance, having (####) ###-###, the mask field is completed if setting 0744845287, (0744)845287, (0744)  845 287, or (0744)  845-287, and so on

7.1.0.1 Apr 17, 2013
*NEW:   Major/Radical improvements for input-mask fields.
*Added: Characters enclosed in double quotation ("" or ``) marks will be displayed literally. For instance, the "`Prefix: `(###)", displays Prefix: (___).
*Added: The # in a mask field indicates a digit or space (entry not required; blank positions converted to spaces, plus and minus signs allowed), instead digits only.
*Added: The 0 in a mask field indicates a digit (0 through 9, entry required; plus [+] and minus [-] signs not allowed).
*Added: The 9 in a mask field indicates a digit or space (entry not required; plus and minus signs not allowed).
*Added: The & in a mask field indicates any character or a space (entry required).
*Added: The C in a mask field indicates any any character or a space (entry optional).
*Added: The a in a mask field indicates any letter, digit, or space (entry optional).
*Added: The L in a mask field indicates letters (a through z, A through Z, entry required).
*Added: The   ( ALT + 174 ) causes the characters that follow to be converted to uppercase, until   ( ALT + 175 ) is found.
*Added: The   ( ALT + 175 ) in a mask field causes the characters that follow to be converted to lowercase, until   ( ALT + 174 ) is found. For instance, the " * . * . *" specifies a mask such as _._._ where the first and third parts are in lowercase, while the middle part shows in uppercase. If the user types www.exontrol.com, the mask field displays www.EXONTROL.com. For instance, " [a-zA-z]  *", causes the first character to be an upper letter case, while the rest is in lower case, while " [a-zA-z] *" causes just the first letter in upper case, while the rest let the as they are type.
*Added: The ! in a mask causes the input mask to fill from right to left instead of from left to right.
*Added: /NET version

3.0.0.2 Apr 14, 2011
*Fixed: Aligns the drop down window to a monitor, so it won't show between them. ( for instance, the second monitor is to the left of the primary monitor.
*Fixed: The MDI form requires an extra click to activate it, once a modeless dialog is closed. The dialog contains a VB6 UserControl that hosts the control. ATL3.0 BUG

3.0.0.1 July 27, 2009
*Added: 64-bit support
*Added: UNICODE support

2.0.0.1 January 13, 2009
*Added: Compatible with the Data Execution Prevention (DEP). (SpecialBuild:3000)
*Added: Right property right aligns text in a single-line or multiline edit control.
*Added: Locates the closest position where the typed character can be inserted.
*Fixed: The excel vba fires "Run-time error '28', Out of Stack space", when running an user-form. ( IQuickActivate )

1.0.1.2 April 28, 2005
*Fixed: Calling the Unload Me during the KeyDown event is not safe.

1.0.1.1 February 02, 2005
*Added: Support for ALT keys.
*Added: The KeyCode parameter of KeyDown, KeyUp events passed by reference.
*Added: The KeyAscii parameter of KeyPress event passed by reference.
*Fixed: If the MaskFloat property is True, the Text doesn't replace the editors text whith the given string but appends it

1.0.1.0 December 21, 2004
*NEW:   Ability to mask a floating point number with digit grouping.
*Added: MaskFloat property. Specifies whether the Mask property masks a floating point number.

1.0.0.9 November 03, 2004
*Added: Displays the control's content in the VFP-IDE (design mode ).

1.0.0.8 October 15, 2003
*Help:  Updated
*Fixed: Changing the ActiveMask property fails if there are no masks.

1.0.0.7 February 05, 2003
*Fixed: The ReadOnly property is read only at runtime.

1.0.0.6 November 17, 2002
*Added: Version property. Specifies the control's version
*Fixed: Text property ignores the literal characters.

1.0.0.5 May 28, 2002
*Added: ActiveMask property. Retrieves or sets a value that indicates the index of active mask
*Added: MaskChange event. Occurs when the user changes the control's mask.
*Added: VisibleMasks property. Specifies the number of visible items in the control masks list.
*Fixed: In VFP, the control's font cannot be changed in design mode.
*Fixed: The dropdown size is calculated wrong if selected font is Arial. 

1.0.0.4 March 15, 2002
*Fixed: Type property isn't persisted
*Fixed: GotFocus and LoseFocus events are never fired by clicking in the control area.
*Added: SelStart property. Returns the starting point of text selected
*Added: SelEnd property. Returns the ending point of text selected

1.0.0.3 March 05, 2002
*Fixed: If the entire text is selected, and the user presses Delete or BackSpace key, the edit's content is not cleared.
*Changed: Copyright information.

1.0.0.2 December 06, 2001
*Fixed: license

1.0.0.1 December 06, 2001
* Initial Release