exswimlane - what's new
21.0.0.1 Jan 22, 2024
*NEW:   Ability to specify the size to show the icons, check-boxes, expand-collapse glyphs for 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: The Background (exToolTipForeColor) property does not apply to the tooltip's title

20.0.0.1 Oct 16, 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.6 Aug 16, 2023
*Fixed: Sometimes, the FitToClient() method does not zoom the control's content to fit its content
*Fixed: Can't scroll to origin while the Coord property is exCartesian + exAllowPositiveOnly, and Zoom property is different than 100% 
*Fixed: The caption of a straight link may be hidden based on elements positions

19.0.0.5 Jun 07, 2023
*Fixed: The CopyTo method shows a single element if there are elements with the Shape property of exShapeCircle, exShapeRhomb or exShapeRound
*Fixed: An infinite loop may occur if calling the Arrange method while DefArrange(exDefArrangeDir) = 1 (vertical arrangement)
*Fixed: Clicking (Custom) property generates "Class Not Registered" error (Windows x64, 'Looking for object with CLSID:{7EBDAAE1-8120-11CF-899F-00AA00688B10}')

19.0.0.4 Feb 22, 2023
*Fixed: The FitToClient() method always includes the origin (0,0) point
*Fixed: A custom-path link may be selected as it would be rectangular
*Fixed: The user can't select a link (of exLinkStraight type) almost vertical

19.0.0.3 Nov 07, 2022
*Fixed: Shows the link's arrow more accurate when the link's width is greater than 1 (LinksWidth property, Link.Width property)
*Fixed: The ID parameter of the Arrange method is ignored
*Fixed: The FitToClient method does not work if the Coord property is exCartesian + exAllowPositiveOnly, and Zoom property is different than 100% 

19.0.0.2 Jun 27, 2022
*Added: PositionToPoint(x,y) method converts the surface position to screen coordinates
*Added: PointToPosition(x,y) method converts the screen coordinates to surface position
*Fixed: The lines of the link between objects/elements are not shown contiguously if the link's width is greater than 4

19.0.0.1 Mar 14, 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 

18.1.0.2 Feb 21, 2022
*NEW:   Cartesian coordinates
*Added: Coord property specifies the type of coordinates the elements display within the surface. For instance, Coord property on exCartesian | exAllowPositiveOnly shows only positive Cartesian coordinates (only the right-up panel relative to origin is displayed). The exAllowPositiveOnly flag prevents element with negative values when the user moves the elements/pools by drag and drop.
*Fixed: Prevents showing the link's arrow smaller when multiple links are connected to the same element (ShowLinks property includes exShowExtendedLinks flag)

18.1.0.1 Jan 05, 2022
*NEW:   Ability to arrange orthogonally the link's path by drag and drop the control-points
*Added: LinkControlPointEnum.exOrthoArrange flag specifies that the user can arrange orthogonally the link's path by drag and drop the link's control- points. For instance, AllowLinkControlPoint on LinkControlPointEnum.exOrthoArrange Or LinkControlPointEnum.exMiddleControlPoint Or LinkControlPointEnum.exControlPoint Or LinkControlPointEnum.exEndControlPoint Or LinkControlPointEnum.exStartControlPoint indicates that the focused link displays all control-points (including the start/end control-points) and it can be orthogonally arranged once the user drag and drop a control-point. The link can be orthogonally arranged only if its path includes orthogonally lines (vertical or horizontal lines). If the LinkControlPointEnum.exOrthoArrange flag is missing the user can freely arrange the link by drag and drop any of its control-points.
*Fixed: Simplifies (removing the duplicate neighbor control-points, reducing the contiguously orthogonal lines, removing the loop once a control-point coincide with another) the link's path while it is customized by drag and drop only

18.0.0.3 Nov 29, 2021
*Added: PowerBuilder 21.0 sample
*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: 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)

18.0.0.2 Oct 20, 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: The Link.CustomPath property (XML attribute as well) is not properly restored on computers with regional settings other the English (United States)

