exgauge - what's new
23.0.0.4 Jan 22, 2024
*Added: The ExecuteTemplate() method can return the value of a variable. For instance, the eXSurface's PointToPosition method uses variables by reference which is not supported in PowerBuilder. For that you can use a code like ExecuteTemplate("dim x,y;x=-1;y=-1;PointToPosition(x,y);x") that returns the x-position (surface's coordinates) of the current mouse pointer. In the same manner you can use ExecuteTemplate("dim x,y;x=-1;y=-1;PointToPosition(x,y);y") to return the y-position.
*Added: The `format` operator of expression properties supports formatting the date values, using d, dd, ddd, ddd (day of the month as digits, with or without leading zeros, abbreviated day of the week, day of the week as specified by the current locale ), m, mm, mmm, mmmm (month as digits, with or without leading zeros, abbreviated month, month as specified by the current locale), y, yy, yyy, yyyy (year represented only by the last digits, by a full four or five digits, depending on the calendar used) literals. For instance, the "date(value) format `mmm d, yyyy`" gets the value in MMM d, YYYY format using the current locale, such as "Jan 12, 2023"
*Added: The <solidline> and <dotline> HTML tags support color in RGB format using the <solidline RRGGBB> or <dotline RRGGBB> syntax, which indicates the color to show the solid or dotted line

23.0.0.3 Oct 11, 2023
*Added: The ShowToolTip method can be used to update the object's tooltip, title or position. For instance, ShowToolTip(`<null>`,`<null>`,,`+8`,`+8`) during MouseMove event, shows the tooltip of the object moved relative to its default position.
*Fixed: The ShowToolTip() method works improperly as it may show the tooltip to a different position
*Added: The control's tooltip is shown when the cursor hovers it no matter if the window that hosts the control is activated

23.0.0.2 Jun 19, 2023
*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: 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)

23.0.0.1 Feb 15, 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. The ImageSize property specifies the size to show the icons using the Column.HeaderImage, Items.CellImage or Items.CellImages property, the cell's check-box or radio-button using the Column.Def(exCellHasCheckBox), Column.Def(exCellHasRadioButton), Items.CellHasCheckBox, Items.CellHasRadioButton property, the default-size of <img>number[:width]</img> tags within ex-html captions, unless the width is not specified, the size of expand/collapse glyphs, sorting icon (ascending or descending), drop-down or close filter button. The ImageSize property defines the size (width/height) of the icons within the control's Images collection. For instance, if the ICO file to load includes different types the one closest with the size specified by ImageSize property is loaded by Images method. The ImageSize property does NOT change the height for the control's font.
*Fixed: The AttachTemplate method fails if using "handle" keyword on x64 version

22.0.0.3 Sep 28, 2022
*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: A GPF may occur on closing the form/window/dialog if one or more events are handled by AttachTemplate method

22.0.0.2 May 23, 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}')

22.0.0.1 Mar 28, 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 

21.0.0.3 Aug 11, 2021
*Added: Documentation for eXGauge/JS (http://exontrol.com/rhelp.jsp?product=exgauge&config=/js)
*Added: Sets or gets the control's Font property in design mode, for the /NET version
*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

21.0.0.2 May 05, 2021
*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
*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)

21.0.0.1 Jan 27, 2021
*Added: ExGauge.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: 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

20.0.0.1 Jun 03, 2020
*Fixed: FormatAnchor(False) = vbNullString fails (vbNullString is a special VB constant that denotes a null string. The "" literal is an empty string)

19.0.0.1 Dec 11, 2019
*Fixed: Any expression that includes the "in" operator fails.

18.0.0.2 Jun 10, 2019
*Added: The LayerDragAny property specifies the index of the layer to drag (rotate or move) once the user clicks anywhere on the control. For instance, if your needle or knob is too small to touch so you can change the gauge's value, you can specify the LayerDragAny property to needle or knob layer and so any click on the gauge simulates as it would you click the needle or knob layer itself.

18.0.0.1 Apr 01, 2019
*Added: Layer.Idem property ensures that the layer's offset and rotation-angle is equal for all idem layers (separated by comma character). For instance, you can use the Idem property to rotate or move multiple-layers once a layer is moved or rotated.
*Added: Layer.Grayscale property is of numeric type instead of boolean, which indicates the percent (0-100) value to convert the image to grayscale as 0 indicates the original image, while 100 full converts the image to gray.
*Added: LayerAutoSize property on -1, resizes proportionally all layers based on the first visible layer if it displays a image/picture on the layer's background. In conclusion, while the LayerAutoSize property on -1, if the first visible layer displays no picture, all layers are stretches all the layers to the control's view, else if the first visible layer displays a picture, all layers are scaled proportionally to fit the control's view.
*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.

