extoolbar - what's new
18.0.0.5 Jan 29, 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 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

18.0.0.4 Oct 23, 2023
*Added: The Background(exScrollHoverAll/500) property specifies whether the hover-all feature is by default (0), always on (-1) or disabled(1). By default (Background(exScrollHoverAll) = 0), the left/top, right/bottom and thumb parts of the control' scrollbars are displayed in hover state while the cursor hovers any part of the scroll bar (hover-all feature). The hover-all feature is available on Windows 11 or greater, if only left/top, right/bottom, thumb, lower and upper-background parts of the scrollbar are visible, no custom visual-appearance is applied to any visible part. The hover-all feature is always on If Background(exScrollHoverAll) = -1. The Background(exScrollHoverAll) = 1 disables the hover-all feature.
*Added: Show the Left/Top or Right/Bottom buttons of the control's scrollbar on Windows 11 or greater, while the cursor hovers the scrollbar's background.
*Fixed: The scroll button's appearance is restored to normal instead of hover state when the mouse button is released

18.0.0.3 Jul 24, 2023
*Added: The control's tooltip is shown when the cursor hovers it no matter if the window that hosts the control is activated
*Added: Update the samples to support x64 configuration (/COM version)
*Fixed: No control frame is shown in design-mode under MS Excel's spreadsheet

18.0.0.2 Mar 15, 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)

18.0.0.1 Dec 21, 2022
*NEW:   Ability to specify the size to show the icons/images/check-boxes/radio-buttons within the control
*Added: ImageSize property specifies the size of control' icons/check-boxes/radio-buttons. 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

17.0.0.3 Sep 07, 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.2 Jul 13, 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}')

17.0.0.1 Mar 30, 2022
*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%
*Fixed: The Background (exToolTipForeColor) property does not apply to the tooltip's title

16.0.0.1 Mar 3, 2021
*Added: ExToolBar.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)
*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

15.0.0.1 Nov 25, 2020
*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.3 Aug 31, 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.

14.0.0.2 Jun 10, 2020
*Fixed: A GPF occurs if using right, readonly, multiline or password options into an item of mask-editor.
*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.
*Fixed: Any expression that includes the "in" operator fails.

14.0.0.1 Apr 21, 2020
*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: The item's EditValue property returns the masking/placeholder characters, even the second parameter of the mask, includes 1, 2 or 3 values. For instance, "[mask=0000;1]" specifies the item's editing-mask displays 4 digits place-holders, and the item's EditValue returns the value(number) without including the masking/placeholder characters. So if the item's mask diplays: 12__, the item's EditValue returns "12" rather than "12__".

13.0.1.2 Feb 05, 2020
*Added: dBASE Plus samples
*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: The SelectItem event is not fired if the user presses the button's shortcut ( Item.Shortcut, Item.ShowAsButton property )
*Fixed: The sub-menu's / select drop down's arrow shows distorted when Windows's DPI is on.

13.0.1.1 Oct 07, 2019
*Added: Displays all available UI shortcut key combinations when the user presses the base key combination ( extended shortcut keys ). For instance, you have items with extended shortcut keys like CTRL + P + M, CTRL + P + N, and so on. The M and N shortcut keys will be displayed as soon as the user presses the CTRL + P base key combination.
*Fixed: Prevents showing duplicate shortcut keys. In case duplicate shortcut keys are found, the only enabled shortcut key is displayed.
*Fixed: Invokes the first enabled shortcut in case the control includes multiple items with the same shortcut keys. 
*Fixed: The user can't remove the current incremental search, if the user presses the Backspace key.

13.0.1.0 Sep 16, 2019
*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.

13.0.0.9 Jun 05, 2019
*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. 
*Fixed: Resizes the drop down popup / select arrow based on the current DPI settings.

13.0.0.8 Mar 25, 2019
*Added: The Version property includes the SpecialBuild number of the assembly so it provides information like Major.Minor.Build.Revison.SpecialBuild.Type...
*Fixed: "The object invoked has disconnected from its clients (Run-time error '-2147417848 (80010108)' )" may occur in MS Access, when calling the Items.Remove method, within a UserForm
*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.7 Jan 09, 2019
*Added: ShortcutKeysInfo property returns the list of shortcut keys that are currently available.
*Added: Item.Position property specifies the position of the item within its collection. You can use the Item.Position to insert an item at specified position.
*Fixed: Prevents displaying the item's debug information, for item with empty caption (Debug property on True)
*Fixed: A popup menu may be shown to the left instead of right, if it does not fit the current monitor.