18.0.0.1 Aug 23, 2021
*Added: ExSwimLane.pdf (include the control's documentation in PDF format)
*Added: Sets or gets the control's Font property in design mode, for the /NET version
*Fixed: The caption of the link is not placed adequately when you design a custom path for the link (AllowLinkControlPoint, Link.AllowControlPoint, Link.CustomPath property)

17.0.0.3 May 10, 2021
*Added: Documentation for eXSwimlane/JS (http://exontrol.com/rhelp.jsp?product=exswimlane&config=/js)
*Fixed: The Arrange method always arrange all elements, instead of selected elements
*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: Can't delete the pool over a link of exLinkDirect type

17.0.0.2 Mar 03, 2021
*Added: Allows cross-links for all type of links (a cross-point is defined by intersection of a horizontal with a vertical line). Previously, the cross-points are shown for exLinkRectangular type only
*Added: Serializes the link's CustomPath property to XML format, using the SaveXML/LoadXML methods
*Added: Fires the LayoutStartChanging(exLinkControlPoint) / LayoutEndChanging(exLinkControlPoint) events as soon as user starts / ends changing the link's control points

17.0.0.1 Jan 11, 2021
*NEW:   Ability to customize the path of any link, by drag and drop the link's control points
*Added: The AllowLinkControlPoint property indicates the control points of the link, the user can use to customize the link's path. The property is applied to all links (unless the Link.AllowControlPoint property indicates a different value). For instance, exStartControlPoint | exEndControlPoint specifies that the user can change only the start/end position of the link. The exStartControlPoint and exEndControlPoint points are marked with black squares and defines the link's control points to change the link's start (Link.StartPos property) and end (Link.EndPos property) position. The exControlPoint points are marked black circles and  defines the corners of the link's path. You can remove a  exControlPoint points by dragging to another, so intermediate exControlPoint points are removed. You can move all control points of the link at once, if SHIFT key is pressed. The exMiddleControlPoint points are marked with gray circles, and are displayed between two exControlPoint points, to let the use add new exControlPoint points, to redefine the link's path. 
*Added: The Link.AllowControlPoint property defines the control points for an individual link, the user can use to customize the link. The AllowControlPoint property is similar with the control's AllowLinkControlPoint property, excepts that it is applied to a link only. For instance, exNoControlPoint specifies that the link displays no control points, so the user can not customize the link's path. The link's control points are displayed only if the control is not locked (control's DesignMode property is not exDesignLock)
*Added: The Link.CustomPath property specifies the link's custom path, as a string of x,y proportions separated by comma. The CustomPath property contains the proportions of link's control-points, as a "x,y,x,y,x,y,...". The x, y are proportions of link's control-points relative to the start/end points of the link. The 0,0 indicates the link's start point, while 1,1 indicates the link's end point. For instance, "0.5,0,0.5,1" defines the link to go from start (0,0) to (0.5,0), then (0.5,1), and finally to the end (1,1)

16.0.0.5 Nov 20, 2020
*Added: Converts the ID and UserData properties of the Link object to integers (if conversion is possible), while using the LoadXML method
*Fixed: FormatAnchor(False) = vbNullString fails (vbNullString is a special VB constant that denotes a null string. The "" literal is an empty string)

16.0.0.4 Sep 30, 2020
*Fixed: The LinkFromPoint method returns wrong straight-link (Link.ShowLinkType = exLinkStraight)
*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: The Element.BringToFront/SendToBack methods brings the contained control in front, or sends it to the back (element's Type is exElementHostControl or exElementHostWindow

16.0.0.3 Aug 03, 2020
*NEW:   CopyTo support, or ability to export the control's content to EMF, BMP, JPG, PNG, TIF or PDF format
*Added: CopyTo method exports the control's content to EMF, BMP, JPG, PNG, TIF or PDF format. For instance, the CopyTo("image.png") generates the PNG graphics from the control's content. For instance, the CopyTo("shot.pdf|33.11 in x 46.81 in|0 0 0 0|single") exports the control's content to an A0 single PDF page, with no margins
*Fixed: The caption of a straight-link is not visible while the link is shown horizontally or vertically (Link.ShowLinkType = exLinkStraight)

16.0.0.2 Jun 08, 2020
*NEW:   Redefine the way the control shows round-links, for a better look
*Added: Ability to zoom the control's content using two-fingers on a touchpad (swipe up or down with two fingers, scrolls the control's up or down)
*Fixed: A straight-horizontal or vertical link may be shown as solid, even the link's type is dashed or dotted, while the link is displayed as round (ShowLinksType is -1)

16.0.0.1 Apr 08, 2020
*NEW:   Radical improvements for the layout the Arrange method generates
*Added: By default, the DefArrange(exDefArrangeDX), DefArrange(exDefArrangeDY) property is 36 pixels.
*Fixed: The Arrange method may generate different layout/arrangement for different input-elements

15.0.0.1 Feb 10, 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 Arrange method often causes a lockup of the control, as soon as there are sub-items somewhere (Elements.Insert)

14.1.0.3 Nov 19, 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.

14.1.0.2 Sep 2, 2019
*NEW:   Reserve-Neighbors support
*Added: The AllowMoveNeighbors property indicates whether the neighbor elements are shifted once the selection is moved or resized, so they won't intersect the dragging objects.
*Added: Improvements of the Arrange method, if the chart includes multiple input-elements ( elements with no incoming links, re-arranging the input elements ).
*Fixed: Resizing multiple elements, moves non-focusing elements ( AllowResizeSelection property )

14.1.0.1 May 08, 2019
*NEW:   Ability to compact the layout of the elements, once the Arrange method is performed.
*Added: DefArrange(exDefArrangeCompact) property of boolean type, specifies whether the elements should be compacted, during the Arrange operation. By default, the DefArrange(exDefArrangeCompact) property is True, which indicates that the Arrange method automatically compacts the layout of the elements. Set the DefArrange(exDefArrangeCompact) property on False, to prevent compacting the elements during the Arrange method. The DefArrange call has effect prior to Arrange method only.
*Fixed: Redesigning the alignment of the elements ( Arrange method ), so the full area does not get enlarger than initial layout. 
*Fixed: Resizes the drop down popup / select arrow based on the current DPI settings.

14.0.0.4 Feb 20, 2019
*Added: The StartPos property of the Link, determines the direction where the element is arranged by the Arrange method for horizontal/vertical layout. For instance, if the link's StartPos is 0 ( LeftAlignment ), the start element of the link will be arranged to the left of the end element, and if StartPos property is 2 ( RightAlignment ), the end element goes to the right side of the start element.
*Fixed: Sometimes, the DefArrange(exDefArrangeDX) / DefArrange(exDefArrangeDY) property is applied twice, when Arrange method is performed.
*Fixed: The cross-links change the drawing order, when user moves the surface ( ShowLinksWidth, ShowLinksStyle or ShowLinksColor property is used, cross-link flicker )
*Fixed: Sometimes, the elements get overlapped when Arrange method is performed.

14.0.0.3 Feb 11, 2019
*Added: Link.StartPos / Link.EndPos property supports new values like UpAlignment(3), which indicates that the link starts / ends always on the top side of the element, and DownAlignment(4), which indicates that the link always starts / ends on the bottom side of the element.
*Fixed: Updates automatically the toolbar's caption once the user changes the value in a drop down panel. For instance, having the ToolBarCaption(1003) property on  "Right-Left\r\nRight-Left#1\r\nLeft-Right#2\r\nBottom-Top#3\r\nTop-Bottom#4", once the user selects the forth value in the drop down, the toolbar displays the Top-Bottom, and so on.   
*Fixed: Can't change the Element.Caption property during the AddElement event.
*Fixed: Can't select multiple elements if pressing the ALT key while dragging ( AllowSelectObjectRect property ).

14.0.0.2 Nov 29, 2018
*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: Extends the distance between links when ShowLinks property includes the exShowExtendedLinks, based on the LinksWidth property.

14.0.0.1 Sep 17, 2018
*NEW:   Cross/Junction/Intersection Links Support
*Added: The ShowExtendedLinksEnum.exShowCrossLinksRect flag in ShowLinks property, expands the junction / intersection of two or more links, with a rectangle that cross the links.
*Added: The ShowExtendedLinksEnum.exShowCrossLinksTriangle flag in ShowLinks property, expands the junction / intersection of two or more links, with a triangle that cross the links.
*Added: The ShowExtendedLinksEnum.exShowCrossLinksRect and ShowExtendedLinksEnum.exShowCrossLinksTriangle flags in ShowLinks property, expands the junction / intersection of two or more links, with a rectangle for horizontal links, and a triangle for vertical links ( mixed ).

13.0.0.5 Aug 13, 2018
*Added: The Version property includes the SpecialBuild number of the assembly so it provides information like Major.Minor.Build.Revison.SpecialBuild.Type...
*Fixed: A link may show to a different position from a page to another, if using exShowExtendedLinks flag in the ShowLinks property ( Print and Print-Preview )
*Fixed: The ALT-GR + A, selects all text and insert the associated diacritic letter from the current installed language.

13.0.0.4 Apr 18, 2018
*Added: DefArrange(exDefArrangeAlign) property specifies the alignment of the elements relative to incomming/outgoing elements during the Arrange operation. The DefArrange(exDefArrangeAlign) property is applied to elements that allow alignment, not all the elements will be aligned.
*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%
*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.

13.0.0.3 Jan 08, 2018
*NEW:   Support for EBN 1003, 1004 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 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%.

13.0.0.2 Oct 02, 2017
*Fixed: A GPF may occur if calling Links.Remove method during the AddLink event
*Fixed: It is safe to remove objects ( elements or links ) during events
*Fixed: The flow of elements, is slightly moving to a different position when calling the Arrange method on a different element ( AlignObjectsToGridLines property is not zero ).
*Fixed: Prevents overlapping the elements with no incoming elements.

13.0.0.1 May 31, 2017
*NEW:   Auto-Arrange support, or ability to automatically arrange horizontally or vertically the elements on the surface based on their relations, so they won't intersect one with another as much as possible
*Added: Arrange( ID ) method arranges the elements starting from element with the specified ID. If missing, all linked-elements are arranged
*Added: DefArrange(exDefArrangeDir) property specifies whether the an horizontal ot vertical arrangement should be applied.
*Added: DefArrange(exDefArrangeDX) and DefArrange(exDefArrangeDY) properties specifies the distance in pixels between two elements, when Arrange method is performed.
*Added: The "Arrange" item added to the control's content menu, to automatically arrange all, selected or element from the cursor

12.1.0.3 Mar 20, 2017
*Added: Allow to link an element to itself.
*Fixed: The LinkFromPoint property returns no link, if the ShowLinksType property is exLinkStraight
*Fixed: The Element.AutoSize property returns 1, instead -1(True)

12.1.0.2 Jan 25, 2017
*Fixed: The element is hidden if any link that points to it is closed. Currently, the element is hidden only if all links pointing to it are closed. ( ExpandLinkedElements property )
*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 )

12.1.0.1 Dec 05, 2016
*Added: "Clear Visual Design" and "Edit Visual Design" are available for /NET version on design mode.
*Fixed: Can't select a word that contains accented(acute, circumflexm umlaut and dieresis) characters, if the user double clicks it, or using the CTRL + SHIFT + Right key.
*Fixed: The the context's menu copy, paste, etc buttons are not size correctly, with the Windows set to Classic theme

12.0.0.3 Nov 16, 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 )

12.0.0.2 Mar 21, 2016
*Fixed: The pictures of a disabled element are not visible or shown at a different position, while the cursor hovers the element. 
*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"
*Fixed: Prevents showing the control's view in design mode, while running on FORTH system ( /COM version )

12.0.0.1 Aug 27, 2015
*Initial Release