expression - what's new
20.0.0.3 Feb 19, 2024
*Added: LineHeight property specifies an expression that determines the height of the line within the editor. For instance, LineHeight = "value + 4*dpi", increases the line's height with 4 dots ( 4 pixels for 100%, 6 pixels for 150% and so on ), also LineHeight = "18" defines the line's height to be exactly 18 pixels.
*Fixed: The Background (exToolTipForeColor) property does not apply to the tooltip's title
*Fixed: The AttachTemplate method fails if using "handle" keyword on x64 version

20.0.0.2 Nov 20, 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

20.0.0.1 Sep 04, 2023
*Added: DPI-Aware Support
*Added: New visual appearance for all internal icons to support high DPI resolution (100%, 125%, 150%, 175%, 200% and 300%)
*Fixed: The internal icons are stretched and look distorted when DPI scaling is not 100%

19.0.0.1 Mar 27, 2023
*NEW:   Support for "FileGroupDescriptor" and "FileContents" clipboard format, or ability to accept messages or attachments by drag and drop from the MS Outlook application (or any other applications that use these clipboard format)
*Added: During the OLEDragDrop event the Data.Files.Count property returns the number of messages or attachments being dropped, while Data.Files(index) property returns the fully path-name of the file that contains the message or the attachment. The control automatically extracts the message/attachment's content to a temporarily file, as you would drop a file from Windows Explorer.
*Fixed: The Data.Files(i) property returns only the first letter of the file rather than the full name of the dragged file (/COM version)

18.0.0.2 Oct 19, 2022
*Added: PowerBuilder 21.0 sample
*Fixed: On some machines, the format keyword (within expression properties) provides more than 2 decimals for French(Canada) regional settings (for instance "12.3456 format ``" displays 12.3456 instead of 12.35)
*Fixed: Clicking (Custom) property generates "Class Not Registered" error (Windows x64, 'Looking for object with CLSID:{7EBDAAE1-8120-11CF-899F-00AA00688B10}')

18.0.0.1 Jun 15, 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-name> 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 

17.0.0.1 Jun 23, 2021
*Added: KeywordEnum.exKeywordBIAS defines the bias keyword
*Added: The expression properties supports `bias` constant that defines the difference, in minutes, between Coordinated Universal Time (UTC) and local time. For example, Middle European Time (MET, GMT+01:00) has a time zone bias of "-60" because it is one hour ahead of UTC. Pacific Standard Time (PST, GMT-08:00) has a time zone bias of "+480" because it is eight hours behind UTC. For instance, date(value - bias/24/60) converts the UTC time to local time, or date(date('now') + bias/24/60) converts the current local time to UTC time 
*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)

16.0.0.1 Apr 21, 2021
*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)
*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

15.0.0.1 Jan 18, 2021
*Added: Expression.pdf (include the control's documentation in PDF format)
*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

14.0.0.1 Feb 12, 2020
*Fixed: The scroll bar's thumb minimum-size is equivalent with the size of the size of scroll's buttons. In other words, the size of the scroll's buttons specify the thumb minimum-size. Previously, the thumb's minimum-size was 6-pixels.

13.0.0.3 Oct 23, 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.

13.0.0.2 Jan 21, 2019
*Added: lpad keyword, as a lpad b, pads the value of a to the left with b padding pattern. For instance, 12 lpad "0000" generates the string "0012".
*Added: rpad keyword, as a rpad b, pads the value of a to the right with b padding pattern. For instance, 12 lpad "____" generates the string "12__".
*Added: concat keyword, as a concat b concatenates the a (as string) for b times. For instance, "x" concat 5, generates the string "xxxxx"
*Fixed: Sometimes, the user can't scroll to the last line, if the last scrollable line is partially visible.

13.0.0.1 Nov 12, 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). 
*Fixed: Invalidates the expression if it includes multiple values separated by comma, and no array or switch operators. For instance, the expression "11,22,33" or "(11,22,33)"  is invalid while the expression "1 array 11,22,33" or "1 array (11,22,33)" valid. 

12.0.0.4 Oct 03, 2018
*Added: Miscellaneous changes for control's scrollbar-extension such as: contiguously scrolls the control's content line by line, or page by page ( if CTRL is pressed ) while the user keeps clicking the up/left top/right side of the thumb-extension, closes the scrollbar-extension as soon as the user presses ALT + F4, ALT + TAB, shows the scrollbar-extension only if effective mouse movement occurs, hides the scrollbar-extension as soon as the owner control loses the focus
*Fixed: Can't create single-escape character string inside expressions. For instance "value replace `\` with ``", should be "value replace `\\` with ``", which indicates that any \ ( escape character) is removed from the value. Shortly, any quote or escape character must be preceded by another escape character in string expressions.
*Fixed: The array operator of an expression can't retrieve the first element within a collection/array with a single element only. For instance "0 array (`first` split `,`)" returns empty, while "0 array (`first,` split `,`)" returns first

12.0.0.3 Jun 27, 2018
*Added: FormatABC method formats the A,B,C values based on the giving expression and returns the result. For instance, FormatABC("dpi") returns a numeric value that indicates the display settings ( aspect ratio ).
*Fixed: Allows using custom operators that start with the same name, such as exBarPercent,  exBarPercent100, and so on
*Fixed: The expression is valid if matching an operator/keyword followed by digits ( For instance acos1 is valid, while it should be invalid )
*Fixed: Hides the control's tooltip when it loses the focus.