13.0.0.6 Nov 01, 2018
*NEW:   Improvements for EditToolBar WSYIWYG tool.
*Added: The "X-Script: Copy" context menu, generates the x-script / template code and copies to the clipboard, that can be pasted to eXHelper tool to generate source code for other programming languages such as VBA, VB6, VB.NET, VB.NET for COM, VFP 6,VFP 9, C++, C++ Builder, C#, C# for /COM, X++ (Dynamics Ax 2009), Delphi 8 (. NET only), Delphi (standard), Visual Objects, PowerBuilder (Classic ), dBASE Plus, JavaScript, VBScript, Xbasic (Alpha Five), Visual DataFlex, Xbase++, and so on. 
*Added: The "X-Script: Invoke/Execute" context menu can be used to change the control, using the x-script code.
*Added: "key" option in the EditToolBar tool
*Fixed: Sometimes the item's editor is losing the caret (Item.AllowEdit property).

13.0.0.5 Aug 27, 2018
*NEW:   Ability to save the control's content in template/x-script format
*Added: AllowCopyTemplate property specifies whether the Shift + Ctrl + Alt + Insert sequence copies the control's content to the clipboard, in template form. For instance, you can press the Shift + Ctrl + Alt + Insert sequence, the control's generates its content in x-script format. Open the control's eXHelper, paste the generated x-script to the middle panel, and run it. Now, you can generate the source code, in different programming language such as: VBA, VB6, VB.NET, VB.NET for COM, VFP 6,VFP 9, C++, C++ Builder, C#, C# for /COM, X++ (Dynamics Ax 2009), Delphi 8 (. NET only), Delphi (standard), Visual Objects, PowerBuilder (Classic ), dBASE Plus, JavaScript, VBScript, Xbasic (Alpha Five), Visual DataFlex, Xbase++, and so on
*Added: ToTemplate property generates the control's template.
*Added: The [key=shortcut] field in the Item(s).ToString property indicates the value of the Item.Shortcut property ( serialize the Items.Shortcut property in ToString representation )
*Fixed: The Item.Items / SubMenu property returns nothing, if the item's Tab property is not -1 ( the item shows it's items to a page )

13.0.0.4 May 09, 2018
*Added: The ShortcutKeyFormat property specifies the expression that determines the format (including HTML tags) to display the shortcut keys. For instance, ShortcutKeyFormat property on "`<font ;14>` + caption" defines a bigger font to display the shortcut keys. The new keywords the ShortcutKeyFormat property knows are: caption keyword indicates a string as it is displayed, sca keyword specifies whether SHIFT, CTRL or ALT keys are pressed in the shortcut, and keys keywords indicates the base ( and extended ) key(s) the shortcut is defined.
*Added: Item.Shortcut property can specify no modifier key, and so the item's shortcut became the parent's shortcut modifier plus the shortcut itself. For instance, if the parent item has the shortcut "CTRL + A", and the item's shortcut is "P", it indicates that the item's shortcut is actually "CTRL + A + P", which indicates that the item is selected as soon as the user presses the CTRL + A, and then P key. You can use this option to easily assign shortcut to items, by inheriting the parent's shortcut. At least one shortcut of any parent should have a modifier key, else the shortcut of the item itself can not be invoked.
*Added: The Item.Shortcut property supports combination of letters/digits without using + separator. For instance: "CTRL + AAP" is equivalent with "CTRL + A + A + P"
*Fixed: Closes all popups if the user presses the ALT + SPACE to show the system menu.

13.0.0.3 Jan 29, 2018
*Added: The ShortcutKeyPressedModifers property indicates the combination of modifier keys whose shortcut keys are currently visible. For instance, call the ShortcutKeyPressedModifers property on exModifierAny and the control will show all available shortcut keys, for any combination of modifier keys ( even if they are not pressed ), of if exModifierCtrl + exModifierAlt it shows all short cut keys available when user presses the CTRL + ALT
*Added: The ShortcutKeyTransparent property ondicates the percent of transparency the shortcut keys are being displayed with.
*Added: Improves the way the control displays information in Debug mode. ( Debug property )
*Added: The Backspace does the same thing as Escape key ( closes the current popup )