17.0.0.1 Aug 15, 2018
*NEW:   Ability to save the control's view to a picture
*Added: The CopyTo method copies/exports the control's view to BMP, PNG, JPG, GIF, TIFF, PDF or EMF graphical files.
*Added: FreezeEvents(Freeze) method prevents firing any event. For instance, FreezeEvents(True) freezes the control's events, no no event is fired, until the FreezeEvents(False) is called.
*Added: AttachTemplate sample

16.0.0.1 May 14, 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.
*Fixed: A Layer with OnDrag property on exDoRotamove does not properly compute its rotating center if the layers size automatically based on the control's view (DefaultLayer(exDefLayerWidth) = "width MAX height", .DefaultLayer(exDefLayerHeight) = "width MAX height", LayerAutoSize = -1 ).

15.0.0.1 Apr 18, 2018
*Added: DBase Plus samples

14.1.0.1 Oct 16, 2017
*NEW:   Multiple improvements for expression-like properties
*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.

14.0.0.1 Aug 14, 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, <img>picA</img> is equivalent with <img>pica</img>, or <img>PICA</img> 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. 
*Added: The Version property includes the SpecialBuild number of the assembly so it provides information like Major.Minor.Build.Revison.SpecialBuild.Type...
*Fixed: Prevents "Do you want to save ..." / "Save changes...' input box, when the user opens the form in design mode, and close it.

13.0.0.4 Feb 03, 2017
*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 )
*Fixed: Prevents a memory leak when loading icons, pictures, from BASE64 encoded strings (Images method, HTMLPicture picture).

13.0.0.3 Dec 09, 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: `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

13.0.0.2 Nov 10, 2016
*NEW:   Ability to make the control's form transparent, such as a widget (using layered windows)


*Added: LayerUpdate property specifies where the control updates its content. For instance, LayerUpdate property on exLayerUpdateScreen, makes the control to draw itself on the screen ( no form behind, form transparent )
*Added: AllowMoveOnClick property allows moving the window that contains the control to a new position, as you would do by clicking the form's title/caption.

13.0.0.1 Sep 19, 2016
*NEW:   Inplace support for eXRadialMenu component ( eXRadialMenu component can host the eXGauge component )
*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.
*Fixed: Captions on layers are not clearly displayed (Layer.Foreground.Caption property)

12.0.0.1 Jul 28, 2016
*Added: DPI-Aware Support
*NEW:   Support for EBN 1004 version ( DPI-Aware support ).
*Added: The exClientExt attribute of the EBN/BackgroundExt/BackgroundExtValue supports DPI values, if the number is followed by a D character. For instance, if the DPI scaling is 100%, the 16d is 16, while for a 150% DPI scaling, the 16d is 24. In other words, "top[4,back=RGB(0,0,255)]", draws a blue line on the top side of the object's background, of 4-pixels wide, no matter of DPI scaling, while "top[4D,back=RGB(0,0,255)]", draws the line of 4-pixels wide if DPI scaling is 100%, or 6-pixels wide if DPI scaling is 150% )
*Added: The coordinates of the CP clause of the Skin parameter of VisualAppearance.Add method can be followed by a D character, which indicates the value according to the current DPI settings. For instance, "CP:1 -2 -2 2 2", copies the EBN with the identifier 1, and displays it on a 2-pixels wider rectangle no matter of the DPI settings, while "CP:1 -2D -2D 2D 2D" displays it on a 2-pixels wider rectangle if DPI settings is 100%, and on on a 3-pixels wider rectangle if DPI settings is 150%.
*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%

11.0.0.1 Jun 24, 2016
*NEW:   Ability to make the control's form transparent, such as a widget (using regions)


*NEW:   Ability to include transparency of a picture in the clipping region. Previously, all transparent pixels of the picture are clipped off 
*Added: LayerClipToParent property indicates if the LayerClipTo method clips the control itself, parent or the root/owner of the control.
*Added: Layer.LayerClipToAlpha property 
returns or sets a value that indicates the value of the alpha channel to be included in the LayerClipTo region.
*Added: ClipPicture.AlphaFrom property Gets or sets a value that specifies the alpha-byte to start clipping the picture from. By default, the AlphaFrom property is 0.
*Added: ClipPicture.AlphaTo property Gets or sets a value that specifies the alpha-byte to end clipping the picture to. By default, the AlphaTo property is 254. 255 is an opaque pixel

10.0.0.1 Jun 07, 2016
* Initial Release