12.0.0.2 Feb 09, 2018
*Added: a `like` b binary-operator compares the string a against the pattern b. The pattern b may contain wild-characters such as *, ?, # or [] and can have multiple patterns separated by space character. In order to have the space, or any other wild-character inside the pattern, it has to be escaped, or in other words it should be preceded by a \ character. For instance "value like `F*e`" matches all strings that start with F and ends on e, or "value like `a* b*`? indicates any strings that start with a or b character.
*Added: The 0x or 0X sequence proceed the hexa-representation of a number, in properties that support expressions. For instance, "value = 0x100" specifies whether the value is 256 ( 0x100 in hexa-representation ) 
*Added: `hex` a unary-operator converts the giving string from hexa-representation to a numeric value, or converts the giving numeric value to hexa-representation. For instance, hex(`FF`) returns 255, while the hex(255) or hex(0xFF) returns the `FF` string. The hex(hex(`FFFFFFFF`)) always returns `FFFFFFFF` string, as the second hex call converts the giving string to a number, and the first hex call converts the returned number to string representation (hexa-representation). 
*Added: a `bitand`, `bitor`, `bitxor` b binary/bitwise-operator computes the AND/OR/XOR operation on bits of a and b, and returns the unsigned value. For instance, 0x01001000 bitand 0x10111000 returns 0x00001000, 0x01001000 bitor 0x10111000 returns 0x11111000, 0x01110010 bitxor 0x10101010 returns 0x11011000.
*Added: a `bitshift` b, binary/bitwise-operator shifts every bit of a value to the left if b is negative, or to the right if b is positive, for b times, and returns the unsigned value. For instance, 128 bitshift 1 returns 64 ( dividing by 2 ) or 128 bitshift (-1) returns 256 ( multiplying by 2 )
*Added: `bitnot` x unary/bitwise-operator flips every bit of x, and returns the unsigned value. For instance, bitnot(0x00FF0000) returns 0xFF00FFFF.

12.0.0.1 Nov 15, 2017
*NEW:   Custom Operators Support
*Added: AddCustomOperator(Name, Keyword, ToolTip, Type) adds a custom operator with specified name of specified type. For instance, the .AddCustomOperator("itembar", "<b>itembar</b> <fgcolor=808080>a</fgcolor>", "The <b>itembar</b> a (unary operator) retrieves the value of the ItemBar property.", exUnaryOperator) adds the itembar unary operator. The newly custom operators are added if the name of the operator is not empty, contains only letters and was not already added.
*Added: ClearCustomOperators method clears custom operators. This method clears all entries being added through the AddCustomOperator method.
*Added: AllowValueKeyword property specifies whether the expression supports the value keyword. By default, the AllowValueKeyword property is True.
*Added: AllowDefaultOperators property specifies whether the expression supports default operators. By default, the AllowDefaultOperators property is True.

11.0.0.1 Sep 11, 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 a memory leak when loading icons, pictures, from BASE64 encoded strings (Images method, HTMLPicture picture).
*Fixed: A GPF occurs if the application is started from design mode ( demo / evaluation / trial version only )
*Fixed: Prevents "Do you want to save ..." / "Save changes...' input box, when the user opens the form in design mode, and close it.

10.0.0.2 Oct 05, 2016
*NEW:   Support for EBN 1003 version.
*Added: EBN 1003 implements Colorable Region Support which defines a portion/region of the EBN object where the color of the EBN is applied. For instance, at runtime the identifier 0x1FF0000 applies blue color to all colorable parts that compose the EBN object. The EBN color is not applied to not-colorable portions of the EBNs.
*Added: The Handle parameter of Images method can be a string that specifies the ICO file to be loaded. The ICO file format is an image file format for computer icons in Microsoft Windows. ICO files contain one or more small images at multiple sizes and color depths, such that they may be scaled appropriately. For instance, Images("e:\working\sync.ico") method  adds the sync.ico file to the control's Images collection.

10.0.0.1 Aug 08, 2016
*Added: DPI-Aware Support
*NEW:   Support for EBN 1004 version ( DPI-Aware support ).
*Added: The expression properties support `dpi`, `dpix` and `dpiy` constants that returns the current DPI setting on x/y scale. For instance, the "value * dpi" returns the value if the DPI setting is 100%, or value * 1.5 in case, the DPI setting is 150%

9.0.0.4 Apr 25, 2016
*Added: `MIN` and `MAX` binary-operators to get the MIN and MAX value. For instance, the expression `value MIN 10 MAX 100` returns always a value between 10 and 100.
*Added: `sin`, `asin`, `cos`, `acos` unary-operators to get the associated trigonometric functions. For instance `2 * asin(1)` returns the value of PI
*Added: `sqrt` unary-operator returns the square root of the element, so sqrt(81) returns 9, as 9^2 is 81
*Added: date(`now`) unary-operator returns the current date-time ( as double ), while the date(``) returns the current date ( no time included )

9.0.0.3 Feb 15, 2016
*Added: The result panel displays the time to evaluate the expression, in ms
*Added: EvaluationTime property indicates the time in ms, to evaluate the expression
*Fixed: Prevents showing the control's view in design mode, while running on FORTH system ( /COM version )

9.0.0.2 Nov 11, 2015
*Added: lfind binary-operator for format/expression. The a lfind b searches the first occurrence of the string b within string a, and returns -1 if not found, or the position of the result ( zero-index ). For instance, `ABCABC` lfind `D` returns -1, while  `ABCABC` lfind `C` returns 2.
*Added: rfind binary-operator for format/expression. The a rfind b searches the last occurrence of the string b within string a, and returns -1 if not found, or the position of the result ( zero-index ). For instance, `ABCABC` rfind `D` returns -1, while  `ABCABC` rfind `C` returns 5.
*Added: reverse unary-operator for format/expression. The reverse(a) reverses the order of the characters in the string a, For instance, the reverse("Mihai") returns "iahiM"

9.0.0.1 Jun 25, 2015
*Initial Release