13.0.0.2 Jan 05, 2018
*Added: The ShortcutKeyPadding property specifies the UI shortcut key's content padding.
*Added: The ShortcutKeyExtPaddingH property specifies the padding to be applied to the item (arranged horizontally) that displays the UI shortcut, so the ShortcutKeyAlign property aligns the UI shortcut relative to this.
*Added: The ShortcutKeyExtPaddingV property specifies the padding to be applied to the item (arranged vertically) that displays the UI shortcut, so the ShortcutKeyAlign property aligns the UI shortcut relative to this.
*Added: The Background(exShortcutKeyAppearance) specifies the visual appearance of the shortcut keys, using EBN objects
*Added: The Background(exShortcutKeyBackColor) specifies shortcut keys's background color
*Added: The Background(exShortcutKeyForeColor) specifies shortcut keys's foreground color

13.0.0.1 Dec 20, 2017
*NEW:   Advanced Shortcut Keys Support, including UI visual appearance when the user presses modifier keys, such as CTRL, ALT or SHIFT, or a combination of any of them
*Added: ShortcutKeyVisible property gets or sets a value that specifies whether the control's shortcut keys are visible or hidden.
*Added: Item.Shortcut property specifies the keys combination to invoke it. For instance, Shortcut property on "CTRL + A", indicates that the user can automatically select the item pressing the CTRL + A combination, or "CTRL + F1 + B", indicates that the item is being invoked as soon as the user presses CTRL + F1 and then B key. This is valid while the control's ShortcutKeyVisible property is exShowShortcutKeysToggle or exShowShortcutKeysToggleDelayed
*Added: ShortcutKeyAlignH property defines the alignment of the UI shortcut keys relative to the item that displays it, when the holder arranges the items horizontally.
*Added: ShortcutKeyAlignV property defines the alignment of the UI shortcut keys relative to the item that displays it, when the holder arranges the items vertically.

12.0.0.4 Oct 02, 2017
*Fixed: Prevents closing the current popup / sub-menu once the user presses the Alt modifier-key.
*Fixed: The CTRL + Escape closes all popups / sub-menus.
*Fixed: The control fails if adding a popup item with no sub-items
*Fixed: Un-highlights all visible items, when cursor leaves the control.

12.0.0.3 Jun 14, 2017
*Fixed: The "Ribbon Like" samples do not work properly, if the AllowToggleRadio property is True. In other words, an item with the Tab property set can not set it's state to zero, or an item in the radio-group is always checked.
*Fixed: A GPF occurs if the application is started from design mode ( demo / evaluation / trial version only )
*Fixed: The Sample\EBN folder is missing from the installation folder (C:\Program Files[ (x86)]\Exontrol\ExToolBar\Sample\EBN)

12.0.0.2 Apr 26, 2017
*Added: The "[hid]" flag in Item.ToString representation specifies whether the item is hidden. By default, if the flag is missing, the item is visible.
*Added: "Hidden" option in the EditToolBar tool
*Fixed: A GPF may occur if using the EditToolBar tool, with DEBUG version

12.0.0.1 Mar 15, 2017
*NEW:   Minimize Support
*Added: The Item.Visible property on False, for an item (or any parent) that hosts pages of the control (Tab), displays the minimize state of the of control. In other words, the pages of the control shows up, once the user clicks the header.
*Added: Increases the speed to find the items based on its ID or Caption
*Added: Ribbon-Minimize sample

11.1.0.2 Jan 25, 2017
*Added: Background(exMenuHotBorderColor) property specifies the color to show the frame around the item from the cursor.
*Added: Background(exMenuSelHotBorderColor) property specifies the color to show the frame around the selected item from the cursor.
*Fixed: Prevents a memory leak when loading icons, pictures, from BASE64 encoded strings (Images method, HTMLPicture picture).

11.1.0.1 Dec 07, 2016
*Added: The Item.X, Y properties support the iwidthof (unary operator), that returns the width in pixels, of the item with the specified identifier. For instance "iwidthof(10)" returns the width of the item with the identifier 10. Currently, you can use the iwidth keyword, that returns the width of the currently item, or iwidthof (unary operator) to retrieve the width of a specified item.
*Added: The Item.X, Y properties support the iheightof (unary operator), that returns the height in pixels, of the item with the specified identifier. For instance "iheightof(10)" returns the height of the item with the identifier 10. Currently, you can use the iheight keyword, that returns the height of the currently item, or iheightof (unary operator) to retrieve the height of a specified item.
*Fixed: The toolbar's buttons are not size correctly, with the Windows set to Classic theme.

11.0.0.1 Sep 14, 2016
*NEW:   Support for EBN 1004 version ( DPI-Aware support ).
*Added: 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%.

10.0.0.1 Aug 04, 2016
*Initial Release