Exontrol.ExTreeCube - Information, Features

ExTreeCube

The eXTreeCube library provides fisheye representation / cube map texturing of different components such as calendar, multiple - columns tree view and so on. Fish-eye lenses magnify the center of the field of view, while the scale being reduced towards the edge. Cube map texturing is a form of environment texture mapping that uses a viewing direction (3D vector) to map into a view plane the six 2D textures arranged like the faces of a cube. You have unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on any face of the cube. The eXTreeCube component lets the user changes its visual appearance using skins, each one providing an additional visual experience that enhances viewing pleasure. As usual, there are no dependencies to MFC, VB, VCL, and of course, no Open GL required.

Features include:

  • FishEye / Orthogonal Representation
  • Picture / Calendar / Multiple-Columns Tree View Support
  • Skinnable Interface support ( ability to apply a skin to any background part
  • Print and Print Preview Support
  • Builtin HTML Support
  • Unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on any face of the cube
  • HTML ToolTip Support
  • BMP, JPG, GIF, PNG, TIFF Support

® ExTreeCube is a trademark of Exontrol. All Rights Reserved.


Exontrol - Support

How to get support?

To keep your business applications running, you need support you can count on.

Here are few hints what to do when you're stuck on your programming:

  • Check out the samples - they are here to provide some quick info on how things should be done
  • Check out the how-to questions using the eXHelper tool
  • Check out the help - includes documentation for each method, property or event
  • Check out if you have the latest version, and if you don't have it send an update request here.
  • Submit your problem(question) here.

Don't forget that you can contact our development team if you have ideas or requests for new components, by sending us an e-mail at support@exontrol.com ( please include the name of the product in the subject, ex: exgrid ) . We're sure our team of developers will try to find a way to make you happy - and us too, since we helped.

Regards,
Exontrol Development Team

https://www.exontrol.com


constants AliasingEnum
The AliasingEnum type specifies how the control renders the faces on the screen/printer device. The Aliasing property specifies how the texture is rendered. The AliasingEnum type supports the following values:

Name | Value | Description
exAliasing | 0 | Nothing is performed when rendering the texture.
exAntiAliasing | 1 | ( by default ) is technique for diminishing jaggies - stairstep-like lines that should be smooth. Jaggies occur because the output device, the monitor or printer, doesn't have a high enough resolution to represent a smooth line.


constants AlignmentEnum
The AlignmentEnum type specifies the alignment of the object relative to its parent. For instance, the Alignment property of the Column, aligns the text/caption into the column. The AlignmentEnum type supports the following values.

Name | Value | Description
LeftAlignment | 0 | The source is left aligned
CenterAlignment | 1 | The source is center aligned
RightAlignment | 2 | The source is right aligned


constants AllowEnsureVisibleFaceOnKeyEnum
The AllowEnsureVisibleFaceOnKeyEnum type specifies the action that control performs when user presses a key. The AllowEnsureVisibleFaceOnKey property specifies whether the user can navigate through the faces using the keys. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when user drags the cube to a different position. The EnsureVisibleFaces property specifies the faces that can be fully visible, when EnsureVisibleFace method is performed.

The AllowEnsureVisibleFaceOnKeyEnum type supports the following values:

Name | Value | Description
exEnsureVisibleFaceOnKeyDisabled | 0 | The control does nothing, when user presses a key.
exEnsureVisibleFaceOnSpace | 1 | A face that's partially visible, gets fully visible, once the user presses the SPACE key.
exNextVisibleFaceOnSpace | 2 | The next face become fully visible, when user presses the SPACE key. The EnsureVisibleFaces property indicates the order of the faces.
exEnsureVisibleFaceOnNumberKey | 4 | Any key from 0 to 5 brings the associated face in front. For instance, if the user presses the 0, the front face is getting to the front. The EnsureVisibleFaces property indicates the faces, that can be used by key.
exEnsureVisibleFaceOnArrowKey | 16 | The Left/Right and Up/Down arrows brings the faces in the specified direction.


constants AnchorEnum
The AnchorEnum type specifies how the object is anchored. The Title(exTitleFaceAnchor) / ExtraTitle(exTitleFaceAnchor) property specifies how the face's title is anchored. The AnchorEnum type supports the following values.

Name | Value | Description
exAnchorDock | 0 | The object is anchored to the host's client area.
exAnchorTop | 1 | The object is anchored to the top side of its host.
exAnchorBottom | 2 | The object is anchored to the bottom side of its host.
exAnchorLeft | 4 | The object is anchored to the left side of its host.
exAnchorRight | 8 | The object is anchored to the right side of its host.


constants AppearanceEnum
The AppearanceEnum type specifies the appearance of the control's border. The Appearance property of the control specifies the control's border. The AppearanceEnum type supports following values:

Name | Value | Description
None2 | 0 | No border
Flat | 1 | Flat border
Sunken | 2 | Sunken border
Raised | 3 | Raised border
Etched | 4 | Etched border
Bump | 5 | Bump border


constants AutoSizeEnum
The AutoSizeEnum type specifies how the size of the date within a calendar control is computed. The AutoSize property specifies the way the calendar fits the face. The AutoSizeEnum type supports the following values:

Name | Value | Description
exFontSize | -1 | The size of the control's Font specifies the size for the cells.
exFitClient | 1 | The control ensures that fits its content.


constants BackgroundExtPropertyEnum
The BackgroundExtPropertyEnum type specifies the UI properties of the part of the EBN you can access/change at runtime. The BackgroundExt property specifies the EBN String format to be displayed on the cell's background. The BackgroundExtValue property access the value of the giving property for specified part of the EBN. The Title(exTitleFaceBackgroundExt) / ExtraTitle(exTitleFaceBackgroundExt) specifies the EBN String format to be displayed on the face's background.

The BackgroundExtPropertyEnum type supports the following values:

Name Value Description
exToStringExt 0 Specifies the part's ToString representation. The BackgroundExt property specifies the EBN String format to be displayed on the object's background. The Exontrol's eXButton WYSWYG Builder helps you to generate or view the EBN String Format, in the To String field.

Sample:

"client(right[18](bottom[18,pattern=6,frame=0,framethick]),bottom[48,align=0x11]),left[18](bottom[18,pattern=6,frame=0,framethick])"

generates the following layout:

where it is applied to an object it looks as follows:

(String expression, read-only).

exBackColorExt 1 Indicates the background color / EBN color to be shown on the part of the object. Sample: 255 indicates red, RGB(0,255,0) green, or 0x1000000.

(Color/Numeric expression, The last 7 bits in the high significant byte of the color indicate the identifier of the skin being used )

exClientExt 2 Specifies the position/size of the object, depending on the object's anchor. The syntax of the exClientExt is related to the exAnchorExt value. For instance, if the object is anchored to the left side of the parent ( exAnchorExt = 1 ), the exClientExt specifies just the width of the part in pixels/percents, not including the position. In case, the exAnchorExt is client, the exClientExt has no effect.

Based on the exAnchorExt value the exClientExt is:

  • 0 (none, the object is not anchored to any side), the format of the exClientExt is "left,top,width,height" ( as string ) where (left,top) margin indicates the position where the part starts, and the (width,height) pair specifies its size. The left, top, width or height could be any expression (+,-,/ or * ) that can include numbers associated with pixels or percents. For instance: "25%,25%,50%,50%" indicates the middle of the parent object, and so when the parent is resized the client is resized accordingly. The "50%-8,50%-8,16,16" value specifies that the size of the object is always 16x16 pixels and positioned on the center of the parent object.
  • 1 (left, the object is anchored to left side of the parent), the format of the exClientExt is width ( string or numeric ) where width indicates the width of the object in pixels, percents or a combination of them using +,-,/ or * operators. For instance: "50%" indicates the half of the parent object, and so when the parent is resized the client is resized accordingly. The 16 value specifies that the size of the object is always 16 pixels.
  • 2 (right, the object is anchored to right side of the parent object), the format of the exClientExt is width ( string or numeric ) where width indicates the width of the object in pixels, percents or a combination of them using +,-,/ or * operators. For instance: "50%" indicates the half of the parent object, and so when the parent is resized the client is resized accordingly. The 16 value specifies that the size of the object is always 16 pixels.
  • 3 (client, the object takes the full available area of the parent), the exClientExt has no effect.
  • 4 (top, the object is anchored to the top side of the parent object), the format of the exClientExt is height ( string or numeric ) where height indicates the height of the object in pixels, percents or a combination of them using +,-,/ or * operators. For instance: "50%" indicates the half of the parent object, and so when the parent is resized the client is resized accordingly. The 16 value specifies that the size of the object is always 16 pixels.
  • 5 (bottom, the object is anchored to bottom side of the parent object), the format of the exClientExt is height ( string or numeric ) where height indicates the height of the object in pixels, percents or a combination of them using +,-,/ or * operators. For instance: "50%" indicates the half of the parent object, and so when the parent is resized the client is resized accordingly. The 16 value specifies that the size of the object is always 16 pixels.

Sample: 50% indicates half of the parent, 25 indicates 25 pixels, or 50%-8 indicates 8-pixels left from the center of the parent.

(String/Numeric expression)
exAnchorExt 3 Specifies the object's alignment relative to its parent.

The valid values for exAnchorExt are:

  • 0 (none), the object is not anchored to any side,
  • 1 (left), the object is anchored to left side of the parent,
  • 2 (right), the object is anchored to right side of the parent object,
  • 3 (client), the object takes the full available area of the parent,
  • 4 (top), the object is anchored to the top side of the parent object,
  • 5 (bottom), the object is anchored to bottom side of the parent object

(Numeric expression)

exTextExt 4 Specifies the HTML text to be displayed on the object.

The exTextExt supports the following built-in HTML tags:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:

(String expression)
exTextExtWordWrap 5 Specifies that the object is wrapping the text. The exTextExt value specifies the HTML text to be displayed on the part of the EBN object. This property has effect only if there is a text assigned to the part using the exTextExt flag.

(Boolean expression)
exTextExtAlignment 6 Indicates the alignment of the text on the object. The exTextExt value specifies the HTML text to be displayed on the part of the EBN object. This property has effect only if there is a text assigned to the part using the exTextExt flag.

The valid values for exTextExtAlignment are:

  • 0, ( hexa 0x00, Top-Left ), Text is vertically aligned at the top, and horizontally aligned on the left.
  • 1, ( hexa 0x01, Top-Center ), Text is vertically aligned at the top, and horizontally aligned at the center.
  • 2, ( hexa 0x02, Top-Right ), Text is vertically aligned at the top, and horizontally aligned on the right.
  • 16, ( hexa 0x10, Middle-Left ), Text is vertically aligned in the middle, and horizontally aligned on the left.
  • 17, ( hexa 0x11, Middle-Center ), Text is vertically aligned in the middle, and horizontally aligned at the center.
  • 18, ( hexa 0x12, Middle-Right ), Text is vertically aligned in the middle, and horizontally aligned on the right.
  • 32, ( hexa 0x20, Bottom-Left ), Text is vertically aligned at the bottom, and horizontally aligned on the left.
  • 33, ( hexa 0x21, Bottom-Center ), Text is vertically aligned at the bottom, and horizontally aligned at the center.
  • 34, ( hexa 0x22, Bottom-Right ), Text is vertically aligned at the bottom, and horizontally aligned on the right.

(Numeric expression)
exPatternExt 7 Indicates the pattern to be shown on the object. The exPatternColorExt specifies the color to show the pattern.

The valid values for exPatternExt are:

  • 0, ( hexa 0x000, Empty ), The pattern is not visible
  • 1, ( hexa 0x001, Solid ),
  • 2, ( hexa 0x002, Dot ),
  • 3, ( hexa 0x003, Shadow ),
  • 4, ( hexa 0x004, NDot ),
  • 5, ( hexa 0x005, FDiagonal ),
  • 6, ( hexa 0x006, BDiagonal ),
  • 7, ( hexa 0x007, DiagCross ),
  • 8, ( hexa 0x008, Vertical ),
  • 9, ( hexa 0x009, Horizontal ),
  • 10, ( hexa 0x00A, Cross ),
  • 11, ( hexa 0x00B, Brick ),
  • 12, ( hexa 0x00C, Yard ),
  • 256, ( hexa 0x100, Frame ), [image] . The exFrameColorExt specifies the color to show the frame. The Frame flag can be combined with any other flags.
  • 768, ( hexa 0x300, FrameThick ), [image] . The exFrameColorExt specifies the color to show the frame. The Frame flag can be combined with any other flags.

(Numeric expression)
exPatternColorExt 8 Indicates the color to show the pattern on the object. The exPatternColorExt property has effect only if the exPatternExt property is not 0 ( empty ). The exFrameColorExt specifies the color to show the frame ( the exPatternExt property includes the exFrame or exFrameThick flag )

(Color expression)
exFrameColorExt 9 Indicates the color to show the border-frame on the object. This property set the Frame flag for exPatternExt property.

(Color expression)
exFrameThickExt 10 Specifies that a thick-frame is shown around the object. This property set the FrameThick flag for exPatternExt property.

(Boolean expression)
exUserDataExt 11 Specifies an extra-data associated with the object.

(Variant expression)


constants BackgroundPartEnum
The BackgroundPartEnum type indicates parts of the control whose visual appearance can be changed through the Background property. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part. The BackgroundPartEnum type supports the following values:

Name | Value | Description
exHeaderFilterBarButton | 0 | (reserved) Specifies the background color for the drop down filter bar button.
exFooterFilterBarButton | 1 | (reserved) Specifies the background color for the closing button in the filter bar.
exCellButtonUp | 2 | Specifies the background color for the cell's button, when it is up.
exCellButtonDown | 3 | Specifies the background color for the cell's button, when it is down.
exDaysHeader | 6 | Specifies the visual appearance for the days header.
exWeeksHeader | 7 | Specifies the visual appearance for the weeks header.
exDateHeader | 8 | Specifies the visual appearance for the months header in a calendar control.
exDateTodayUp | 9 | Specifies the visual appearance for the today button in a calendar control, when it is up.
exDateTodayDown | 10 | Specifies the visual appearance for the today button in a calendar control, when it is down.
exDateSeparatorBar | 13 | Specifies the visual appearance for the separator bar in a calendar control.
exMarkToday | 14 | Returns or sets a value that indicates the visual appearance for today date.
exDateHeaderForeColor | 21 | Specifies the foreground color to show the months in the header.
exDaysHeaderForeColor | 28 | Specifies the foreground color for the days header.
exWeeksHeaderForeColor | 29 | Specifies the foreground color for the weeks header.
exMarkTodayForeColor | 30 | Specifies the foreground color for the today date.
exDateTodayForeColor | 31 | Specifies the foreground color for the Today button.
exToolTipAppearance | 64 | Specifies the visual appearance of the borders of the tooltips.
exToolTipBackColor | 65 | Specifies the tooltip's background color.
exToolTipForeColor | 66 | Specifies the tooltip's foreground color.
exCheckBoxState0 | 70 | Specifies the visual appearance for the check box in 0 state (unchecked). The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box.
exCheckBoxState1 | 71 | Specifies the visual appearance for the check box in 1 state (checked). The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box.
exCheckBoxState2 | 72 | Specifies the visual appearance for the check box in 2 state (partial, not used). The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box.
exRadioButtonState0 | 73 | Specifies the visual appearance for the radio button in 0 state (unchecked). The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button.
exRadioButtonState1 | 74 | Specifies the visual appearance for the radio button in 1 state (checked).
exTreeGlyphCollapsed | 84 | Specifies the visual appearance to show the glyph next to the collapsed element.
exTreeGlyphExpanded | 85 | Specifies the visual appearance to show the glyph next to the expanded element.
exTreeLinesColor | 186 | Specifies the color to show the tree-lines (connecting lines from the parent to the children)


constants DefColumnEnum
The Def property retrieves or sets a value that indicates the default value of given properties for all cells in the same column.

Name | Value | Description
exCellHasCheckBox | 0 | Assigns check boxes to all cells in the column, if it is True. Similar with the HasCheckBox property. ( boolean expression, False )
exCellHasRadioButton | 1 | Assigns radio buttons to all cells in the column, if it is True. Similar with the HasRadioButton property. ( boolean expression, False )
exCellHasButton | 2 | Specifies that all cells in the column are buttons, if it is True. Similar with the HasButton property. ( boolean expression, False )
exCellButtonAutoWidth | 3 | The cell's caption indicates the width of the cell's button. ( boolean expression, False )
exCellBackColor | 4 | Specifies the background color for all cells in the column. ( long expression )
exCellForeColor | 5 | Specifies the foreground color for all cells in the column. ( long expression )
exCellVAlignment | 6 | Specifies the column's vertical alignment. By default, the Def(exCellVAlignment) property is MiddleAlignment. ( long expression )
exHeaderBackColor | 7 | Specifies the column's header background color. The property has effect only if the property is different than zero. Use this option to change the background color for a column in the header area. The exHeaderBackColor option supports skinning, so the last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. ( Color expression )
exHeaderForeColor | 8 | Specifies the column's header background color. The property has effect only if the property is different than zero. ( Color expression )
exCellSingleLine | 16 | Specifies that all cells in the column are multiple lines cells, if it is False. Similar with the SingleLine property. ( boolean expression, True )
exCellCaptionFormat | 17 | Indicates whether the cells caption supports HTML format. By default, it is exHTML(1). The exText(0) specifies that the column displays plain text. ( long expression )
exCellDrawPartsOrder | 34 | Specifies the order of the drawing parts for the entire column. By default, this option is "check,icon,icons,picture,caption", which means that the cell displays its parts in the following order: check box/ radio buttons ( HasCheckBox/RadioButton ), single icon, multiple icons, custom size picture, and the cell's caption. Use the exCellDrawPartsOrder option to specify a new order for the drawing parts in the cells of the column. ( string expression )
exCellPaddingLeft | 48 | Gets or sets the left padding (space) of the cells within the column. ( long expression )
exCellPaddingRight | 49 | Gets or sets the right padding (space) of the cells within the column. ( long expression )
exCellPaddingTop | 50 | Gets or sets the top padding (space) of the cells within the column. ( long expression )
exCellPaddingBottom | 51 | Gets or sets the bottom padding (space) of the cells within the column. ( long expression )
exHeaderPaddingLeft | 52 | Gets or sets the left padding (space) of the column's header. ( long expression )
exHeaderPaddingRight | 53 | Gets or sets the right padding (space) of the column's header. ( long expression )
exHeaderPaddingTop | 54 | Gets or sets the top padding (space) of the column's header. ( long expression )
exHeaderPaddingBottom | 55 | Gets or sets the bottom padding (space) of the column's header. ( long expression )


constants IdentifyFaceEnum
The IdentifyFaceEnum type specifies whether the frame or caption of the face is being shown on the cube. The IdentifyFace property specifies whether each face shows its index/frame. The IdentifyFaceCaption property specifies the HTML caption to show the index/name of the face.

The IdentifyFaceEnum type supports the following values:

Name | Value | Description
exNoIdentifyFace | 0 | (by default) No frame or caption/name is being shown on the cube.
exIdentifyFaceCaption | 1 | The face's index if shown on the cube.
exIdentifyFaceName | 2 | The face's name is shown on the cube:
exIdentifyFaceFrame | 4 | A frame surround all faces of the cube:


constants DividerAlignmentEnum
Defines the alignment for a divider line into a divider item. Use the DividerLineAlignment property to align the line in a divider item. Use the Divider property to add a divider item. The DividerAlignmentEnum type supports the following values:

Name | Value | Description
DividerBottom | 0 | The divider line is displayed on bottom side of the item.
DividerCenter | 1 | The divider line is displayed on center of the item.
DividerTop | 2 | The divider line is displayed at the top of the item.
DividerBoth | 3 | The divider line is displayed at the top and bottom of the item.


constants DividerLineEnum
Defines the type of divider line. The DividerLine property uses the DividerLineEnum type. The DividerLineEnum type supports the following value:

Name | Value | Description
EmptyLine | 0 | EmptyLine
SingleLine | 1 | SingleLine
DoubleLine | 2 | DoubleLine
DotLine | 3 | DotLine
DoubleDotLine | 4 | DoubleDotLine
ThinLine | 5 | ThinLine
DoubleThinLine | 6 | DoubleThinLine


constants EnsureVisibleFaceEnum
The EnsureVisibleFaceEnum type specifies the actions the control performs when user drags the cube from a position to another. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. The The EnsureVisibleFaceEnum type supports the following values:

Name | Value | Description
exDisableEnsureVisibleFace | 0 | The user can drag freely the cube to any position.
exFitToEnsureFace | 1 | (by default) The dragging face fits the control's client area. Rotating and zooming may occurs. The exFitToEnsureFace flag can be combined with the exRotateVisibleFace, exAlwaysVisibleFrontFace or exAlwaysVisibleFrontFaceExceptTopDown
exRotateToEnsureFace | 2 | The dragging face is rotated only to fit the control's client area. No zooming is performed. The exRotateToEnsureFace flag can be combined with the exFitToEnsureFace, exAlwaysVisibleFrontFace or exAlwaysVisibleFrontFaceExceptTopDown
exAlwaysVisibleFrontFace | 16 | The exAlwaysVisibleFrontFace flag can be combined with the exFitVisibleFace, exRotateVisibleFace or exAlwaysVisibleFrontFaceExceptTopDown
exAlwaysVisibleFrontFaceExceptTopDown | 32 | The exAlwaysVisibleFrontFaceExceptTopDown flag can be combined with the exFitVisibleFace, exRotateVisibleFace or exAlwaysVisibleFrontFace.


constants ExpandButtonEnum
Defines how the control displays the expanding/collapsing buttons. The HasButtons property Adds a button to the left side of each parent item. The user can click the button to expand or collapse the child items as an alternative to double-clicking the parent item. The ExpandButtonEnum type supports the following values:

Name | Value | Description
exNoButtons | 0 | The control displays no expand buttons
exPlus | -1 | (by default) A plus sign is displayed for collapsed items, and a minus sign for expanded items.( [image] [image] )
exArrow | 1 | The control uses icons to display the expand buttons.( [image] [image] )
exCircle | 2 | The control uses icons to display the expand buttons. ( [image] [image] )
exWPlus | 3 | The control uses icons to display the expand buttons. ( [image] [image] )
exCustom | 4 | The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element.


constants FaceEnum
The FaceEnum type specifies the index of the faces within the cube. The Face property returns the giving face. The Index property specifies the index of the face

The FaceEnum type supports the following values:

Name | Value | Description
exFrontFace | 0 | Indicates the face on the front. The Face(exFrontFace) or FrontFace property returns the face on the front.
exBottomFace | 1 | Indicates the face on the bottom. The Face(exBottomFace) or BottomFace property returns the face on the bottom.
exRightFace | 2 | Indicates the face on the right. The Face(exRightFace) or RightFace property returns the face on the right.
exLeftFace | 3 | Indicates the face on the left. The Face(exLeftFace) or LeftFace property returns the face on the front.
exTopFace | 4 | Indicates the top face. The Face(exTopFace) or TopFace property returns the top face.
exDownFace | 5 | Indicates the down face. The Face(exDownFace) or DownFace property returns down face.


constants FaceTypeEnum
The FaceTypeEnum expression determines the type of the face the control can handle. The Type property specifies the type of the face. The FaceTypeEnum type supports the following values:

Name | Value | Description
exFaceNone | 0 | No UI-object is attached to the face.
exFaceTree | 1 | A multiple-columns tree is displayed on the face.
exFaceCalendar | 2 | A calendar is displayed on the face.
exFacePicture | 3 | An additional picture is displayed on the face.


constants GridLinesEnum
The GridLinesEnum type specifies the way the control draws the grid lines. The GridLinesEnum type supports the following values:

Name | Value | Description
exNoLines | 0 | exNoLines
exAllLines | -1 | exAllLines
exRowLines | -2 | exRowLines
exHLines | 1 | exHLines
exVLines | 2 | exVLines


constants GridLinesStyleEnum
The GridLinesStyleEnum type that specifies the style for gridlines in the list part of the control. The GridLinesStyleEnum type supports the following values:

Name | Value | Description
exGridLinesDot | 0 | The control's gridlines are shown as dotted.
exGridLinesHDot4 | 1 | The horizontal control's gridlines are shown as dotted.
exGridLinesVDot4 | 2 | The vertical control's gridlines are shown as dotted.
exGridLinesDot4 | 3 | The control's gridlines are shown as solid.
exGridLinesHDash | 4 | The horizontal control's gridlines are shown as dashed.
exGridLinesVDash | 8 | The vertical control's gridlines are shown as dashed.
exGridLinesDash | 12 | The control's gridlines are shown as dashed.
exGridLinesHSolid | 16 | The horizontal control's gridlines are shown as solid.
exGridLinesVSolid | 32 | The vertical control's gridlines are shown as solid.
exGridLinesSolid | 48 | The control's gridlines are shown as solid.


constants HierarchyLineEnum
Defines how the control paints the hierarchy lines. Use the LinesAtRoot property to connect root items. Use the HasLines property to connect a child items to their correspondent parent item. The HierarchyLineEnum type supports the following values:

Name | Value | Description
exNoLine | 0 | The control displays no lines when painting the hierarchy
exDotLine | -1 | The control uses a dotted line to paint the hierarchy.
exSolidLine | 1 | The control uses a solid line to paint the hierarchy.
exThinLine | 2 | The control uses a thin line to paint the hierarchy.


constants HTMLRotateEnum
The HTMLRotateEnum type specifies the way a HTML caption can be shown. The Title(exTitleFaceHTMLRotate) property indicates how the HTML title is horizontally or vertically displayed The HTMLRotateEnum type supports the following values:

Name | Value | Description
exHTMLHorizontal | 0 | Specifies that the HTML text is horizontally displayed.
exHTMLVertical | 1 | Specifies that the HTML text is vertically displayed.
exHTMLMirror | 16 | Specifies that the HTML text is displayed in mirror.


constants LayoutChangingEnum
The LayoutChangingEnum type specifies the user performs on the cube. The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation. The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. The LayoutChangingEnum type supports the following values:

Name | Value | Description
exTreeCubeDrag | 0 | The user clicks and drags the control.
exEnsureVisibleFace | 1 | The EnsureVisibleFace method is performed.


constants LinesAtRootEnum
Defines how the control displays the lines at root. The LinesAtRoot property defines the way the tree lines are shown. The HasLines property defines the type of the line to be shown. The HasButtons property defines the expand/collapse buttons for parent items.

The LinesAtRootEnum type support the following values:

Name | Value | Description
exNoLinesAtRoot | 0 | No lines at root items.
exLinesAtRoot | -1 | The control links the root items.
exGroupLinesAtRoot | 1 | The control shows no links between roots, and divides them as being in the same group.
exGroupLines | 2 | The lines between root items are no shown, and the links show the items being included in the group.
exGroupLinesInside | 3 | The lines between root items are no shown, and the links are shown between child only.
exGroupLinesInsideLeaf | 4 | The lines between root items are no shown, and the links are shown for first and last visible child item.
exGroupLinesOutside | 5 | The lines between root items are no shown, and the links are shown for first and last visible child item. A parent item that contains flat child items only, does not indent the child part. By a flat child we mean an item that does not contain any child item.


constants LineStyleEnum
The LineStyleEnum type specifies the type of lines the control can display. The LineStyleEnum type supports the following values:

Name | Value | Description
NoLine | -1 | No line
SmallDots | 1 | SmallDots
LargeDots | 2 | LargeDots
Solid | 0 | Solid


constants IndexExtEnum
The IndexExtEnum type indicates a long expression that defines the index of the part that composes the EBN to be accessed / changed. The BackgroundExtValue property specifies at runtime, the value of the giving property for specified part of the background extension.

The following screen shot shows where you can find Index of the parts:

Name | Value | Description
exIndexExtRoot | 0 | Specifies the part of the object with the index 0 (root).
exIndexExt1 | 1 | Specifies the part of the object with the index 1.
exIndexExt2 | 2 | Specifies the part of the object with the index 2.
exIndexExt3 | 3 | Specifies the part of the object with the index 3.
exIndexExt4 | 4 | Specifies the part of the object with the index 4.
exIndexExt5 | 5 | Specifies the part of the object with the index 5.
exIndexExt6 | 6 | Specifies the part of the object with the index 6.
exIndexExt7 | 7 | Specifies the part of the object with the index 7.


constants OnMouseWheelEnum
The OnMouseWheelEnum type specifies the actions the control can perform when the user rolls the mouse wheel. The OnMouseWheel property specifies what action the control performs when user rolls the mouse wheel. The OnMouseWheelEnum type supports the following values:

Name | Value | Description
exMouseWheelNothing | 0 | Nothing happens while user rolls the mouse wheel.
exMouseWheelZoom | 1 | The face from the cursor is zoomed.
exMouseWheelScroll | 4 | The content of the face from the cursor is scrolled.


constants PictureDisplayEnum
Specifies how the picture is displayed on the control's background. Use the PictureDisplay property to specify how the control displays its picture.

Name | Value | Description
UpperLeft | 0 | Aligns the picture to the upper left corner.
UpperCenter | 1 | Centers the picture on the upper edge.
UpperRight | 2 | Aligns the picture to the upper right corner.
MiddleLeft | 16 | Aligns horizontally the picture on the left side, and centers the picture vertically.
MiddleCenter | 17 | Puts the picture on the center of the source.
MiddleRight | 18 | Aligns horizontally the picture on the right side, and centers the picture vertically.
LowerLeft | 32 | Aligns the picture to the lower left corner.
LowerCenter | 33 | Centers the picture on the lower edge.
LowerRight | 34 | Aligns the picture to the lower right corner.
Tile | 48 | Tiles the picture on the source.
Stretch | 49 | The picture is resized to fit the source.


constants PropertyTitleFaceEnum
The PropertyTitleFaceEnum type specifies the properties of the title / extra title to be shown on any face. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The PropertyTitleFaceEnum type supports the following values.

Name | Value | Description
exTitleFaceCaption | 0 | By default, the exTitleFaceCaption property is "". Indicates the HTML caption to be displayed on the title. The exTitleFaceCaption supports the built-in HTML tags as defined here. (string expression)
exTitleFaceBackColor | 1 | By default, the exTitleFaceBackColor property is 0, which indicates no effect. Indicates the title's background color. A color expression that indicates the title's background color. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part. (long expression)
exTitleFaceForeColor | 2 | By default, the exTitleFaceForeColor property is 0, which indicates no effect. Indicates the title's foreground color. (long expression)
exTitleFaceAnchor | 3 | By default, the exTitleFaceAnchor property is exAnchorTop. Specifies the side of the host where the title is anchored. The exTitleFaceHTMLRotate property is updated once the exTitleFaceAnchor is changed. For instance, if the title is anchored to the bottom, the title's exTitleFaceHTMLRotate is exHTMLHorizontal | exHTMLMirror (AnchorEnum expression)
exTitleFaceHTMLRotate | 4 | By default, the exTitleFaceHTMLRotate property is exHTMLHorizontal. Indicates how the HTML title is horizontally or vertically displayed. The exTitleFaceHTMLRotate property is updated once the exTitleFaceAnchor is changed. For instance, if the title is anchored to the bottom, the title's exTitleFaceHTMLRotate is exHTMLHorizontal | exHTMLMirror (HTMLRotateEnum expression)
exTitleFaceLeft | 5 | By default, the exTitleFaceLeft property is "0". Specifies the expression to determine the x-position to show the title, relative to its current position. The exTitleFaceLeft / exTitleFaceTop / exTitleFaceWidth / exTitleFaceHeight support expressions as explained here. (string expression)
exTitleFaceTop | 6 | By default, the exTitleFaceTop property is "0". Specifies the expression to determine the y-position to show the title, relative to its current position. The exTitleFaceLeft / exTitleFaceTop / exTitleFaceWidth / exTitleFaceHeight support expressions as explained here. (string expression)
exTitleFaceWidth | 7 | By default, the exTitleFaceWidth property is "twidth". Specifies the expression to determine the width to show the title, relative to its current width. The exTitleFaceLeft / exTitleFaceTop / exTitleFaceWidth / exTitleFaceHeight support expressions as explained here. (string expression)
exTitleFaceHeight | 8 | By default, the exTitleFaceHeight property is "theight". Specifies the expression to determine the height to show the title, relative to its current height. The exTitleFaceLeft / exTitleFaceTop / exTitleFaceWidth / exTitleFaceHeight support expressions as explained here. (string expression)
exTitleFaceVisible | 9 | By default, the exTitleFaceVisible property is exTitleFaceVisibleFront. Specifies whether the title is shown (front,back) or hidden. (TitleFaceVisibleEnum expression)
exTitleFaceWordWrap | 10 | By default, the exTitleFaceWordWrap property is False. Indicates whether a multiline title automatically wraps words to the beginning of the next line when necessary. (boolean expression)
exTitleFaceBackgroundExt | 11 | Indicates unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the title's background. A short description of the EBN String Format is described here, or a full description of the EBN String Format can be found here (string expression)

The exTitleFaceCaption supports the following built-in HTML tags:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:

The exTitleFaceLeft / exTitleFaceTop / exTitleFaceWidth / exTitleFaceHeight support expressions as follows:

The value keyword in the property indicates the value to be formatted.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )

The EBN String Format syntax in BNF notation is defined like follows:

<EBN> ::= <elements> | <root> "(" [<elements>] ")"
<elements> ::= <element> [ "," <elements> ]
<root> ::= "root" [ <attributes> ] | [ <attributes> ]
<element> ::= <anchor> [ <attributes> ] [ "(" [<elements>] ")" ]
<anchor> ::= "none" | "left" | "right" | "client" | "top" | "bottom"
<attributes> ::= "[" [<client> ","] <attribute> [ "," <attributes> ] "]"
<client> ::= <expression> | <expression> "," <expression> "," <expression> "," <expression>
<expression> ::= <number> | <number> "%"
<attribute> ::= <backcolor> | <text> | <wordwrap> | <align> | <pattern> | <patterncolor> | <frame> | <framethick> | <data> | <others>
<equal> ::= "="
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<decimal> ::= <digit><decimal>
<hexadigit> ::= <digit> | "A" | "B"  "C" | "D" | "E"  "F"
<hexa> ::= <hexadigit><hexa>
<number> ::= <decimal> | "0x" <hexa>
<color> ::= <rgbcolor> | number
<rgbcolor> ::= "RGB" "(" <number> "," <number> "," <number> ")"
<string> ::= "`" <characters> "`" | "'" <characters> "'" | " <characters> "
<characters> ::= <char>|<characters>
<char> ::= <any_character_excepts_null>
<backcolor> ::= "back" <equal> <color>
<text> ::= "text" <equal> <string>
<align> ::= "align" <equal> <number>
<pattern> ::= "pattern" <equal> <number>
<patterncolor> ::= "patterncolor" <equal> <color>
<frame> ::= "frame" <equal> <color>
<data> ::= "data" <equal> <number> | <string>
<framethick> ::= "framethick"
<wordwrap> ::= "wordwrap"

Others like: pic, stretch, hstretch, vstretch, transparent, from, to are reserved for future use only.

Easy samples:

  • "[pattern=6]", shows the BDiagonal pattern on the object's background.

  • "[frame=RGB(255,0,0),framethick]", draws a red thick-border around the object.

  • "[frame=RGB(255,0,0),framethick,pattern=6,patterncolor=RGB(255,0,0)]", draws a red thick-border around the object, with a patter inside.

  • "[[patterncolor=RGB(255,0,0)](none[(4,4,100%-8,100%-8),pattern=0x006,patterncolor=RGB(255,0,0),frame=RGB(255,0,0),framethick])]", draws a red thick-border around the object, with a patter inside, with a 4-pixels wide padding:

  • "top[4,back=RGB(0,0,255)]", draws a blue line on the top side of the object's background, of 4-pixels wide.

  • "[text=`caption`,align=0x22]", shows the caption string aligned to the bottom-right side of the object's background.

  • "[text=`<img>flag</img>`,align=0x11]" shows the flag picture and the sweden string aligned to the bottom side of the object.

  • "left[10,back=RGB(255,0,0)]", draws a red line on the left side of the object's background, of 10-pixels wide.

  • "bottom[50%,pattern=6,frame]", shows the BDiagonal pattern with a border arround on the lower-half part of the object's background.

  • "root[text=`caption <b>2`,align=0x22](client[text=`caption <b>1`,align=0x20])", shows the caption 1 aligned to the bottom-left side, and the caption 2 to the bottom-right side

Now, lets say we have the following request to layout the colors on the objects:

We define the BackgroundExt property such as "top[30%,back=RGB(253,218,101)],client[back=RGB(91,157,210)],none[(0%,0%,10%,100%)](top[90%,back=RGB(0,0,0)])", and it looks as:

so, if we apply to our object we got:

Now, lets say we have the following request to layout the colors on the objects:

We define BackgroundExt property such as "left[10%](top[90%,back=RGB(0,0,0)]),top[30%,back=RGB(254,217,102)],client[back=RGB(91,156,212)]", and it looks as:

so, if we apply to our object we got:


constants RotateEnum
The RotateEnum type indicates the direction to rotate the cube. Use the Rotate method to programmatically rotate the cube. Use the AllowRotate property to specify the directions where the user can rotate the cube by dragging. The RotateEnum type supports the following values:

Name | Value | Description
exRotateLeft | 1 | Rotates the cube to the left.
exRotateRight | 2 | Rotates the cube to the right.
exRotateUp | 4 | Rotates up the cube.
exRotateDown | 8 | Rotates down the cube.
exRotateAll | 255 | Allows all directions to rotate the cube.


constants ShowAsEnum
The ShowAsEnum type specifies how the faces are shown on the cube. The ShowAs property specifies the way the cube is displayed. The ShowAsEnum type supports the following values:

Name | Value | Description
exFishEye | 0 | Displays the cube as fisheye.
exOrthographic | 1 | Displays the cube using orthographic projection.


constants SortOnClickEnum
Specifies the action that control takes when user clicks the column's header. The SortOnClick Property specifies whether the control sorts a column when its caption is clicked. The SortOnClickEnum type supports the following values:

Name | Value | Description
exNoSort | 0 | exNoSort
exDefaultSort | -1 | exDefaultSort
exUserSort | 1 | (reserved for future use only) exUserSort


constants TitleFaceVisibleEnum
The TitleFaceVisibleEnum type specifies how the title is put on the face's background, relative to its content. The Title(exTitleFaceVisible) / ExtraTitle(exTitleFaceVisible) property specifies whether the title is shown (front,back) or hidden. The TitleFaceVisibleEnum type supports the following values:

Name | Value | Description
exTitleFaceHidden | 0 | The title of the face is hidden.
exTitleFaceVisibleFront | -1 | The title of the face is visible in front.
exTitleFaceVisibleBack | 1 | The title of the face is visible on the back.


constants UIVisualThemeEnum
The UIVisualThemeEnum expression specifies the UI parts that the control can shown using the current visual theme. The UseVisualTheme property specifies whether the UI parts of the control are displayed using the current visual theme.

Name | Value | Description
exNoVisualTheme | 0 | exNoVisualTheme
exDefaultVisualTheme | 16777215 | exDefaultVisualTheme
exHeaderVisualTheme | 1 | exHeaderVisualTheme
exFilterBarVisualTheme | 2 | exFilterBarVisualTheme
exButtonsVisualTheme | 4 | exButtonsVisualTheme
exCalendarVisualTheme | 8 | exCalendarVisualTheme
exSliderVisualTheme | 16 | exSliderVisualTheme
exSpinVisualTheme | 32 | exSpinVisualTheme
exCheckBoxVisualTheme | 64 | exCheckBoxVisualTheme
exProgressVisualTheme | 128 | exProgressVisualTheme
exCalculatorVisualTheme | 256 | exCalculatorVisualTheme


constants WeekDayEnum
Defines the week days.

Name | Value | Description
exSunday | 0 | exSunday
exMonday | 1 | exMonday
exTuesday | 2 | exTuesday
exWednesday | 3 | exWednesday
exThursday | 4 | exThursday
exFriday | 5 | exFriday
exSaturday | 6 | exSaturday


constants WeekNumberAsEnum
The WeekNumberAsEnum type specifies the ways the control displays the week number for dates. The ShowWeeks property specifies whether the week number header is shown or hidden. The DisplayWeekNumberAs property specifies the way the control displays the week number. The FirstWeekDay property specifies the first day of the week where the week begins. The WeekNumberAsEnum type supports the following values:

Name | Value | Description
exISO8601WeekNumber | 0 | Indicates that the week number is displayed according to the ISO8601 standard, which specifies that the first week of the year is the one that includes the January the 4th ( default )
exSimpleWeekNumber | 1 | The first week starts on January 1st of a given year, week n+1 starts 7 days after week n


Appearance object
The component lets the user changes its visual appearance using skins, each one providing an additional visual experience that enhances viewing pleasure. Skins are relatively easy to build and put on any part of the control. The Appearance object holds a collection of skins. The Appearance object supports the following properties and methods:

Name | Description
Add | Adds or replaces a skin object to the control.
Clear | Removes all skins in the control.
Remove | Removes a specific skin from the control.
RenderType | Specifies the way colored EBN objects are displayed on the component.


method Add

method Appearance.Add (ID as Long, Skin as Variant)
Adds or replaces a skin object to the control.

Type | Description
ID as Long | A Long expression that indicates the index of the skin being added or replaced. The value must be between 1 and 126, so Appearance collection should holds no more than 126 elements.
Skin as Variant A string expression that indicates:
  • an Windows XP Theme part, it should start with "XP:". For instance the "XP:Header 1 2" indicates the part 1 of the Header class in the state 2, in the current Windows XP theme. In this case the format of the Skin parameter should be: "XP: Control/ClassName Part State" where the ClassName defines the window/control class name in the Windows XP Theme, the Part indicates a long expression that defines the part, and the State indicates the state like listed at the end of the document. This option is available only on Windows XP that supports Themes API.
  • copy of another skin with different coordinates, if it begins with "CP:" . For instance, you may need to display a specified skin on a smaller rectangle. In this case, the string starts with "CP:", and contains the following "CP:n l t r b", where the n is the identifier being copied, the l, t, r, and b indicate the left, top, right and bottom coordinates being used to adjust the rectangle where the skin is displayed. For instance, the "CP:1 4 0 -4 0", indicates that the skin is displayed on a smaller rectangle like follows. Let's say that the control requests painting the {10, 10, 30, 20} area, a rectangle with the width of 20 pixels, and the height of 10 pixels, the skin will be displayed on the {14,10,26,20} as each coordinates in the "CP" syntax is added to the displayed rectangle, so the skin looks smaller. This way you can apply different effects to your objects in your control. The following screen shot shows the control's header when using a "CP:1 -6 -6 6 6", that displays the original skin on larger rectanges .

  • the path to the skin file ( *.ebn ). The Exontrol's exButton component installs a skin builder that should be used to create new skins
  • the BASE64 encoded string that holds a skin file ( *.ebn ). Use the Exontrol's exImages tool to build BASE 64 encoded strings on the skin file (*.ebn) you have created. Loading the skin from a file ( eventually uncompressed file ) is always faster then loading from a BASE64 encoded string

A byte[] or safe arrays of VT_I1 or VT_UI1 expression that indicates the content of the EBN file. You can use this option when using the EBN file directly in the resources of the project. For instance, the VB6 provides the LoadResData to get the safe array o bytes for specified resource, while in VB/NET or C# the internal class Resources provides definitions for all files being inserted. ( ResourceManager.GetObject("ebn", resourceCulture) ).

Return | Description
Boolean | A Boolean expression that indicates whether the new skin was added or replaced.
Use the Add method to add or replace skins to the control. The skin method, in it's simplest form, uses a single graphic file (*.ebn) assigned to a part of the control, when the "XP:" prefix is not specified in the Skin parameter ( available for Windows XP systems ). By using a collection of objects laid over the graphic, it is possible to define which sections of the graphic will be used as borders, corners and other possible elements, fixing them to their proper position regardless of the size of the part. Use the Remove method to remove a specific skin from the control. Use the Clear method to remove all skins in the control. Use the BeginUpdate and EndUpdate methods to maintain performance while do multiple changes to the control. Use the Refresh method to refresh the control.

The following screen shot shows how a Calendar control shows up by default ( no EBN objects ):

The following screen shot shows how a Calendar control shows up with EBN objects:

The identifier you choose for the skin is very important to be used in the background properties like explained bellow. Shortly, the color properties uses 4 bytes ( DWORD, double WORD, and so on ) to hold a RGB value. More than that, the first byte ( most significant byte in the color ) is used only to specify system color. if the first bit in the byte is 1, the rest of bits indicates the index of the system color being used. So, we use the last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. So, since the 7 bits can cover 127 values, excluding 0, we have 126 possibilities to store an identifier in that byte. This way, a DWORD expression indicates the background color stored in RRGGBB format and the index of the skin ( ID parameter ) in the last 7 bits in the high significant byte of the color. For instance, the BackColor = BackColor Or &H2000000 indicates that we apply the skin with the index 2 using the old color, to the object that BackColor is applied.

On Windows XP, the following table shows how the common controls are broken into parts and states:

Control/ClassName | Part | States
BUTTON | BP_CHECKBOX = 3 | CBS_UNCHECKEDNORMAL = 1 CBS_UNCHECKEDHOT = 2 CBS_UNCHECKEDPRESSED = 3 CBS_UNCHECKEDDISABLED = 4 CBS_CHECKEDNORMAL = 5 CBS_CHECKEDHOT = 6 CBS_CHECKEDPRESSED = 7 CBS_CHECKEDDISABLED = 8 CBS_MIXEDNORMAL = 9 CBS_MIXEDHOT = 10 CBS_MIXEDPRESSED = 11 CBS_MIXEDDISABLED = 12
 | BP_GROUPBOX = 4 | GBS_NORMAL = 1 GBS_DISABLED = 2
 | BP_PUSHBUTTON = 1 | PBS_NORMAL = 1 PBS_HOT = 2 PBS_PRESSED = 3 PBS_DISABLED = 4 PBS_DEFAULTED = 5
 | BP_RADIOBUTTON = 2 | RBS_UNCHECKEDNORMAL = 1 RBS_UNCHECKEDHOT = 2 RBS_UNCHECKEDPRESSED = 3 RBS_UNCHECKEDDISABLED = 4 RBS_CHECKEDNORMAL = 5 RBS_CHECKEDHOT = 6 RBS_CHECKEDPRESSED = 7 RBS_CHECKEDDISABLED = 8
 | BP_USERBUTTON = 5 |
CLOCK | CLP_TIME = 1 | CLS_NORMAL = 1
COMBOBOX | CP_DROPDOWNBUTTON = 1 | CBXS_NORMAL = 1 CBXS_HOT = 2 CBXS_PRESSED = 3 CBXS_DISABLED = 4
EDIT | EP_CARET = 2 |
 | EP_EDITTEXT = 1 | ETS_NORMAL = 1 ETS_HOT = 2 ETS_SELECTED = 3 ETS_DISABLED = 4 ETS_FOCUSED = 5 ETS_READONLY = 6 ETS_ASSIST = 7
EXPLORERBAR | EBP_HEADERBACKGROUND = 1 |
 | EBP_HEADERCLOSE = 2 | EBHC_NORMAL = 1 EBHC_HOT = 2 EBHC_PRESSED = 3
 | EBP_HEADERPIN = 3 | EBHP_NORMAL = 1 EBHP_HOT = 2 EBHP_PRESSED = 3 EBHP_SELECTEDNORMAL = 4 EBHP_SELECTEDHOT = 5 EBHP_SELECTEDPRESSED = 6
 | EBP_IEBARMENU = 4 | EBM_NORMAL = 1 EBM_HOT = 2 EBM_PRESSED = 3
 | EBP_NORMALGROUPBACKGROUND = 5 |
 | EBP_NORMALGROUPCOLLAPSE = 6 | EBNGC_NORMAL = 1 EBNGC_HOT = 2 EBNGC_PRESSED = 3
 | EBP_NORMALGROUPEXPAND = 7 | EBNGE_NORMAL = 1 EBNGE_HOT = 2 EBNGE_PRESSED = 3
 | EBP_NORMALGROUPHEAD = 8 |
 | EBP_SPECIALGROUPBACKGROUND = 9 |
 | EBP_SPECIALGROUPCOLLAPSE = 10 | EBSGC_NORMAL = 1 EBSGC_HOT = 2 EBSGC_PRESSED = 3
 | EBP_SPECIALGROUPEXPAND = 11 | EBSGE_NORMAL = 1 EBSGE_HOT = 2 EBSGE_PRESSED = 3
 | EBP_SPECIALGROUPHEAD = 12 |
HEADER | HP_HEADERITEM = 1 | HIS_NORMAL = 1 HIS_HOT = 2 HIS_PRESSED = 3
 | HP_HEADERITEMLEFT = 2 | HILS_NORMAL = 1 HILS_HOT = 2 HILS_PRESSED = 3
 | HP_HEADERITEMRIGHT = 3 | HIRS_NORMAL = 1 HIRS_HOT = 2 HIRS_PRESSED = 3
 | HP_HEADERSORTARROW = 4 | HSAS_SORTEDUP = 1 HSAS_SORTEDDOWN = 2
LISTVIEW | LVP_EMPTYTEXT = 5 |
 | LVP_LISTDETAIL = 3 |
 | LVP_LISTGROUP = 2 |
 | LVP_LISTITEM = 1 | LIS_NORMAL = 1 LIS_HOT = 2 LIS_SELECTED = 3 LIS_DISABLED = 4 LIS_SELECTEDNOTFOCUS = 5
 | LVP_LISTSORTEDDETAIL = 4 |
MENU | MP_MENUBARDROPDOWN = 4 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
 | MP_MENUBARITEM = 3 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
 | MP_CHEVRON = 5 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
 | MP_MENUDROPDOWN = 2 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
 | MP_MENUITEM = 1 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
 | MP_SEPARATOR = 6 | MS_NORMAL = 1 MS_SELECTED = 2 MS_DEMOTED = 3
MENUBAND | MDP_NEWAPPBUTTON = 1 | MDS_NORMAL = 1 MDS_HOT = 2 MDS_PRESSED = 3 MDS_DISABLED = 4 MDS_CHECKED = 5 MDS_HOTCHECKED = 6
 | MDP_SEPERATOR = 2 |
PAGE | PGRP_DOWN = 2 | DNS_NORMAL = 1 DNS_HOT = 2 DNS_PRESSED = 3 DNS_DISABLED = 4
 | PGRP_DOWNHORZ = 4 | DNHZS_NORMAL = 1 DNHZS_HOT = 2 DNHZS_PRESSED = 3 DNHZS_DISABLED = 4
 | PGRP_UP = 1 | UPS_NORMAL = 1 UPS_HOT = 2 UPS_PRESSED = 3 UPS_DISABLED = 4
 | PGRP_UPHORZ = 3 | UPHZS_NORMAL = 1 UPHZS_HOT = 2 UPHZS_PRESSED = 3 UPHZS_DISABLED = 4
PROGRESS | PP_BAR = 1 |
 | PP_BARVERT = 2 |
 | PP_CHUNK = 3 |
 | PP_CHUNKVERT = 4 |
REBAR | RP_BAND = 3 |
 | RP_CHEVRON = 4 | CHEVS_NORMAL = 1 CHEVS_HOT = 2 CHEVS_PRESSED = 3
 | RP_CHEVRONVERT = 5 |
 | RP_GRIPPER = 1 |
 | RP_GRIPPERVERT = 2 |
SCROLLBAR | SBP_ARROWBTN = 1 | ABS_DOWNDISABLED, ABS_DOWNHOT, ABS_DOWNNORMAL, ABS_DOWNPRESSED, ABS_UPDISABLED, ABS_UPHOT, ABS_UPNORMAL, ABS_UPPRESSED, ABS_LEFTDISABLED, ABS_LEFTHOT, ABS_LEFTNORMAL, ABS_LEFTPRESSED, ABS_RIGHTDISABLED, ABS_RIGHTHOT, ABS_RIGHTNORMAL, ABS_RIGHTPRESSED
 | SBP_GRIPPERHORZ = 8 |
 | SBP_GRIPPERVERT = 9 |
 | SBP_LOWERTRACKHORZ = 4 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_LOWERTRACKVERT = 6 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_THUMBBTNHORZ = 2 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_THUMBBTNVERT = 3 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_UPPERTRACKHORZ = 5 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_UPPERTRACKVERT = 7 | SCRBS_NORMAL = 1 SCRBS_HOT = 2 SCRBS_PRESSED = 3 SCRBS_DISABLED = 4
 | SBP_SIZEBOX = 10 | SZB_RIGHTALIGN = 1 SZB_LEFTALIGN = 2
SPIN | SPNP_DOWN = 2 | DNS_NORMAL = 1 DNS_HOT = 2 DNS_PRESSED = 3 DNS_DISABLED = 4
 | SPNP_DOWNHORZ = 4 | DNHZS_NORMAL = 1 DNHZS_HOT = 2 DNHZS_PRESSED = 3 DNHZS_DISABLED = 4
 | SPNP_UP = 1 | UPS_NORMAL = 1 UPS_HOT = 2 UPS_PRESSED = 3 UPS_DISABLED = 4
 | SPNP_UPHORZ = 3 | UPHZS_NORMAL = 1 UPHZS_HOT = 2 UPHZS_PRESSED = 3 UPHZS_DISABLED = 4
STARTPANEL | SPP_LOGOFF = 8 |
 | SPP_LOGOFFBUTTONS = 9 | SPLS_NORMAL = 1 SPLS_HOT = 2 SPLS_PRESSED = 3
 | SPP_MOREPROGRAMS = 2 |
 | SPP_MOREPROGRAMSARROW = 3 | SPS_NORMAL = 1 SPS_HOT = 2 SPS_PRESSED = 3
 | SPP_PLACESLIST = 6 |
 | SPP_PLACESLISTSEPARATOR = 7 |
 | SPP_PREVIEW = 11 |
 | SPP_PROGLIST = 4 |
 | SPP_PROGLISTSEPARATOR = 5 |
 | SPP_USERPANE = 1 |
 | SPP_USERPICTURE = 10 |
STATUS | SP_GRIPPER = 3 |
 | SP_PANE = 1 |
 | SP_GRIPPERPANE = 2 |
TAB | TABP_BODY = 10 |
 | TABP_PANE = 9 |
 | TABP_TABITEM = 1 | TIS_NORMAL = 1 TIS_HOT = 2 TIS_SELECTED = 3 TIS_DISABLED = 4 TIS_FOCUSED = 5
 | TABP_TABITEMBOTHEDGE = 4 | TIBES_NORMAL = 1 TIBES_HOT = 2 TIBES_SELECTED = 3 TIBES_DISABLED = 4 TIBES_FOCUSED = 5
 | TABP_TABITEMLEFTEDGE = 2 | TILES_NORMAL = 1 TILES_HOT = 2 TILES_SELECTED = 3 TILES_DISABLED = 4 TILES_FOCUSED = 5
 | TABP_TABITEMRIGHTEDGE = 3 | TIRES_NORMAL = 1 TIRES_HOT = 2 TIRES_SELECTED = 3 TIRES_DISABLED = 4 TIRES_FOCUSED = 5
 | TABP_TOPTABITEM = 5 | TTIS_NORMAL = 1 TTIS_HOT = 2 TTIS_SELECTED = 3 TTIS_DISABLED = 4 TTIS_FOCUSED = 5
 | TABP_TOPTABITEMBOTHEDGE = 8 | TTIBES_NORMAL = 1 TTIBES_HOT = 2 TTIBES_SELECTED = 3 TTIBES_DISABLED = 4 TTIBES_FOCUSED = 5
 | TABP_TOPTABITEMLEFTEDGE = 6 | TTILES_NORMAL = 1 TTILES_HOT = 2 TTILES_SELECTED = 3 TTILES_DISABLED = 4 TTILES_FOCUSED = 5
 | TABP_TOPTABITEMRIGHTEDGE = 7 | TTIRES_NORMAL = 1 TTIRES_HOT = 2 TTIRES_SELECTED = 3 TTIRES_DISABLED = 4 TTIRES_FOCUSED = 5
TASKBAND | TDP_GROUPCOUNT = 1 |
 | TDP_FLASHBUTTON = 2 |
 | TDP_FLASHBUTTONGROUPMENU = 3 |
TASKBAR | TBP_BACKGROUNDBOTTOM = 1 |
 | TBP_BACKGROUNDLEFT = 4 |
 | TBP_BACKGROUNDRIGHT = 2 |
 | TBP_BACKGROUNDTOP = 3 |
 | TBP_SIZINGBARBOTTOM = 5 |
 | TBP_SIZINGBARBOTTOMLEFT = 8 |
 | TBP_SIZINGBARRIGHT = 6 |
 | TBP_SIZINGBARTOP = 7 |
TOOLBAR | TP_BUTTON = 1 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
 | TP_DROPDOWNBUTTON = 2 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
 | TP_SPLITBUTTON = 3 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
 | TP_SPLITBUTTONDROPDOWN = 4 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
 | TP_SEPARATOR = 5 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
 | TP_SEPARATORVERT = 6 | TS_NORMAL = 1 TS_HOT = 2 TS_PRESSED = 3 TS_DISABLED = 4 TS_CHECKED = 5 TS_HOTCHECKED = 6
TOOLTIP | TTP_BALLOON = 3 | TTBS_NORMAL = 1 TTBS_LINK = 2
 | TTP_BALLOONTITLE = 4 | TTBS_NORMAL = 1 TTBS_LINK = 2
 | TTP_CLOSE = 5 | TTCS_NORMAL = 1 TTCS_HOT = 2 TTCS_PRESSED = 3
 | TTP_STANDARD = 1 | TTSS_NORMAL = 1 TTSS_LINK = 2
 | TTP_STANDARDTITLE = 2 | TTSS_NORMAL = 1 TTSS_LINK = 2
TRACKBAR | TKP_THUMB = 3 | TUS_NORMAL = 1 TUS_HOT = 2 TUS_PRESSED = 3 TUS_FOCUSED = 4 TUS_DISABLED = 5
 | TKP_THUMBBOTTOM = 4 | TUBS_NORMAL = 1 TUBS_HOT = 2 TUBS_PRESSED = 3 TUBS_FOCUSED = 4 TUBS_DISABLED = 5
 | TKP_THUMBLEFT = 7 | TUVLS_NORMAL = 1 TUVLS_HOT = 2 TUVLS_PRESSED = 3 TUVLS_FOCUSED = 4 TUVLS_DISABLED = 5
 | TKP_THUMBRIGHT = 8 | TUVRS_NORMAL = 1 TUVRS_HOT = 2 TUVRS_PRESSED = 3 TUVRS_FOCUSED = 4 TUVRS_DISABLED = 5
 | TKP_THUMBTOP = 5 | TUTS_NORMAL = 1 TUTS_HOT = 2 TUTS_PRESSED = 3 TUTS_FOCUSED = 4 TUTS_DISABLED = 5
 | TKP_THUMBVERT = 6 | TUVS_NORMAL = 1 TUVS_HOT = 2 TUVS_PRESSED = 3 TUVS_FOCUSED = 4 TUVS_DISABLED = 5
 | TKP_TICS = 9 | TSS_NORMAL = 1
 | TKP_TICSVERT = 10 | TSVS_NORMAL = 1
 | TKP_TRACK = 1 | TRS_NORMAL = 1
 | TKP_TRACKVERT = 2 | TRVS_NORMAL = 1
TRAYNOTIFY | TNP_ANIMBACKGROUND = 2 |
 | TNP_BACKGROUND = 1 |
TREEVIEW | TVP_BRANCH = 3 |
 | TVP_GLYPH = 2 | GLPS_CLOSED = 1 GLPS_OPENED = 2
 | TVP_TREEITEM = 1 | TREIS_NORMAL = 1 TREIS_HOT = 2 TREIS_SELECTED = 3 TREIS_DISABLED = 4 TREIS_SELECTEDNOTFOCUS = 5
WINDOW | WP_CAPTION = 1 | CS_ACTIVE = 1 CS_INACTIVE = 2 CS_DISABLED = 3
 | WP_CAPTIONSIZINGTEMPLATE = 30 |
 | WP_CLOSEBUTTON = 18 | CBS_NORMAL = 1 CBS_HOT = 2 CBS_PUSHED = 3 CBS_DISABLED = 4
 | WP_DIALOG = 29 |
 | WP_FRAMEBOTTOM = 9 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_FRAMEBOTTOMSIZINGTEMPLATE = 36 |
 | WP_FRAMELEFT = 7 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_FRAMELEFTSIZINGTEMPLATE = 32 |
 | WP_FRAMERIGHT = 8 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_FRAMERIGHTSIZINGTEMPLATE = 34 |
 | WP_HELPBUTTON = 23 | HBS_NORMAL = 1 HBS_HOT = 2 HBS_PUSHED = 3 HBS_DISABLED = 4
 | WP_HORZSCROLL = 25 | HSS_NORMAL = 1 HSS_HOT = 2 HSS_PUSHED = 3 HSS_DISABLED = 4
 | WP_HORZTHUMB = 26 | HTS_NORMAL = 1 HTS_HOT = 2 HTS_PUSHED = 3 HTS_DISABLED = 4
 | WP_MAX_BUTTON | MAXBS_NORMAL = 1 MAXBS_HOT = 2 MAXBS_PUSHED = 3 MAXBS_DISABLED = 4
 | WP_MAXCAPTION = 5 | MXCS_ACTIVE = 1 MXCS_INACTIVE = 2 MXCS_DISABLED = 3
 | WP_MDICLOSEBUTTON = 20 | CBS_NORMAL = 1 CBS_HOT = 2 CBS_PUSHED = 3 CBS_DISABLED = 4
 | WP_MDIHELPBUTTON = 24 | HBS_NORMAL = 1 HBS_HOT = 2 HBS_PUSHED = 3 HBS_DISABLED = 4
 | WP_MDIMINBUTTON = 16 | MINBS_NORMAL = 1 MINBS_HOT = 2 MINBS_PUSHED = 3 MINBS_DISABLED = 4
 | WP_MDIRESTOREBUTTON = 22 | RBS_NORMAL = 1 RBS_HOT = 2 RBS_PUSHED = 3 RBS_DISABLED = 4
 | WP_MDISYSBUTTON = 14 | SBS_NORMAL = 1 SBS_HOT = 2 SBS_PUSHED = 3 SBS_DISABLED = 4
 | WP_MINBUTTON = 15 | MINBS_NORMAL = 1 MINBS_HOT = 2 MINBS_PUSHED = 3 MINBS_DISABLED = 4
 | WP_MINCAPTION = 3 | MNCS_ACTIVE = 1 MNCS_INACTIVE = 2 MNCS_DISABLED = 3
 | WP_RESTOREBUTTON = 21 | RBS_NORMAL = 1 RBS_HOT = 2 RBS_PUSHED = 3 RBS_DISABLED = 4
 | WP_SMALLCAPTION = 2 | CS_ACTIVE = 1 CS_INACTIVE = 2 CS_DISABLED = 3
 | WP_SMALLCAPTIONSIZINGTEMPLATE = 31 |
 | WP_SMALLCLOSEBUTTON = 19 | CBS_NORMAL = 1 CBS_HOT = 2 CBS_PUSHED = 3 CBS_DISABLED = 4
 | WP_SMALLFRAMEBOTTOM = 12 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37 |
 | WP_SMALLFRAMELEFT = 10 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33 |
 | WP_SMALLFRAMERIGHT = 11 | FS_ACTIVE = 1 FS_INACTIVE = 2
 | WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35 |
 | WP_SMALLHELPBUTTON | HBS_NORMAL = 1 HBS_HOT = 2 HBS_PUSHED = 3 HBS_DISABLED = 4
 | WP_SMALLMAXBUTTON | MAXBS_NORMAL = 1 MAXBS_HOT = 2 MAXBS_PUSHED = 3 MAXBS_DISABLED = 4
 | WP_SMALLMAXCAPTION = 6 | MXCS_ACTIVE = 1 MXCS_INACTIVE = 2 MXCS_DISABLED = 3
 | WP_SMALLMINCAPTION = 4 | MNCS_ACTIVE = 1 MNCS_INACTIVE = 2 MNCS_DISABLED = 3
 | WP_SMALLRESTOREBUTTON | RBS_NORMAL = 1 RBS_HOT = 2 RBS_PUSHED = 3 RBS_DISABLED = 4
 | WP_SMALLSYSBUTTON | SBS_NORMAL = 1 SBS_HOT = 2 SBS_PUSHED = 3 SBS_DISABLED = 4
 | WP_SYSBUTTON = 13 | SBS_NORMAL = 1 SBS_HOT = 2 SBS_PUSHED = 3 SBS_DISABLED = 4
 | WP_VERTSCROLL = 27 | VSS_NORMAL = 1 VSS_HOT = 2 VSS_PUSHED = 3 VSS_DISABLED = 4
 | WP_VERTTHUMB = 28 | VTS_NORMAL = 1 VTS_HOT = 2 VTS_PUSHED = 3 VTS_DISABLED = 4


method Clear

method Appearance.Clear ()
Removes all skins in the control.

Type Description
Use the Clear method to clear all skins from the control. Use the Remove method to remove a specific skin. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.


method Remove

method Appearance.Remove (ID as Long)
Removes a specific skin from the control.

Type | Description
ID as Long | A Long expression that indicates the index of the skin being removed.
Use the Remove method to remove a specific skin. The identifier of the skin being removed should be the same as when the skin was added using the Add method. Use the Clear method to clear all skins from the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.


property RenderType

property Appearance.RenderType as Long
Specifies the way colored EBN objects are displayed on the component.

Type | Description
Long | A long expression that indicates how the EBN objects are shown in the control, like explained bellow.
By default, the RenderType property is 0, which indicates an A-color scheme. The RenderType property can be used to change the colors for the entire control, for parts of the controls that uses EBN objects. The RenderType property is not applied to the currently XP-theme if using.

The RenderType property is applied to all parts that displays an EBN object. The properties of color type may support the EBN object if the property's description includes "A color expression that indicates the cell's background color. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part." In other words, a property that supports EBN objects should be of format 0xIDRRGGBB, where the ID is the identifier of the EBN to be applied, while the BBGGRR is the (Red,Green,Blue, RGB-Color) color to be applied on the selected EBN. For instance, the 0x1000000 indicates displaying the EBN as it is, with no color applied, while the 0x1FF0000, applies the Blue color ( RGB(0x0,0x0,0xFF), RGB(0,0,255) on the EBN with the identifier 1. You can use the EBNColor tool to visualize applying EBN colors.

Click here [image] to watch a movie on how you can change the colors to be applied on EBN objects.

For instance, the following sample changes the control's header appearance, by using an EBN object:

With Control
    .VisualAppearance.Add 1,"c:\exontrol\images\normal.ebn"
    .BackColorHeader = &H1000000
End With

In the following screen shot the following objects displays the current EBN with a different color:

  • "A" in Red ( RGB(255,0,0 ), for instance the bar's property exBarColor is 0x10000FF
  • "B" in Green ( RGB(0,255,0 ), for instance the bar's property exBarColor is 0x100FF00
  • "C" in Blue ( RGB(0,0,255 ), for instance the bar's property exBarColor is 0x1FF0000
  • "Default", no color is specified, for instance the bar's property exBarColor is 0x1000000

The RenderType property could be one of the following:

  • -3, no color is applied. For instance, the BackColorHeader = &H1FF0000 is displayed as would be .BackColorHeader = &H1000000, so the 0xFF0000 color ( Blue color ) is ignored. You can use this option to allow the control displays the EBN colors or not.

  • -2, OR-color scheme. The color to be applied on the part of the control is a OR bit combination between the original EBN color and the specified color. For instance, the BackColorHeader = &H1FF0000, applies the OR bit for the entire Blue channel, or in other words, it applies a less Blue to the part of the control. This option should be used with solid colors (RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0), RGB(255,0,255), RGB(0,255,255),RGB(127,0,0),RGB(0,127,0), ... )

  • -1, AND-color scheme, The color to be applied on the part of the control is an AND bit combination between the original EBN color and the specified color. For instance, the BackColorHeader = &H1FF0000, applies the AND bit for the entire Blue channel, or in other words, it applies a more Blue to the part of the control. This option should be used with solid colors (RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0), RGB(255,0,255), RGB(0,255,255),RGB(127,0,0),RGB(0,127,0), ... )

  • 0, default, the specified color is applied to the EBN. For instance, the BackColorHeader = &H1FF0000, applies a Blue color to the object. This option could be used to specify any color for the part of the components, that support EBN objects, not only solid colors.

  • 0xAABBGGRR, where the AA a value between 0 to 255, which indicates the transparency, and RR, GG, BB the red, green and blue values. This option applies the same color to all parts that displays EBN objects, whit ignoring any specified color in the color property. For instance, the RenderType on 0x4000FFFF, indicates a 25% Yellow on EBN objects. The 0x40, or 64 in decimal, is a 25 % from in a 256 interal, and the 0x00FFFF, indicates the Yellow ( RGB(255,255,0) ). The same could be if the RenderType is 0x40000000 + vbYellow, or &H40000000 + RGB(255, 255, 0), and so, the RenderType could be the 0xAA000000 + Color, where the Color is the RGB format of the color.

The following picture shows the control with the RenderType property on 0x4000FFFF (25% Yellow, 0x40 or 64 in decimal is 25% from 256 ):

The following picture shows the control with the RenderType property on 0x8000FFFF (50% Yellow, 0x80 or 128 in decimal is 50% from 256 ):

The following picture shows the control with the RenderType property on 0xC000FFFF (75% Yellow, 0xC0 or 192 in decimal is 75% from 256 ):

The following picture shows the control with the RenderType property on 0xFF00FFFF (100% Yellow, 0xFF or 255 in decimal is 100% from 255 ):


Column object
The Column object holds properties that a column can display in a face of exFaceTree type. The Type property specifies the type of the face. The exFaceTree type can display one or multiple columns.

The following screen shot shows a FaceTree with one column:

The following table shows how you can get a Column object ( the red items indicates properties )

EXTREECUBELib.Columns
    "Add(String)" -> EXTREECUBELib.Column
    "Item(Variant)" -> EXTREECUBELib.Column

The following table shows how you can get a Column object ( the red items indicates properties )

EXTREECUBELib.Column <- "Add(String)" of EXTREECUBELib.Columns
EXTREECUBELib.Column <- "Item(Variant)" of EXTREECUBELib.Columns

The Column object supports the following properties and methods:

Name | Description
Alignment | Retrieves or sets the column's alignment.
Caption | Retrieves or sets the text displayed to the column's header.
Def | Retrieves or sets a value that indicates the default value of given properties for all cells in the same column.
DisplayExpandButton | Shows or hides the expanding/collapsing button in the column's header.
Enabled | Enables or disables the column.
ExpandColumns | Specifies the list of columns to be shown when the current column is expanded.
Expanded | Expands or collapses the column.
FormatColumn | Specifies the format to display the cells in the column.
Index | Indicates the index of the column.
PartialCheck | Specifies whether the column supports partial check feature.
Position | Retrieves or sets a value that indicates the position of the column in the header bar area.
Visible | Retrieves or sets a value indicating whether the column is visible or hidden.
Width | Retrieves or sets the column's width.


property Alignment

property Column.Alignment as AlignmentEnum
Retrieves or sets the column's alignment.

Type | Description
AlignmentEnum | A AlignmentEnum expression that specifies the alignment of the column.
By default, the Alignment property is CenterAlignment. The Alignment property aligns the Caption and content of the columns' cells. Use the Def(exCellDrawPartsOrder) property to specify the order of the parts inside the cell. For instance, if you want to display the column's check box aligned to the right, set the Alignment property to RightAlignment, and change the Def(exCellDrawPartsOrder) property to "caption,picture,icons,icon,check". You can use any of the following HTML tags to align portion of text inside the captions:
  • <c> centers the rest of the text
  • <r>, aligns the rest of the text to the right
  • if any of these tags are missing, the text is left aligned.


property Caption

property Column.Caption as String
Retrieves or sets the text displayed to the column's header.

Type | Description
String | A String expression that defines the HTML text to be shown on the control's header.
The Caption property specifies the HTML caption to be shown on the control's header bar. The HeaderVisible property specifies whether the control shows it's header bar.

The Caption supports the following built-in HTML tags:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:


property Def

property Column.Def(Property as DefColumnEnum) as Variant
Retrieves or sets a value that indicates the default value of given properties for all cells in the same column.

Type | Description
Property as DefColumnEnum | A DefColumnEnum expression that indicates the property being changed.
Variant | Variant value that specifies the newly value.
Use the Def property to specify a common value for given properties for all cells in the column. For instance, you can use the Def property to assign check boxes to all cells in the column, without enumerating them.

The following samples show how to assign a check-box to entire column:

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .ItemPadding = 20
        With .Columns.Add("Def")
            .Alignment = 0
            .Def(0) = True
            .FormatColumn = "`Check <b>` + 1 pos ``"
        End With
        .Items.Count = 4
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .ItemPadding = 20
        With .Columns.Add("Def")
            .Alignment = LeftAlignment
            .Def(exCellHasCheckBox) = True
            .FormatColumn = "`Check <b>` + 1 pos ``"
        End With
        .Items.Count = 4
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .ItemPadding = 20
        With .Columns.Add("Def")
            .Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
            .set_Def(exontrol.EXTREECUBELib.DefColumnEnum.exCellHasCheckBox,True)
            .FormatColumn = "`Check <b>` + 1 pos ``"
        End With
        .Items.Count = 4
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .ItemPadding = 20
        With .Columns.Add("Def")
            .Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
            .Def(EXTREECUBELib.DefColumnEnum.exCellHasCheckBox) = True
            .FormatColumn = "`Check <b>` + 1 pos ``"
        End With
        .Items.Count = 4
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutItemPadding(20);
    EXTREECUBELib::IColumnPtr var_Column = var_FaceTree->GetColumns()->Add(L"Def");
        var_Column->PutAlignment(EXTREECUBELib::LeftAlignment);
        var_Column->PutDef(EXTREECUBELib::exCellHasCheckBox,VARIANT_TRUE);
        var_Column->PutFormatColumn(L"`Check <b>` + 1 pos ``");
    var_FaceTree->GetItems()->PutCount(4);

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ItemPadding = 20;
    Extreecubelib_tlb::IColumnPtr var_Column = var_FaceTree->Columns->Add(L"Def");
        var_Column->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
        var_Column->set_Def(Extreecubelib_tlb::DefColumnEnum::exCellHasCheckBox,TVariant(true));
        var_Column->FormatColumn = L"`Check <b>` + 1 pos ``";
    var_FaceTree->Items->Count = 4;

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ItemPadding = 20;
    exontrol.EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Def");
        var_Column.Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
        var_Column.set_Def(exontrol.EXTREECUBELib.DefColumnEnum.exCellHasCheckBox,true);
        var_Column.FormatColumn = "`Check <b>` + 1 pos ``";
    var_FaceTree.Items.Count = 4;

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ItemPadding = 20;
        var var_Column = var_FaceTree.Columns.Add("Def");
            var_Column.Alignment = 0;
            var_Column.Def(0) = true;
            var_Column.FormatColumn = "`Check <b>` + 1 pos ``";
        var_FaceTree.Items.Count = 4;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .ItemPadding = 20
            With .Columns.Add("Def")
                .Alignment = 0
                .Def(0) = True
                .FormatColumn = "`Check <b>` + 1 pos ``"
            End With
            .Items.Count = 4
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ItemPadding = 20;
    EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Def");
        var_Column.Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
        var_Column.set_Def(EXTREECUBELib.DefColumnEnum.exCellHasCheckBox,true);
        var_Column.FormatColumn = "`Check <b>` + 1 pos ``";
    var_FaceTree.Items.Count = 4;

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ItemPadding(20);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Def"); com_Column = var_Column;
            com_Column.Alignment(0/*LeftAlignment*/);
            com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
            com_Column.FormatColumn("`Check <b>` + 1 pos ``");
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.Count(4);
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        ItemPadding := 20;
        with Columns.Add('Def') do
        begin
            Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
            Def[EXTREECUBELib.DefColumnEnum.exCellHasCheckBox] := TObject(True);
            FormatColumn := '`Check <b>` + 1 pos ``';
        end;
        Items.Count := 4;
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        ItemPadding := 20;
        with Columns.Add('Def') do
        begin
            Alignment := EXTREECUBELib_TLB.LeftAlignment;
            Def[EXTREECUBELib_TLB.exCellHasCheckBox] := OleVariant(True);
            FormatColumn := '`Check <b>` + 1 pos ``';
        end;
        Items.Count := 4;
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .ItemPadding = 20
        with .Columns.Add("Def")
            .Alignment = 0
            .Def(0) = .T.
            .FormatColumn = "`Check <b>` + 1 pos ``"
        endwith
        .Items.Count = 4
    endwith
endwith

dBASE Plus

local oTreeCube,var_Column,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 20
    var_Column = var_FaceTree.Columns.Add("Def")
        var_Column.Alignment = 0
        // var_Column.Def(0) = true
        with (oTreeCube)
            TemplateDef = [dim var_Column]
            TemplateDef = var_Column
            Template = [var_Column.Def(0) = True]
        endwith
        var_Column.FormatColumn = "`Check <b>` + 1 pos ``"
    var_FaceTree.Items.Count = 4

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 20
    var_Column = var_FaceTree.Columns.Add("Def")
        var_Column.Alignment = 0
        ' var_Column.Def(0) = .t.
        oTreeCube.TemplateDef = "dim var_Column"
        oTreeCube.TemplateDef = var_Column
        oTreeCube.Template = "var_Column.Def(0) = True"

        var_Column.FormatColumn = "`Check <b>` + 1 pos ``"
    var_FaceTree.Items.Count = 4

Visual Objects

local var_Column as IColumn
local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ItemPadding := 20
    var_Column := var_FaceTree:Columns:Add("Def")
        var_Column:Alignment := LeftAlignment
        var_Column:[Def,exCellHasCheckBox] := true
        var_Column:FormatColumn := "`Check <b>` + 1 pos ``"
    var_FaceTree:Items:Count := 4

PowerBuilder

OleObject oTreeCube,var_Column,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 20
    var_Column = var_FaceTree.Columns.Add("Def")
        var_Column.Alignment = 0
        var_Column.Def(0,true)
        var_Column.FormatColumn = "`Check <b>` + 1 pos ``"
    var_FaceTree.Items.Count = 4

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComItemPadding of hoFaceTree to 20
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Def" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                    Set ComDef of hoColumn OLEexCellHasCheckBox to True
                    Set ComFormatColumn of hoColumn to "`Check <b>` + 1 pos ``"
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComCount of hoItems to 4
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oColumn
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ItemPadding := 20
            oColumn := oFaceTree:Columns():Add("Def")
                oColumn:Alignment := 0/*LeftAlignment*/
                oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
                oColumn:FormatColumn := "`Check <b>` + 1 pos ``"
            oFaceTree:Items():Count := 4

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property DisplayExpandButton

property Column.DisplayExpandButton as Boolean
Shows or hides the expanding/collapsing button in the column's header.

Type | Description
Boolean | A Boolean expression that specifies whether the +/- expanding/collapsing button is shown in the column's header.
By default, the DisplayExpandButton property is True. The DisplayExpandButton property indicates whether the +/- expanding/collapsing button is shown in the column's header. Use the Expanded property to programmatically expand/collapse the columns. For instance, the Expanded property on False, collapse the column, while the Expanded property on True, expands the columns indicated by the ExpandColumns property. The ExpandColumns property specifies the columns to be shown/hidden when a column is expanded or collapsed


property Enabled

property Column.Enabled as Boolean
Enables or disables the column.

Type | Description
Boolean | A boolean expression that determines whether a column's header can respond to user-generated events.
By default, the Enabled property is True. The Enabled property enables or disables the column. A disabled column shows grayed. The Enabled property specifies whether the item is enabled or disabled. The Enabled property specifies whether the entire control is enabled or disabled. The Enabled property specifies whether a Face is enabled or disabled.


property ExpandColumns

property Column.ExpandColumns as String
Specifies the list of columns to be shown when the current column is expanded.

Type | Description
String | A String expression that specifies the columns to be expanded/collapsed by current column. The expression contains the index of the columns to be shown or hidden, separated by comma. The list can includes the index of the current column, and so the column is always visible no matter if the column is expanded or collapsed.
By default, the ExpandColumns property is "". The ExpandColumns property specifies the columns to be shown/hidden when a column is expanded or collapsed. The ExpandColumns property can include the index of the current column, which indicates that the column is visible no matter if the column is expanded or collapsed. In other words, the Expanded/ExpandColumns properties provides expandable header. The Index property specifies the index of the column. The Expanded property specifies whether a column is expanded or collapsed. The DisplayExpandButton property indicates whether the +/- expanding/collapsing button is shown in the column's header. The HasButtons property specifies how the +/- buttons are shown.

The following screen shot shows the control's header when all columns are collapsed:

The following screen shot shows the control's header with columns expanded/collapsed :


property Expanded

property Column.Expanded as Boolean
Expands or collapses the column.

Type | Description
Boolean | A Boolean expression that specifies whether the column is expanded / collapsed.
By default, the Expanded property is True. Use the Expanded property to programmatically expand/collapse the columns. For instance, the Expanded property on False, collapse the column, while the Expanded property on True, expands the columns indicated by the ExpandColumns property. The ExpandColumns property specifies the columns to be shown/hidden when a column is expanded or collapsed. The DisplayExpandButton property indicates whether the +/- expanding/collapsing button is shown in the column's header.


property FormatColumn

property Column.FormatColumn as String
Specifies the format to display the cells in the column.

Type | Description
String | A string expression that defines the format to display the cell, including HTML formatting, if the cell supports it.
By default, the FormatColumn property is empty. The cells in the column use the specified format only if is valid ( not empty, and syntactically correct ), to display data in the column. The FormatColumn property provides a format to display all cells in the column using a predefined format. The expression may be a combination of variables, constants, strings, dates and operators, and value. The value operator gives the value to be formatted, while the state operator indicates the cell's state. A string is delimited by ", ` or ' characters, and inside they can have the starting character preceded by \ character, ie "\"This is a quote\"". A date is delimited by # character, ie #1/31/2001 10:00# means the January 31th, 2001, 10:00 AM. The FormatCell property specifies the caption to be displayed on a specified cell.

For instance:

  • the "currency(value)" displays the column using the current format for the currency ie, 1000 gets displayed as $1,000.00
  • the "longdate(date(value))" converts the value to a date and gets the long format to display the date in the column, ie #1/1/2001# displays instead Monday, January 01, 2001
  • the "'<b>' + ((0:=proper(value)) left 1) + '</b>' + (=:0 mid 2)" converts the name to proper, so the first letter is capitalized, bolds the first character, and let unchanged the rest, ie a "mihai filimon" gets displayed "Mihai Filimon".
  • the "len(value) ? ((0:=dbl(value)) < 10 ? '<fgcolor=808080><font ;7>' : '<b>') + currency(=:0)" displays the cells that contains not empty daya, the value in currency format, with a different font and color for values less than 10, and bolded for those that are greater than 10, as can see in the following screen shot in the column (A+B+C):

The value keyword in the property indicates the value to be formatted. The Value property specifies the cell's value.

The state keyword in the property indicates the cell's state. The State property specifies the cell's state, which can be 0, 1 or 2.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )

Other known operators for auto-numbering are:

  • number index 'format', indicates the index of the item. The first added item has the index 0, the second added item has the index 1, and so on. The index of the item remains the same even if the order of the items is changed by sorting. For instance, 1 index '' gets the index of the item starting from 1 while 100 index '' gets the index of the item starting from 100. The number indicates the starting index, while the format is a set of characters to be used for specifying the index. If the format is missing, the index of the item is formatted as numbers. For instance: 1 index 'A-Z' gets the index as A, B, C... Z, BA, BB, ... BZ, CA, ... . The 1 index 'abc' gives the index as: a,b,c,ba,bb,bc,ca,cb,cc,.... You can use other number formatting function to format the returned value. For instance "1 index '' format '0||2|:'" gets the numbers grouped by 2 digits and separated by : character.

    In the following screen shot the FormatColumn("Col 1") = "1 index ''"

    In the following screen shot the FormatColumn("Col 1") = "1 index 'A-Z'"

  • number apos 'format' indicates the absolute position of the item. The first displayed item has the absolute position 0 ( scrolling position on top ), the next visible item is 1, and so on. The number indicates the starting position, while the format is a set of characters to be used for specifying the position. For instance, 1 apos '' gets the absolute position of the item starting from 1, while 100 apos '' gets the position of the item starting from 100. If the format is missing, the absolute position of the item is formatted as numbers.

    In the following screen shot the FormatColumn("Col 1") = "1 apos ''"

    In the following screen shot the FormatColumn("Col 1") = "1 apos 'A-Z'"

  • number pos 'format' indicates the relative position of the item. The relative position is the position of the visible child item in the parent children collection. The number indicates the starting position, while the format is a set of characters to be used for specifying the position. For instance, 1 pos '' gets the relative position of the item starting from 1, while 100 pos '' gets the relative position of the item starting from 100. If the format is missing, the relative position of the item is formatted as numbers. The difference between pos and opos can be seen while filtering the items in the control. For instance, if no filter is applied to the control, the pos and opos gets the same result. Instead, if the filter is applied, the opos gets the position of the item in the list of unfiltered items, while the pos gets the position of the item in the filtered list.

    In the following screen shot the FormatColumn("Col 2") = "'<b>' + 1 pos '' + '</b> ' + value"

    In the following screen shot the FormatColumn("Col 2") = "'<b>' + 1 pos 'A-Z' + '</b> ' + value"

  • number opos 'format' indicates the relative old position of the item. The relative old position is the position of the child item in the parent children collection. The number indicates the starting position, while the format is a set of characters to be used for specifying the position.For instance, 1 pos '' gets the relative position of the item starting from 1, while 100 pos '' gets the relative position of the item starting from 100. If the format is missing, the relative position of the item is formatted as numbers. The difference between pos and opos can be seen while filtering the items in the control. For instance, if no filter is applied to the control, the pos and opos gets the same result. Instead, if the filter is applied, the opos gets the position of the item in the list of unfiltered items, while the pos gets the position of the item in the filtered list.
  • number rpos 'format' indicates the relative recursive position of the item. The recursive position indicates the position of the parent items too. The relative position is the position of the visible child item in the parent children collection. The number indicates the starting position, while the format is of the following type "delimiter|format|format|...". If the format is missing, the delimiter is . character, and the positions are formatted as numbers. The format is applied consecutively to each parent item, from root to item itself.

    In the following screen shot the FormatColumn("Col 1") = "1 rpos ''"

    In the following screen shot the FormatColumn("Col 1") = "1 rpos ':|A-Z'"

    In the following screen shot the FormatColumn("Col 1") = "1 rpos '.|A-Z|'"

    In the following screen shot the FormatColumn("Col 1") = "1 apos ''" and FormatColumn("Col 2") = "'<b><font Tahoma;10>' + 1 rpos '.|A-Z|' + '</font></b> ' + value"

  • number rindex 'format', number rapos 'format' and number ropos 'format' are working similar with number rpos 'format', excepts that they gives the index, absolute position, or the old child position.

The expression supports also immediate if ( similar with iif in visual basic, or ? : in C++ ) ie cond ? value_true : value_false, which means that once that cond is true the value_true is used, else the value_false is used. Also, it supports variables, up to 10 from 0 to 9. For instance, 0:="Abc" means that in the variable 0 is "Abc", and =:0 means retrieves the value of the variable 0. You can use variables to avoid computing several times the same thing.

The following samples show how you can add a column that displays the position of the item in the hierarchy:

VBA (MS Access, Excell...)

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ItemPadding = 10
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("Default").Alignment = 0
        With .Columns.Add("Pos")
            .Position = 0
            .Alignment = 0
            .FormatColumn = "1 rpos ``"
            .Width = 24
        End With
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ItemPadding = 10
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("Default").Alignment = LeftAlignment
        With .Columns.Add("Pos")
            .Position = 0
            .Alignment = LeftAlignment
            .FormatColumn = "1 rpos ``"
            .Width = 24
        End With
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ItemPadding = 10
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("Default").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Columns.Add("Pos")
            .Position = 0
            .Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
            .FormatColumn = "1 rpos ``"
            .Width = 24
        End With
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ItemPadding = 10
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("Default").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Columns.Add("Pos")
            .Position = 0
            .Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
            .FormatColumn = "1 rpos ``"
            .Width = 24
        End With
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"Default")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IColumnPtr var_Column = var_FaceTree->GetColumns()->Add(L"Pos");
        var_Column->PutPosition(0);
        var_Column->PutAlignment(EXTREECUBELib::LeftAlignment);
        var_Column->PutFormatColumn(L"1 rpos ``");
        var_Column->PutWidth(24);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"Default")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IColumnPtr var_Column = var_FaceTree->Columns->Add(L"Pos");
        var_Column->Position = 0;
        var_Column->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
        var_Column->FormatColumn = L"1 rpos ``";
        var_Column->Width = 24;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("Default").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Pos");
        var_Column.Position = 0;
        var_Column.Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
        var_Column.FormatColumn = "1 rpos ``";
        var_Column.Width = 24;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("Default").Alignment = 0;
        var var_Column = var_FaceTree.Columns.Add("Pos");
            var_Column.Position = 0;
            var_Column.Alignment = 0;
            var_Column.FormatColumn = "1 rpos ``";
            var_Column.Width = 24;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ItemPadding = 10
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("Default").Alignment = 0
            With .Columns.Add("Pos")
                .Position = 0
                .Alignment = 0
                .FormatColumn = "1 rpos ``"
                .Width = 24
            End With
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("Default").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Pos");
        var_Column.Position = 0;
        var_Column.Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
        var_Column.FormatColumn = "1 rpos ``";
        var_Column.Width = 24;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ItemPadding(10);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Default"); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Pos"); com_Column = var_Column;
            com_Column.Position(0);
            com_Column.Alignment(0/*LeftAlignment*/);
            com_Column.FormatColumn("1 rpos ``");
            com_Column.Width(24);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ItemPadding := 10;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('Default').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Columns.Add('Pos') do
        begin
            Position := 0;
            Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
            FormatColumn := '1 rpos ``';
            Width := 24;
        end;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ItemPadding := 10;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('Default').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Columns.Add('Pos') do
        begin
            Position := 0;
            Alignment := EXTREECUBELib_TLB.LeftAlignment;
            FormatColumn := '1 rpos ``';
            Width := 24;
        end;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ItemPadding = 10
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("Default").Alignment = 0
        with .Columns.Add("Pos")
            .Position = 0
            .Alignment = 0
            .FormatColumn = "1 rpos ``"
            .Width = 24
        endwith
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

local oTreeCube,var_Column,var_Column1,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 10
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("Default").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Default")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Column1 = var_FaceTree.Columns.Add("Pos")
        var_Column1.Position = 0
        var_Column1.Alignment = 0
        var_Column1.FormatColumn = "1 rpos ``"
        var_Column1.Width = 24
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as local
Dim var_Column1 as P
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 10
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("Default").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Default")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Column1 = var_FaceTree.Columns.Add("Pos")
        var_Column1.Position = 0
        var_Column1.Alignment = 0
        var_Column1.FormatColumn = "1 rpos ``"
        var_Column1.Width = 24
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

local var_Column as IColumn
local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ItemPadding := 10
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add("Default"):Alignment := LeftAlignment
    var_Column := var_FaceTree:Columns:Add("Pos")
        var_Column:Position := 0
        var_Column:Alignment := LeftAlignment
        var_Column:FormatColumn := "1 rpos ``"
        var_Column:Width := 24
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

OleObject oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ItemPadding = 10
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("Default").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Pos")
        var_Column.Position = 0
        var_Column.Alignment = 0
        var_Column.FormatColumn = "1 rpos ``"
        var_Column.Width = 24
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComItemPadding of hoFaceTree to 10
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Default" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voColumns1
            Get ComColumns of hoFaceTree to voColumns1
            Handle hoColumns1
            Get Create (RefClass(cComColumns)) to hoColumns1
            Set pvComObject of hoColumns1 to voColumns1
                Variant voColumn1
                Get ComAdd of hoColumns1 "Pos" to voColumn1
                Handle hoColumn1
                Get Create (RefClass(cComColumn)) to hoColumn1
                Set pvComObject of hoColumn1 to voColumn1
                    Set ComPosition of hoColumn1 to 0
                    Set ComAlignment of hoColumn1 to OLELeftAlignment
                    Set ComFormatColumn of hoColumn1 to "1 rpos ``"
                    Set ComWidth of hoColumn1 to 24
                Send Destroy to hoColumn1
            Send Destroy to hoColumns1
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oColumn
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ItemPadding := 10
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
            oColumn := oFaceTree:Columns():Add("Pos")
                oColumn:Position := 0
                oColumn:Alignment := 0/*LeftAlignment*/
                oColumn:FormatColumn := "1 rpos ``"
                oColumn:Width := 24
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property Index

property Column.Index as Long
Indicates the index of the item.

Type | Description
Long | A long expression that represents the index of an object in a collection.
Use the Position property to change the column's position. The Columns collection is zero based, so the Index property starts at 0. The last added column has the Index set to Columns.Count - 1. When a column is removed from the collection, the control updates all indexes. Use the Visible property to hide a column. Use the Columns property to access column from it's index.


property PartialCheck

property Column.PartialCheck as Boolean
Specifies whether the column supports partial check feature.

Type | Description
Boolean | A Boolean expression that specifies whether the column supports three-state check-boxes.

By default, the PartialCheck property is False. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button.


property Position

property Column.Position as Long
Retrieves or sets a value that indicates the position of the column in the header bar area.

Type | Description
Long | A long expression that indicates the position of the column in the header bar area.
The column's index is not the same with the column's position. The Index property of Column cannot be changed by the user. Use the Position property to change the column's position. Use the Visible property to hide a column. Use the Width property to specify the column's width.


property Visible

property Column.Visible as Boolean
Retrieves or sets a value indicating whether the column is visible or hidden.

Type | Description
Boolean | A boolean expression indicating whether the column is visible or hidden.
Use the Visible property to hide a column. Use the Width property to resize the column. The ColumnAutoResize property specifies whether the visible columns fit the control's client area. Use the Position property to specify the column's position. Use the HeaderVisible property to show or hide the control's header bar. Use the ColumnFromPoint property to get the column from point. Use the Remove method to remove a column.


property Width

property Column.Width as Long
Retrieves or sets the column's width.

Type | Description
Long | A Long expression that retrieves or sets the column's width.
Use the Width property to specify the column's width. The ColumnAutoResize property specifies whether the visible columns fit the control's client area. Use the Position property to specify the column's position. Use the HeaderVisible property to show or hide the control's header bar. Use the ColumnFromPoint property to get the column from point. Use the Remove method to remove a column.


Columns object
The Columns object holds a collection on Column objects that can be displayed in a face of exFaceTree type. The Type property specifies the type of the face. The exFaceTree type can display one or multiple columns.

The following screen shot shows a FaceTree with multiple columns:

The following table shows how you can get a Columns object ( the red items indicates properties )

EXTREECUBELib.FaceTree
    "Columns" -> EXTREECUBELib.Columns

The following table shows how you can get a Columns object ( the red items indicates properties )

EXTREECUBELib.Columns <- "Columns" of EXTREECUBELib.FaceTree

The Columns object supports the following properties and methods:

Name | Description
Add | Adds a Column object to the collection and returns a reference to the newly created object.
Clear | Removes all objects in a collection.
Count | Specifies the number of columns.
Item | Returns a specific Column of the Columns collection.
Remove | Removes a specific member from the Columns collection.
ToString | Loads or saves the Columns collection using string representation.


method Add

method Columns.Add (Caption as String)
Adds a Column object to the collection and returns a reference to the newly created object.

Type | Description
Caption as String | A string expression that indicates the caption for the column being added
Return | Description
Column | A Column object that indicates the newly added column.
By default, the control contains no columns. Before adding new items, you need to add columns. Use the Add / ToString / Count method to add new columns to the control. Use the Caption property to change the column's caption. To hide a column use the Visible property of the Column object. Use the BeginUpdate and EndUpdate methods to maintain performance while adding new columns and items.

How do I add a hierarchy?

VBA (MS Access, Excell...)

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("").Alignment = LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub Extreecube1_FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles Extreecube1.FaceTreeExpandItem
    With Extreecube1
        Debug.Print( Item )
    End With
End Sub

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub AxTreeCube1_FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles AxTreeCube1.FaceTreeExpandItem
    With AxTreeCube1
        Debug.Print( e.item )
    End With
End Sub

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void OnFaceTreeExpandItemTreeCube1(LPDISPATCH   Tree,long   Item)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
    OutputDebugString( L"Item" );
}

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void extreecube1_FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
}
//this.extreecube1.FaceTreeExpandItem += new exontrol.EXTREECUBELib.exg2antt.FaceTreeExpandItemEventHandler(this.extreecube1_FaceTreeExpandItem);

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
    alert( Item );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeExpandItem(Tree,Item)
    With TreeCube1
        alert( Item )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 10
            .HeaderVisible = False
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("").Alignment = 0
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void axTreeCube1_FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
}
//this.axTreeCube1.FaceTreeExpandItem += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEventHandler(this.axTreeCube1_FaceTreeExpandItem);

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
    ;
    print( _Item );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(10);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
    end
end;

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TForm1.TreeCube1FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
    end
end;

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

*** FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type. ***
LPARAMETERS Tree,Item
    with thisform.TreeCube1
        DEBUGOUT( Item )
    endwith

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 10
        .HeaderVisible = .F.
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeExpandItem = class::nativeObject_FaceTreeExpandItem
endwith
*/
// Notifies that an item has been expanded/collapsed into a face of tree type.
function nativeObject_FaceTreeExpandItem(Tree,Item)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
return

local oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

' Notifies that an item has been expanded/collapsed into a face of tree type.
function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

METHOD OCX_Exontrol1FaceTreeExpandItem(Tree,Item) CLASS MainDialog
    // FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
    OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 10
    var_FaceTree:HeaderVisible := false
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

/*begin event FaceTreeExpandItem(oleobject  Tree,long  Item) - Notifies that an item has been expanded/collapsed into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
*/
/*end event FaceTreeExpandItem*/

OleObject oTreeCube,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

// Notifies that an item has been expanded/collapsed into a face of tree type.
Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
    Showln llItem
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 10
            Set ComHeaderVisible of hoFaceTree to False
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
    DevOut( Transform(Item,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 10
            oFaceTree:HeaderVisible := .F.
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method Clear

method Columns.Clear ()
Removes all objects in a collection.

Type Description
Use the Clear method to remove all columns in the control. You can use ToString / Count to update the columns collection as well. Use the Remove method when you need to remove only a column.


property Count

property Columns.Count as Long
Specifies the number of columns.

Type | Description
Long | Counts the Column object into the collection.
The Count property counts the columns in the collection. Use the Columns property to access the control's Columns collection. Use the Item property to access a column by its index or key. Use the Add method to add new columns to the control. Use the Remove method to remove a column. Use the Clear method to clear the columns collection. By default, the control contains no columns. Before adding new items, you need to add columns. Use the Add / ToString / Count method to add new columns to the control. Use the Caption property to change the column's caption. To hide a column use the Visible property of the Column object. Use the BeginUpdate and EndUpdate methods to maintain performance while adding new columns and items.


property Item

property Columns.Item (Index as Variant) as Column
Returns a specific Column of the Columns collection.

Type | Description
Index as Variant | A long expression that indicates the column's index or a string expression that indicates the column's key or the column's caption.
Column | A column object being returned.
Use the Item property to access to a specific column. The Count property counts the columns in the control. Use the Columns property to access the control's Columns collection.

The Item property is the default property of the Columns object so the following statements are equivalents:

.Columns.Item ("Freight")
.Columns ("Freight")


method Remove

method Columns.Remove (Index as Variant)
Removes a specific member from the Columns collection.

Type | Description
Index as Variant | A long expression that indicates the column's index, or a string expression that indicates the column's caption or the column's key.
The Remove method removes a specific column in the Columns collection. Use Clear method to remove all Column objects. You can use ToString / Count to update the columns collection as well.


property ToString

property Columns.ToString as String
Loads or saves the Columns collection using string representation.

Type | Description
String | A String expression that specifies the comma-separated list of columns to be displayed.
By default, the control contains no columns. Before adding new items, you need to add columns. Use the Add / ToString / Count method to add new columns to the control. Use the Caption property to change the column's caption. To hide a column use the Visible property of the Column object. Use the BeginUpdate and EndUpdate methods to maintain performance while adding new columns and items.

How can I use the ToString property?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .DrawGridLines = -2
        .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
        .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .DrawGridLines = exRowLines
        .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
        .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
        .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
        .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->PutToString(L"Column 1,Column 2,Column 3,Column 4");
    var_FaceTree->GetItems()->PutToString(L"1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32");

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->ToString = L"Column 1,Column 2,Column 3,Column 4";
    var_FaceTree->Items->ToString = L"1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32";

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4";
    var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32";

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4";
        var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32";
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .DrawGridLines = -2
            .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
            .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4";
    var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32";

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Columns,com_FaceTree,com_Items;
    anytype var_Columns,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        com_Columns.ToString("Column 1,Column 2,Column 3,Column 4");
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.ToString("1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32");
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.ToString := 'Column 1,Column 2,Column 3,Column 4';
        Items.ToString := '1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32';
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.ToString := 'Column 1,Column 2,Column 3,Column 4';
        Items.ToString := '1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32';
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .DrawGridLines = -2
        .Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
        .Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
    endwith
endwith

dBASE Plus

local oTreeCube,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
    var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
    var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

Visual Objects

local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:ToString := "Column 1,Column 2,Column 3,Column 4"
    var_FaceTree:Items:ToString := "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

PowerBuilder

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.ToString = "Column 1,Column 2,Column 3,Column 4"
    var_FaceTree.Items.ToString = "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Set ComToString of hoColumns to "Column 1,Column 2,Column 3,Column 4"
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComToString of hoItems to "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():ToString := "Column 1,Column 2,Column 3,Column 4"
            oFaceTree:Items():ToString := "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


Face object
The control includes 6-faces. The Face object specifies a face of a cube, and can display a calendar control, a tree, and so on.

The following table shows how you can get a Face object ( the red items indicates properties )

EXTREECUBELib.TreeCube
    "BottomFace" -> EXTREECUBELib.Face
    "DownFace" -> EXTREECUBELib.Face
    "Face(FaceEnum)" -> EXTREECUBELib.Face
    "FrontFace" -> EXTREECUBELib.Face
    "LeftFace" -> EXTREECUBELib.Face
    "RightFace" -> EXTREECUBELib.Face
    "TopFace" -> EXTREECUBELib.Face
EXTREECUBELib.Face
    "Neighbor(RotateEnum)" -> EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FacePicture
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FaceTree
    "Face" -> EXTREECUBELib.Face

The following table shows how you can get a Face object ( the red items indicates properties )

EXTREECUBELib.Face <- "BottomFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "DownFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Face" of EXTREECUBELib.FaceTree
EXTREECUBELib.Face <- "Face(FaceEnum)" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "FrontFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "LeftFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Neighbor(RotateEnum)" of EXTREECUBELib.Face
EXTREECUBELib.Face <- "RightFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "TopFace" of EXTREECUBELib.TreeCube

The Face object supports the following properties and methods:

Name | Description
CreateCalendar | Creates / Retrieves the FaceCalendar object to be shown on the current face.
CreatePicture | Creates / Retrieves the FacePicture object to be shown on the current face.
CreateTree | Creates / Retrieves the FaceTree object to be shown on the current face.
Enabled | Enables or disables the face.
ExtraTitle | Specifies any extra title on the face.
FaceCalendar | Retrieves the FaceCalendar object, while the Type property is exFaceCalendar.
FaceContent | Retrieves the Nothing/FacePicture/FaceCalendar/FaceTree content, based on the face's type.
FacePicture | Retrieves the FacePicture object, while the Type property is exFacePicture.
FaceTree | Retrieves the FaceTree object, while the Type property is exFaceTree.
Index | Indicates the index of the face.
Neighbor | Retrieves the neighbor of the face in giving direction.
Picture | Retrieves or sets a graphic to be displayed on the face.
RelativeMargins | Sets or retrieves a value that indicates the relative margins of the faces within the cube.
TexturePictureName | Specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
Title | Specifies the title on the face.
TransparentContent | Gets or sets a value that indicates percent of the transparency to display the content of the face within the cube.
Type | Indicates the type of the window to be shown on the face.
Visible | Shows or hides the face's content.


method CreateCalendar

method Face.CreateCalendar ()
Creates / Retrieves the FaceCalendar object to be shown on the current face.

Type Description
Return | Description
FaceCalendar | A FaceCalendar object being retrieved / created.
The CreateCalendar creates a Calendar control if it is called for the first time ( changes the face's Type property to exFaceCalendar), and retrieve the FaceCalendar object, for the next calls. The FaceCalendar property retrieves FaceCalendar object, if the face's Type property is exFaceCalendar, else it returns nothing. The InitFaceCalendar / InitFaceContent event occurs once the face's Type property has been changed to exFaceCalendar, or calling the CreateCalendar method for the first time. You can use the InitFaceCalendar event to initialize all faces of Calendar type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event


method CreatePicture

method Face.CreatePicture ()
Creates / Retrieves the FacePicture object to be shown on the current face.

Type Description
Return | Description
FacePicture | A FacePicture object being created / retrieved.
The CreatePicture creates a Picture control if it is called for the first time ( changes the face's Type property to exFacePicture), and retrieve the FacePicture object, for the next calls. The FacePicture property retrieves FacePicture object, if the face's Type property is exFacePicture, else it returns nothing. The InitFacePicture / InitFaceContent event occurs once the face's Type property has been changed to exFacePicture, or calling the CreatePicture method for the first time. You can use the InitFacePicture event to initialize all faces of Picture type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

A face that contains a Picture control may fire any of the following events ( CreatePicture, Type on exFacePicture ):

  • InitFacePicture event ( InitFaceContent event )


method CreateTree

method Face.CreateTree ()
Creates / Retrieves the FaceTree object to be shown on the current face.

Type Description
Return | Description
FaceTree | A FaceTree object being retrieved / created.
The CreateTree creates a Tree control if it is called for the first time ( changes the face's Type property to exFaceTree), and retrieve the FaceTree object, for the next calls. The FaceTree property retrieves FaceTree object, if the face's Type property is exFaceTree, else it returns nothing. The InitFaceTree / InitFaceContent event occurs once the face's Type property has been changed to exFaceTree, or calling the CreateTree method for the first time. You can use the InitFaceTree event to initialize all faces of Tree type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event


property Enabled

property Face.Enabled as Boolean
Enables or disables the face.

Type | Description
Boolean | A boolean expression that determines whether a face can respond to user-generated events.
By default, the Enabled property is True. The Enabled property specifies whether a Face is enabled or disabled. The Enabled property enables or disables the column. The Enabled property specifies whether the item is enabled or disabled. The Enabled property specifies whether the entire control is enabled or disabled.


property ExtraTitle

property Face.ExtraTitle(Key as Variant, Property as PropertyTitleFaceEnum) as Variant
Specifies any extra title on the face.

Type | Description
Key as Variant | A VARIANT expression that defines the key of the extra title to be displayed
Property as PropertyTitleFaceEnum | A PropertyTitleFaceEnum expression that indicates the property of the title to be changed
Variant | A VARIANT expression that indicates the new value for the property of the title
The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. For instance, the ExtraTitle(exTitleFaceCaption) = "extra-title" displays the extra-title on the current face. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property FaceCalendar

property Face.FaceCalendar as FaceCalendar
Retrieves the FaceCalendar object, while the Type property is exFaceCalendar.

Type | Description
FaceCalendar | A FaceCalendar object being retrieved
The FaceCalendar property retrieves FaceCalendar object, if the face's Type property is exFaceCalendar, else it returns nothing. The CreateCalendar creates a Calendar control if it is called for the first time ( changes the face's Type property to exFaceCalendar), and retrieve the FaceCalendar object, for the next calls. The InitFaceCalendar / InitFaceContent event occurs once the face's Type property has been changed to exFaceCalendar, or calling the CreateCalendar method for the first time. You can use the InitFaceCalendar event to initialize all faces of Calendar type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event


property FaceContent

property Face.FaceContent as Object
Retrieves the Nothing/FacePicture/FaceCalendar/FaceTree content, based on the face's type.

Type Description
Object An Object that could be any of the following:
  • FacePicture object
  • FaceCalendar object
  • FaceTree object

based on the face's Type property.
The FaceContent property retrieves the Nothing/FacePicture/FaceCalendar/FaceTree content, based on the face's type. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

The InitFaceContent event notifies your application that the Type property has been changed, or any of the following has been called:

  • CreatePicture method
  • CreateCalendar method
  • CreateTree method

The InitFaceContent event occurs before any of the following event:

  • InitFacePicture event
  • InitFaceCalendar event
  • InitFaceTree event


property FacePicture

property Face.FacePicture as FacePicture
Retrieves the FacePicture object, while the Type property is exFacePicture.

Type | Description
FacePicture | A FacePicture object being created / retrieved.
The FacePicture property retrieves FacePicture object, if the face's Type property is exFacePicture, else it returns nothing. The CreatePicture creates a Picture control if it is called for the first time ( changes the face's Type property to exFacePicture), and retrieve the FacePicture object, for the next calls. The InitFacePicture / InitFaceContent event occurs once the face's Type property has been changed to exFacePicture, or calling the CreatePicture method for the first time. You can use the InitFacePicture event to initialize all faces of Picture type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

A face that contains a Picture control may fire any of the following events ( CreatePicture, Type on exFacePicture ):

  • InitFacePicture event ( InitFaceContent event )


property FaceTree

property Face.FaceTree as FaceTree
Retrieves the FaceTree object, while the Type property is exFaceTree.

Type | Description
FaceTree | A FaceTree object being retrieved / created.
The FaceTree property retrieves FaceTree object, if the face's Type property is exFaceTree, else it returns nothing. The CreateTree creates a Tree control if it is called for the first time ( changes the face's Type property to exFaceTree), and retrieve the FaceTree object, for the next calls. The InitFaceTree / InitFaceContent event occurs once the face's Type property has been changed to exFaceTree, or calling the CreateTree method for the first time. You can use the InitFaceTree event to initialize all faces of Tree type. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event


property Index

property Face.Index as FaceEnum
Indicates the index of the face.

Type | Description
FaceEnum | A FaceEnum expression that determines the index of the face within the cube.
The Index property specifies the index of the face. The Face property returns the giving face. The Neighbor property retrieves the neighbor of the face in giving direction.

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


property Neighbor

property Face.Neighbor (RotateDir as RotateEnum) as Face
Retrieves the neighbor of the face in giving direction.

Type | Description
RotateDir as RotateEnum | A RotateEnum expression that specifies the direction to request the neighbor face.
Face | A Face object being requested.
The Neighbor property retrieves the neighbor of the face in giving direction. The Index property gets the index of the face. The Face property returns the giving face. Use the Rotate method to rotate the cube in a direction.


property Picture

property Face.Picture as IPictureDisp
Retrieves or sets a graphic to be displayed on the face.

Type | Description
IPictureDisp | A Picture object being shown on the face's background.
The Picture property retrieves or sets a graphic to be displayed on the face's background. The Picture property can get the current graphic being shown on the face, or can change the graphic being shown on the face. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property RelativeMargins

property Face.RelativeMargins as String
Sets or retrieves a value that indicates the relative margins of the faces within the cube.

Type | Description
String | A String expression that specifies the left,top,right,bottom margins in pixels to show the face's content.
By default, the RelativeMargins property is "0,0,0,0". The RelativeMargins property sets or retrieves a value that indicates the relative margins of the faces within the cube. The Margins property indicates that margins to be applied to all faces of the cube. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face. The FaceContent property determines the content of the face. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it.


property TexturePictureName

property Face.TexturePictureName as String
Specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.

Type | Description
String | A String expression that specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property. Each file name may include the degree rotate angle, after a / character. The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property. For instance, the "dTexture,negy/-90", indicates that the control is looking first for the dTexture file, and if it is not found it looks for the negy file, and in case it is found, loads and rotates it by 90 degree anti-clockwise.
By default, the TexturePictureName property is:
  • "fTexture,posx", for the front face
  • "lTexture,posz", for the left face
  • "rTexture,negz", for the right face
  • "bTexture,negx", for the bottom face
  • "tTexture,posy/90", for the top face
  • "dTexture,negy/-90", for the down face

The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property. The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property Title

property Face.Title(Property as PropertyTitleFaceEnum) as Variant
Specifies the title on the face.

Type | Description
Property as PropertyTitleFaceEnum | A PropertyTitleFaceEnum expression that indicates the property of the title to be changed
Variant | A VARIANT expression that indicates the new value for the property of the title
The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. For instance, the Title(exTitleFaceCaption) = "title" displays the title on the current face. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property TransparentContent

property Face.TransparentContent as Long
Gets or sets a value that indicates percent of the transparency to display the content of the face within the cube.

Type | Description
Long | A Long expression that indicates percent of the transparency to display the content of the face within the cube. 0 means opaque, 50 means semi-transparent, 100 - fully transparent
By default, the The TransparentContent property is -1, which indicates that the control's TransparentContent property specifies the transparency of the face's content. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content of the face within the cube. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content on all faces of the cube. The Transparent property gets or sets a value that indicates percent of the transparency to display the texture / pictures on the cube. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

The following screen shot shows the face's content opaque:

The following screen shot shows the face's content semi-transparent:


property Type

property Face.Type as FaceTypeEnum
Indicates the type of the window to be shown on the face.

Type | Description
FaceTypeEnum | A FaceTypeEnum expression that specifies the type of the face to be created.

By default, the Type property is exFaceNone. The Type property specifies the type of the face. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face. The DefaultFaceType property specifies the default type of control to put on all faces.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

A face that contains a Picture control may fire any of the following events ( CreatePicture, Type on exFacePicture ):

  • InitFacePicture event ( InitFaceContent event )

The InitFaceContent event notifies your application that the Type property has been changed, or any of the following has been called:

  • CreatePicture method
  • CreateCalendar method
  • CreateTree method


property Visible

property Face.Visible as Boolean
Shows or hides the face's content.

Type | Description
Boolean | A Boolean expression that specifies whether the face's content is visible or hidden.
The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content of the face within the cube. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content on all faces of the cube. The Transparent property gets or sets a value that indicates percent of the transparency to display the texture / pictures on the cube.


FaceCalendar object
The FaceCalendar object displays and handles a Calendar control.

The following screen shot shows a FaceCalendar assigned to a face:

The following table shows how you can get a FaceCalendar object ( the red items indicates properties )

EXTREECUBELib.Face
    "CreateCalendar" -> EXTREECUBELib.FaceCalendar
    "FaceCalendar" -> EXTREECUBELib.FaceCalendar

The following table shows how you can get a FaceCalendar object ( the red items indicates properties )

EXTREECUBELib.FaceCalendar <- "CreateCalendar" of EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar <- "FaceCalendar" of EXTREECUBELib.Face

The FaceCalendar object supports the following properties and methods:

Name | Description
AutoSize | Specifies the way the calendar fits the face.
Date | Retrieves or sets the browsed date. Ensures that the date is visible.
DateFromPoint | Retrieves the date from point.
DisplayWeekNumberAs | Specifies the way the calendar displays the week number.
DrawGridLines | Retrieves or sets a value that indicates whether the grid lines are visible or hidden.
Face | Retrieves the face that owns the content object.
FirstWeekDay | Specifies the first day of the week.
ForeColor | Specifies the calendar's foreground color.
GridLineColor | Retrieves or sets a value that indicates the color to show the grid lines.
Index | Indicates the index of the face.
LocFirstWeekDay | Indicates the first day of the week, as specified in the regional settings.
LocMonthNames | Retrieves the list of month names, as indicated in the regional settings, separated by space.
LocWeekDays | Retrieves the list of names for each week day, as indicated in the regional settings, separated by space.
MaxDate | Retrieves or sets the max date.
MaxMonthX | Specifies the maximum number of months horizontally displayed.
MaxMonthY | Specifies the maximum number of months vertically displayed.
MinDate | Retrieves or sets the min date.
MinMonthX | Specifies the minimum number of months horizontally displayed.
MinMonthY | Specifies the minimum number of months vertically displayed.
MonthNames | Retrieves or sets a value that indicates the list of month names, separated by space.
Move | Moves the calendar back/forward one year/month.
NextMonth | Moves the calendar forward one month.
NextYear | Moves the calendar forward one year.
NonworkingDays | Retrieves or sets a value that indicates the non-working days, for each week day a bit.
NonworkingDaysForeColor | Retrieves or sets a value that indicates the foreground color for non-working days.
PrevMonth | Moves the calendar back one month.
PrevYear | Moves the calendar back one year.
Refresh | Refreses the face's content.
SelBackColor | Retrieves or sets a value that indicates the selection background color.
SelDate | Selects the giving date.
SelForeColor | Retrieves or sets a value that indicates the selection foreground color.
ShowMonthSelector | Specifies whether the left/right arrows to select the previously/next month are visible or hidden in the header of the calendar's month.
ShowNonMonthDays | Specifies whether the control displays the dates that are not part of the month.
ShowTodayButton | Retrieves or sets a value that indicates whether the today button is visible or hidden, in the calendar.
ShowWeeks | Retrieves or sets a value that indicates whether the weeks header is visible or hidden.
TodayCaption | Retrieves or sets a value that indicates the today button's caption, in the calendar.
UnselectDate | Unselects any date in the calendar.
Value | Selects the date.
ValueFromPoint | Retrieves the value/date from point.
WeekDays | Retrieves or sets a value that indicates the list of names for each week day, separated by space.
Year | Retrieves or sets the browsed year. Ensures that the date is visible.


property AutoSize

property FaceCalendar.AutoSize as AutoSizeEnum
Specifies the way the calendar fits the face.

Type | Description
AutoSizeEnum | An AutoSizeEnum expression that specifies the way the calendar fits the face.
By default, the AutoSize property is exFontSize. The AutoSize property specifies how the size of the date within a calendar control is computed. The Font property specifies the calendar's font. The Margins / RelativeMargins specifies the size of the margins that the face's content is displayed relative to its face. The MinMonthX / MaxMonthX specifies how many months the calendar display on horizontal axis. The MinMonthY / MaxMonthY specifies how many months the calendar display on vertical axis.


property Date

property FaceCalendar.Date as Date
Retrieves or sets the browsed date. Ensures that the date is visible.

Type | Description
Date | A DATE expression that indicates the browsed date.
By default, the Date property points to the current date. Ensures that the date is visible. Use the SelDate property to select a date. When the browsed date is changed the control fires the FaceCalendarDateChanged event. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected. The Move method moves the calendar back/forward one year/month. The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month. The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date.


property DateFromPoint

property FaceCalendar.DateFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as Date
Retrieves the date from point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
Date | 0 or a DATE expression that indicates the date from point (X,Y)
The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. If X = -1 and Y = -1, the DateFromPoint property retrieves the date from the cursor, shortly the DateFromPoint(-1,-1) returns the date from the cursor. The ValueFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property DisplayWeekNumberAs

property FaceCalendar.DisplayWeekNumberAs as WeekNumberAsEnum
Specifies the way the calendar displays the week number.

Type | Description
WeekNumberAsEnum | A WeekNumberAsEnum expression that specifies the ways the control displays the week number for dates.
By default, the DisplayWeekNumberAs property is exISO8601WeekNumber, which indicates that the week number is displayed according to the ISO8601 standard, which specifies that the first week of the year is the one that includes the January the 4th. The ShowWeeks property specifies whether the week number header is shown or hidden. The FirstWeekDay property specifies the first day of the week where the week begins.

The following screen show shows the calendar while using the DisplayWeekNumberAs property on exISO8601WeekNumber ( default ):

The following screen show shows the calendar while using the DisplayWeekNumberAs property on exSimpleWeekNumber:


property DrawGridLines

property FaceCalendar.DrawGridLines as LineStyleEnum
Retrieves or sets a value that indicates whether the grid lines are visible or hidden.

Type | Description
LineStyleEnum | A LineStyleEnum expression that indicates whether the grid lines are visible or hidden.
Use the DrawGridLines property to show the grid lines. Use the GridLineColor property to define the color for grid lines.


property Face

property FaceCalendar.Face as Face
Retrieves the face that owns the content object.

Type | Description
Face | A Face object that hosts the Calendar control.
The Face property indicates the face that hosts the calendar control. The Index property retrieves the index of the face that hosts the calendar control.


property FirstWeekDay

property FaceCalendar.FirstWeekDay as WeekDayEnum
Specifies the first day of the week.

Type | Description
WeekDayEnum | A WeekDayEnum expression that defines the first day of the week.
By default, the FirstWeekDay property is Sunday. The FirstWeekDay property specifies the first day of the week. The DisplayWeekNumberAs property specifies the way the control displays the week number. Use the ShowWeeks property to display the week numbers. The LocFirstWeekDay property indicates the first day of the week, using the current user regional and language settings. Use the WeekDays property to define the shortcut for each week day. Use the MonthNames to define the name for each month.


property ForeColor

property FaceCalendar.ForeColor as Color
Specifies the calendar's foreground color.

Type | Description
Color | A color expression that indicates the calendar's foreground color.
The ForeColor property specifies the calendar's foreground color. In case you need to specify a different background color for the calendar control you can use the Title(exTitleFaceBackColor) / ExtraTile(exTitleFaceBackColor) property. The NonworkingDaysForeColor property retrieves or sets a value that indicates the foreground color for non-working days. The SelBackColor property retrieves or sets a value that indicates the selection background color. The SelForeColor property retrieves or sets a value that indicates the selection foreground color.


property GridLineColor

property FaceCalendar.GridLineColor as Color
Retrieves or sets a value that indicates the color to show the grid lines.

Type | Description
Color | A color expression that indicates the grid lines color.
Use the GridLineColor property to define the color for grid lines. Use the DrawGridLines property to hide the grid lines.


property Index

property FaceCalendar.Index as FaceEnum
Indicates the index of the face.

Type | Description
FaceEnum | A FaceEnum expression that specifies the index of the face that owns the calendar control.
The Index property retrieves the index of the face that hosts the calendar control. The Face property indicates the face that hosts the calendar control.


property LocFirstWeekDay

property FaceCalendar.LocFirstWeekDay as WeekDayEnum
Indicates the first day of the week, as specified in the regional settings.

Type | Description
WeekDayEnum | A WeekDayEnum expression that specifies the first day of the week, as specified in the regional settings.
The LocFirstWeekDay property indicates the first day of the week, using the current user regional and language settings. The FirstWeekDay property specifies the first day of the week. The LocMonthNames property specifies the list of name of the months, using the current user regional and language settings. The LocWeekDays property specifies the name of the days in the week, using the current user regional and language settings.


property LocMonthNames

property FaceCalendar.LocMonthNames ([Abbreviated as Variant]) as String
Retrieves the list of month names, as indicated in the regional settings, separated by space.

Type | Description
Abbreviated as Variant | A long expression that gets the count of letters to abbreviate the month name. If missing, the full name is retrieved.
String | A String expression that indicates the name of the months within the year, as indicated in the regional settings, separated by space.
The LocMonthNames property specifies the list of name of the months, using the current user regional and language settings. The MonthNames property retrieves or sets a value that indicates the list of month names, separated by space. The LocFirstWeekDay property indicates the first day of the week, using the current user regional and language settings. The LocWeekDays property specifies the name of the days in the week, using the current user regional and language settings.


property LocWeekDays

property FaceCalendar.LocWeekDays ([Abbreviated as Variant]) as String
Retrieves the list of names for each week day, as indicated in the regional settings, separated by space.

Type | Description
Abbreviated as Variant | An optional parameter that indicates the number of characters to be retrieved. If missing or -1, the full name of the week day is retrieved.
String | A String expression that indicates the list of names for each week day, as indicated in the regional settings, separated by space
The LocWeekDays property specifies the name of the days in the week, using the current user regional and language settings. The WeekDays property retrieves or sets a value that indicates the list of names for each week day, separated by space. The LocFirstWeekDay property indicates the first day of the week, using the current user regional and language settings. The FirstWeekDay property specifies the first day of the week. The LocMonthNames property specifies the list of name of the months, using the current user regional and language settings.


property MaxDate

property FaceCalendar.MaxDate as Date
Retrieves or sets the min date.

Type | Description
Date | A Date expression that indicates the upper limit for dates to be displayed or selected.
By default, the MaxDate property is Dec 31, 9999. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected. The Date property is automatically updated so the browsed date fits the limited range. When the browsed date is changed the control fires the FaceCalendarDateChanged event. By default, the Date property points to the current date


property MaxMonthX

property FaceCalendar.MaxMonthX as Long
Specifies the maximum number of months horizontally displayed.

Type | Description
Long | A long expression that specifies the maximum number of months horizontally displayed.
By default, the MaxMonthX property is 3. Use the MaxMonthX property to define the maximum number of months displayed horizontally. Use the MinMonthX property to define the minimum number of months displayed horizontally. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected.


property MaxMonthY

property FaceCalendar.MaxMonthY as Long
Specifies the maximum number of months vertically displayed.

Type | Description
Long | A long expression that defines the maximum number of months vertically displayed
By default, the MaxMonthY property is 2. Use the MaxMonthY property to define the maximum number of months vertically displayed. Use the MinMonthY property to define the minimum number of months vertically displayed. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected.


property MinDate

property FaceCalendar.MinDate as Date
Retrieves or sets the min date.

Type | Description
Date | A Date expression that indicates the lower limit for dates to be displayed or selected.
By default, the MinDate property is Jan 1, 100. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected. The Date property is automatically updated so the browsed date fits the limited range. When the browsed date is changed the control fires the FaceCalendarDateChanged event. By default, the Date property points to the current date.


property MinMonthX

property FaceCalendar.MinMonthX as Long
Specifies the minimum number of months horizontally displayed.

Type | Description
Long | A long expression that specifies the minimum number of months horizontally displayed.
By default, the MinMonthX property is 1. Use the MinMonthX property to define the minimum number of months displayed horizontally. Use the MaxMonthX property to define the maximum number of months displayed horizontally. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected.


property MinMonthY

property FaceCalendar.MinMonthY as Long
Specifies the minimum number of months vertically displayed.

Type | Description
Long | A long expression that specifies the minimum number of months vertically displayed.
By default, the MinMonthY property is 1. Use the MinMonthY property to define the minimum number of months vertically displayed. Use the MaxMonthY property to define the maximum number of months vertically displayed. Use the MinDate and MaxDate property to specify a range to limit the date to be displayed or selected.


property MonthNames

property FaceCalendar.MonthNames as String
Retrieves or sets a value that indicates the list of month names, separated by space.

Type | Description
String | A string expression hat indicates the list of month names, separated by space.
By default, the MonthNames is "January February March April May June July August September October November December". For instance, for French you have to use something like: "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre". Use the FirstWeekDay property to change the first day of the week. Use the WeekNames property to define the name for each week day. LocMonthNames property specifies the list of name of the months, using the current user regional and language settings.


method Move

method FaceCalendar.Move (Direction as RotateEnum, [Count as Variant])
Moves the calendar back/forward one year/month.

Type | Description
Direction as RotateEnum | A RotateEnum expression that specifies the direction to move the calendar
Count as Variant | A Long expression that indicates the number of times, the Move occurs.
The Move method moves the calendar back/forward one year/month. The Move method updates the control's Date property. The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month. The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date.

The Move method move's the browsing date:

  • back one month, if the Direction is exRotateLeft
  • forward one month, if the Direction is exRotateRight
  • back one year, if the Direction is exRotateUp
  • forward one year, if the Direction is exRotateDown


method NextMonth

method FaceCalendar.NextMonth ([Count as Variant])
Moves the calendar forward one month.

Type | Description
Count as Variant | A Long expression that defines how many months to move
The NextMonth method moves the calendar forward one month. The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date. The Move method moves the calendar back/forward one year/month. The PrevMonth method moves the calendar back one month.


method NextYear

method FaceCalendar.NextYear ([Count as Variant])
Moves the calendar forward one year.

Type | Description
Count as Variant | A Long expression that defines how many years to move

The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date. The Move method moves the calendar back/forward one year/month. The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month. The PrevYear method moves the calendar back one year.


property NonworkingDays

property FaceCalendar.NonworkingDays as Long
Retrieves or sets a value that indicates the non-working days, for each week day a bit.

Type | Description
Long | A long expression that indicates the non-working days in a week

The NonworkingDays property retrieves or sets a value that indicates the non-working days, for each week day a bit. The NonworkingDaysForeColor property retrieves or sets a value that indicates the foreground color for non-working days. By default, the NonworkingDays property is 65. The last significant byte in the NonworkingDays expression has the following meaning:

where X could be 1 ( nonworking day ) or 0 ( working day ), Sa means Saturday, Fr means Friday, and so on. For instance, the 65 value means Saturday and Sunday are non-working days. The ForeColor property specifies the calendar's foreground color. In case you need to specify a different background color for the calendar control you can use the Title( exTitleFaceBackColor) / ExtraTile( exTitleFaceBackColor) property. The SelBackColor property retrieves or sets a value that indicates the selection background color. The SelForeColor property retrieves or sets a value that indicates the selection foreground color.


property NonworkingDaysForeColor

property FaceCalendar.NonworkingDaysForeColor as Color
Retrieves or sets a value that indicates the foreground color for non-working days.

Type | Description
Color | A color expression that indicates the selection foreground color.
The NonworkingDaysForeColor property retrieves or sets a value that indicates the foreground color for non-working days. The NonworkingDays property retrieves or sets a value that indicates the non-working days, for each week day a bit. The ForeColor property specifies the calendar's foreground color. In case you need to specify a different background color for the calendar control you can use the Title( exTitleFaceBackColor) / ExtraTile( exTitleFaceBackColor) property. The SelBackColor property retrieves or sets a value that indicates the selection background color. The SelForeColor property retrieves or sets a value that indicates the selection foreground color.


method PrevMonth

method FaceCalendar.PrevMonth ([Count as Variant])
Moves the calendar back one month.

Type | Description
Count as Variant | A Long expression that defines how many months to move

The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month. The Move method moves the calendar back/forward one year/month. The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date.


method PrevYear

method FaceCalendar.PrevYear ([Count as Variant])
Moves the calendar back one year.

Type | Description
Count as Variant | A Long expression that indicates the number of years to move.

The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year. The Year property specifies the year of the current browsed date. The Move method moves the calendar back/forward one year/month. The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month.


method Refresh

method FaceCalendar.Refresh ()
Refreses the face's content.

Type Description


property SelBackColor

property FaceCalendar.SelBackColor as Color
Retrieves or sets a value that indicates the selection background color.

Type | Description
Color | A color expression that specifies the selection background color. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.
The SelBackColor property retrieves or sets a value that indicates the selection background color. The SelForeColor property retrieves or sets a value that indicates the selection foreground color. The ForeColor property specifies the calendar's foreground color. In case you need to specify a different background color for the calendar control you can use the Title( exTitleFaceBackColor) / ExtraTile( exTitleFaceBackColor) property. The NonworkingDaysForeColor property retrieves or sets a value that indicates the foreground color for non-working days.


property SelDate

property FaceCalendar.SelDate as Date
Selects the giving date.

Type | Description
Date | A DATE expression that indicates the selected date.
The SelDate / Value property indicates the date that the calendar displays. The FaceCalendarSelectionChanged / FaceCalendarValueChanged event notifies your application once the user changes the selected date in the calendar control. The difference between SelDate and Value is the type which one is of DATE type, while the Value is of Variant type. For instance, you can have Value = "Jan 21, 2012". The UnselectDate property unselects the date in the calendar control.

How do I programmatically selects a date?

VBA (MS Access, Excell...)

With TreeCube1
    With .FrontFace.CreateCalendar
        .Date = #1/1/2001#
        .SelDate = .Date
    End With
End With

VB6

With TreeCube1
    With .FrontFace.CreateCalendar
        .Date = #1/1/2001#
        .SelDate = .Date
    End With
End With

VB.NET

With Extreecube1
    With .FrontFace.CreateCalendar()
        .Date = #1/1/2001#
        .SelDate = .Date
    End With
End With

VB.NET for /COM

With AxTreeCube1
    With .FrontFace.CreateCalendar()
        .Date = #1/1/2001#
        .SelDate = .Date
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
EXTREECUBELib::IFaceCalendarPtr var_FaceCalendar = spTreeCube1->GetFrontFace()->CreateCalendar();
    var_FaceCalendar->PutDate(COleDateTime(2001,1,1,0,00,00).operator DATE());
    var_FaceCalendar->PutSelDate(var_FaceCalendar->GetDate());

C++ Builder

Extreecubelib_tlb::IFaceCalendarPtr var_FaceCalendar = TreeCube1->FrontFace->CreateCalendar();
    var_FaceCalendar->Date = TDateTime(2001,1,1).operator double();
    var_FaceCalendar->SelDate = var_FaceCalendar->Date;

C#

exontrol.EXTREECUBELib.FaceCalendar var_FaceCalendar = extreecube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Date = Convert.ToDateTime("1/1/2001",System.Globalization.CultureInfo.GetCultureInfo("en-US"));
    var_FaceCalendar.SelDate = var_FaceCalendar.Date;

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    var var_FaceCalendar = TreeCube1.FrontFace.CreateCalendar();
        var_FaceCalendar.Date = "1/1/2001";
        var_FaceCalendar.SelDate = var_FaceCalendar.Date;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        With .FrontFace.CreateCalendar
            .Date = #1/1/2001#
            .SelDate = .Date
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

EXTREECUBELib.FaceCalendar var_FaceCalendar = axTreeCube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Date = Convert.ToDateTime("1/1/2001",System.Globalization.CultureInfo.GetCultureInfo("en-US"));
    var_FaceCalendar.SelDate = var_FaceCalendar.Date;

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_FaceCalendar;
    anytype var_FaceCalendar;
    ;

    super();

    var_FaceCalendar = extreecube1.FrontFace().CreateCalendar(); com_FaceCalendar = var_FaceCalendar;
        com_FaceCalendar.Date(str2Date("1/1/2001",213));
        com_FaceCalendar.SelDate(com_FaceCalendar.Date());
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    with FrontFace.CreateCalendar() do
    begin
        Date := '1/1/2001';
        SelDate := Date;
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    with FrontFace.CreateCalendar() do
    begin
        Date := '1/1/2001';
        SelDate := Date;
    end;
end

VFP

with thisform.TreeCube1
    with .FrontFace.CreateCalendar
        .Date = {^2001-1-1}
        .SelDate = .Date
    endwith
endwith

dBASE Plus

local oTreeCube,var_FaceCalendar

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = "01/01/2001"
    var_FaceCalendar.SelDate = var_FaceCalendar.Date

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_FaceCalendar as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = {01/01/2001}
    var_FaceCalendar.SelDate = var_FaceCalendar.Date

Visual Objects

local var_FaceCalendar as IFaceCalendar

var_FaceCalendar := oDCOCX_Exontrol1:FrontFace:CreateCalendar()
    var_FaceCalendar:Date := SToD("20010101")
    var_FaceCalendar:SelDate := var_FaceCalendar:Date

PowerBuilder

OleObject oTreeCube,var_FaceCalendar

oTreeCube = ole_1.Object
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = 2001-01-01
    var_FaceCalendar.SelDate = var_FaceCalendar.Date

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceCalendar
        Get ComCreateCalendar of hoFace to voFaceCalendar
        Handle hoFaceCalendar
        Get Create (RefClass(cComFaceCalendar)) to hoFaceCalendar
        Set pvComObject of hoFaceCalendar to voFaceCalendar
            Set ComDate of hoFaceCalendar to "1/1/2001"
            Set ComSelDate of hoFaceCalendar to (ComDate(hoFaceCalendar))
        Send Destroy to hoFaceCalendar
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceCalendar
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
            oFaceCalendar:Date := "01/01/2001"
            oFaceCalendar:SelDate := oFaceCalendar:Date()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property SelForeColor

property FaceCalendar.SelForeColor as Color
Retrieves or sets a value that indicates the selection foreground color.

Type | Description
Color | A color expression that indicates the selection foreground color.

The SelForeColor property retrieves or sets a value that indicates the selection foreground color. The SelBackColor property retrieves or sets a value that indicates the selection background color. The ForeColor property specifies the calendar's foreground color. In case you need to specify a different background color for the calendar control you can use the Title( exTitleFaceBackColor) / ExtraTile( exTitleFaceBackColor) property. The NonworkingDaysForeColor property retrieves or sets a value that indicates the foreground color for non-working days/


property ShowMonthSelector

property FaceCalendar.ShowMonthSelector as Boolean
Specifies whether the left/right arrows to select the previously/next month are visible or hidden in the header of the calendar's month.

Type | Description
Boolean | A Boolean expression that specifies whether the left/right arrows to select the previously/next month are visible or hidden in the header of the calendar's month.
By default, the ShowMonthSelector property specifies the whether the left/right arrows to select the previously/next month are visible or hidden in the header of the calendar's month. The Background(exDateHeader) specifies the visual appearance for the months header in a calendar control. The Background(exDateHeaderForeColor) specifies the foreground color to show the months in the header.


property ShowNonMonthDays

property FaceCalendar.ShowNonMonthDays as Boolean
Specifies whether the control displays the dates that are not part of the month.

Type | Description
Boolean | A Boolean expression that indicates whether the dates that are not part of the month are visible or hidden
By default, the ShowNonMonthDays property is False. Use the ShowNonMonthDays property to show dates that are not part of the current month. Use the NonWorkingDays property to specify the non working days.


property ShowTodayButton

property FaceCalendar.ShowTodayButton as Boolean
Retrieves or sets a value that indicates whether the today button is visible or hidden, in the calendar.

Type | Description
Boolean | A boolean expression that indicates whether the today button is visible or hidden.
By clicking the Today button, the Date property is set to today date. Use the ShowTodayButton to show or hide the today button. Use the TodayCaption property to change the caption for the today button


property ShowWeeks

property FaceCalendar.ShowWeeks as Boolean
Retrieves or sets a value that indicates whether the weeks header is visible or hidden.

Type | Description
Boolean | A Boolean expression that specifies whether the calendar shows the weeks header.
The ShowWeeks property retrieves or sets a value that indicates whether the weeks header is visible or hidden. The DisplayWeekNumberAs property specifies the way the control displays the week number. Use the ShowNonMonthDays property to specify whether the dates that are not part of the month are visible or hidden. The Background(exWeeksHeader) specifies the visual appearance for the weeks header in a calendar control. The Background(exWeeksHeaderForeColor) specifies the foreground color to show the weeks in the header.

In [ISO8601], the week number is defined by:

  • weeks start on a monday
  • week 1 of a given year is the one that includes the first Thursday of that year. (or, equivalently, week 1 is the week that includes 4 January.)


property TodayCaption

property FaceCalendar.TodayCaption as String
Retrieves or sets a value that indicates the today button's caption, in the calendar.

Type | Description
String | A string expression that indicates the caption for today button.
Use the TodayCaption property to specify the caption for combo's today button. Use the ShowTodayButton property to hide the control's today button. By default the TodayCaption property is "Today"


method UnselectDate

method FaceCalendar.UnselectDate ()
Unselects any date in the calendar.

Type Description
The UnselectDate property unselects the date in the calendar control.


property Value

property FaceCalendar.Value as Variant
Selects the date.

Type | Description
Variant | A VARIANT expression that indicates the selected date.
The SelDate / Value property indicates the date that the calendar displays. The FaceCalendarSelectionChanged / FaceCalendarValueChanged event notifies your application once the user changes the selected date in the calendar control. The difference between SelDate and Value is the type which one is of DATE type, while the Value is of Variant type. For instance, you can have Value = "Jan 21, 2012"

How do I programmatically selects a date (method 2)?

VBA (MS Access, Excell...)

With TreeCube1
    With .FrontFace.CreateCalendar
        .Value = "Jan 21"
    End With
End With

VB6

With TreeCube1
    With .FrontFace.CreateCalendar
        .Value = "Jan 21"
    End With
End With

VB.NET

With Extreecube1
    With .FrontFace.CreateCalendar()
        .Value = "Jan 21"
    End With
End With

VB.NET for /COM

With AxTreeCube1
    With .FrontFace.CreateCalendar()
        .Value = "Jan 21"
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
EXTREECUBELib::IFaceCalendarPtr var_FaceCalendar = spTreeCube1->GetFrontFace()->CreateCalendar();
    var_FaceCalendar->PutValue("Jan 21");

C++ Builder

Extreecubelib_tlb::IFaceCalendarPtr var_FaceCalendar = TreeCube1->FrontFace->CreateCalendar();
    var_FaceCalendar->set_Value(TVariant("Jan 21"));

C#

exontrol.EXTREECUBELib.FaceCalendar var_FaceCalendar = extreecube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Value = "Jan 21";

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    var var_FaceCalendar = TreeCube1.FrontFace.CreateCalendar();
        var_FaceCalendar.Value = "Jan 21";
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        With .FrontFace.CreateCalendar
            .Value = "Jan 21"
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

EXTREECUBELib.FaceCalendar var_FaceCalendar = axTreeCube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Value = "Jan 21";

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_FaceCalendar;
    anytype var_FaceCalendar;
    ;

    super();

    var_FaceCalendar = extreecube1.FrontFace().CreateCalendar(); com_FaceCalendar = var_FaceCalendar;
        com_FaceCalendar.Value("Jan 21");
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    with FrontFace.CreateCalendar() do
    begin
        Value := 'Jan 21';
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    with FrontFace.CreateCalendar() do
    begin
        Value := 'Jan 21';
    end;
end

VFP

with thisform.TreeCube1
    with .FrontFace.CreateCalendar
        .Value = "Jan 21"
    endwith
endwith

dBASE Plus

local oTreeCube,var_FaceCalendar

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Value = "Jan 21"

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_FaceCalendar as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Value = "Jan 21"

Visual Objects

local var_FaceCalendar as IFaceCalendar

var_FaceCalendar := oDCOCX_Exontrol1:FrontFace:CreateCalendar()
    var_FaceCalendar:Value := "Jan 21"

PowerBuilder

OleObject oTreeCube,var_FaceCalendar

oTreeCube = ole_1.Object
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Value = "Jan 21"

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceCalendar
        Get ComCreateCalendar of hoFace to voFaceCalendar
        Handle hoFaceCalendar
        Get Create (RefClass(cComFaceCalendar)) to hoFaceCalendar
        Set pvComObject of hoFaceCalendar to voFaceCalendar
            Set ComValue of hoFaceCalendar to "Jan 21"
        Send Destroy to hoFaceCalendar
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceCalendar
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
            oFaceCalendar:Value := "Jan 21"

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property ValueFromPoint

property FaceCalendar.ValueFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as Date
Retrieves the value/date from point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
Date | 0 or a DATE expression that indicates the date from point (X,Y)
The ValueFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. If X = -1 and Y = -1, the ValueFromPoint property retrieves the date from the cursor, shortly the ValueFromPoint(-1,-1) returns the date from the cursor. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property WeekDays

property FaceCalendar.WeekDays as String
Retrieves or sets a value that indicates the list of names for each week day, separated by space.

Type | Description
String | A string expression that indicates the list of short names for each week day, separated by space.
By default, the WeekNames is "S M T W T F S". Use the FirstWeekDay property to change the first day of the week. Use the MonthNames property to define the name for each month. The LocWeekDays property specifies the name of the days in the week, using the current user regional and language settings.


property Year

property FaceCalendar.Year as Long
Retrieves or sets the browsed year. Ensures that the date is visible.

Type | Description
Long | A Long expression that indicates the browsed year.
The Year property specifies the year of the current browsed date. The Move method moves the calendar back/forward one year/month. The PrevMonth method moves the calendar back one month. The NextMonth method moves the calendar forward one month. The PrevYear method moves the calendar back one year. The NextYear method moves the calendar forward one year.


FacePicture object
The FacePicture object holds properties to display a picture object on the face.

The following screen shot shows a FacePicture assigned to a face:

The following table shows how you can get a FacePicture object ( the red items indicates properties )

EXTREECUBELib.Face
    "CreatePicture" -> EXTREECUBELib.FacePicture
    "FacePicture" -> EXTREECUBELib.FacePicture

The following table shows how you can get a FacePicture object ( the red items indicates properties )

EXTREECUBELib.FacePicture <- "CreatePicture" of EXTREECUBELib.Face
EXTREECUBELib.FacePicture <- "FacePicture" of EXTREECUBELib.Face

The FacePicture object supports the following properties and methods:

Name | Description
Face | Retrieves the face that owns the content object.
Height | Specifies the expression relative to the view/current picture, to determine the height to show the current picture on the background.
Index | Indicates the index of the face.
Left | Specifies the expression relative to the view/current picture, to determine the x-position to show the current picture on the background.
Picture | Retrieves or sets a graphic to be displayed on the face.
PictureDisplay | Retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.
Refresh | Refreses the face's content.
Top | Specifies the expression relative to the view/current picture, to determine the y-position to show the current picture on the background.
Width | Specifies the expression relative to the view/current picture, to determine the width to show the current picture on the background.


property Face

property FacePicture.Face as Face
Retrieves the face that owns the content object.

Type | Description
Face | A Face object that hosts the Picture control.
The Face property indicates the face that hosts the calendar control. The Index property retrieves the index of the face that hosts the calendar control.


property Height

property FacePicture.Height as String
Specifies the expression relative to the view/current picture, to determine the height to show the current picture on the background.

Type | Description
String | A string expression that specifies the expression relative to the view/current picture, to determine the height to show the current picture on the background.
By default, the Height property is "2*pheight". The Picture property retrieves or sets a graphic to be displayed on the face. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.

The width keyword specifies the width of the face, in pixels. The height keyword specifies the height of the face, in pixels. The pwidth keyword specifies the width of the original picture, in pixels. The pheight keyword specifies the height of the original picture, in pixels.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )


property Index

property FacePicture.Index as FaceEnum
Indicates the index of the face.

Type | Description
FaceEnum | A FaceEnum expression that specifies the index of the face that hosts the picture.
The Index property retrieves the index of the face that hosts the calendar control. The Face property indicates the face that hosts the calendar control.


property Left

property FacePicture.Left as String
Specifies the expression relative to the view/current picture, to determine the x-position to show the current picture on the background.

Type | Description
String | A string expression that specifies the expression relative to the view/current picture, to determine the x-position to show the current picture on the background.
By default, the Left property is "0". The Picture property retrieves or sets a graphic to be displayed on the face. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.

The width keyword specifies the width of the face, in pixels. The height keyword specifies the height of the face, in pixels. The pwidth keyword specifies the width of the original picture, in pixels. The pheight keyword specifies the height of the original picture, in pixels.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )


property Picture

property FacePicture.Picture as IPictureDisp
Retrieves or sets a graphic to be displayed on the face.

Type | Description
IPictureDisp | A Picture object to be displayed on the face.
The Picture property retrieves or sets a graphic to be displayed on the face. The Picture property of the Face object, retrieves or sets a graphic to be displayed on the face's background. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.


property PictureDisplay

property FacePicture.PictureDisplay as PictureDisplayEnum
Retrieves or sets a value that indicates the way how the graphic is displayed on the face's background. The width, height keywords indicate the size of the view ( width/height ), while pwidth, pheight keywords indicates the size of the picture to be rendered.

Type | Description
PictureDisplayEnum | A PictureDisplayEnum expression that indicates the way the picture is displayed on the face.
By default, the PictureDisplay property is MiddleCenter. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background. The Picture property retrieves or sets a graphic to be displayed on the face. The Picture property of the Face object, retrieves or sets a graphic to be displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.


method Refresh

method FacePicture.Refresh ()
Refreshes the face's content.

Type Description


property Top

property FacePicture.Top as String
Specifies the expression relative to the view/current picture, to determine the y-position to show the current picture on the background.

Type | Description
String | A string expression that specifies the expression relative to the view/current picture, to determine the y-position to show the current picture on the background.
By default, the Top property is "height-2*pheight". The Picture property retrieves or sets a graphic to be displayed on the face. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.

The width keyword specifies the width of the face, in pixels. The height keyword specifies the height of the face, in pixels. The pwidth keyword specifies the width of the original picture, in pixels. The pheight keyword specifies the height of the original picture, in pixels.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )


property Width

property FacePicture.Width as String
Specifies the expression relative to the view/current picture, to determine the width to show the current picture on the background.

Type | Description
String | A string expression that specifies the expression relative to the view/current picture, to determine the width to show the current picture on the background.
By default, the Width property is "width". The Picture property retrieves or sets a graphic to be displayed on the face. The PictureDisplay property retrieves or sets a value that indicates the way how the graphic is displayed on the face's background.

The following properties determines the position and size of the picture to be shown on the face:

  • Left property, indicates the x-position to show the current picture on the background.
  • Top property, indicates the y-position to show the current picture on the background.
  • Width property, specifies the width to show the current picture on the background.
  • Height property, specifies the height to show the current picture on the background.

The Left, Top, Width and Height can use expressions to define the position and size relative to size of the face, based on the size of the original picture.

The width keyword specifies the width of the face, in pixels. The height keyword specifies the height of the face, in pixels. The pwidth keyword specifies the width of the original picture, in pixels. The pheight keyword specifies the height of the original picture, in pixels.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )


FaceTree object
The FaceTree object displays and handles a Tree-View control.

The following screen shot shows a FaceTree assigned to a face:

The following table shows how you can get a FaceTree object ( the red items indicates properties )

EXTREECUBELib.Face
    "CreateTree" -> EXTREECUBELib.FaceTree
    "FaceTree" -> EXTREECUBELib.FaceTree

The following table shows how you can get a FaceTree object ( the red items indicates properties )

EXTREECUBELib.FaceTree <- "CreateTree" of EXTREECUBELib.Face
EXTREECUBELib.FaceTree <- "FaceTree" of EXTREECUBELib.Face

The FaceTree object supports the following properties and methods:

Name | Description
BackColorHeader | Specifies the header's background color.
Caption | Indicates the caption of the selected cell.
CaptionFromPoint | Retrieves the caption from the point.
ColumnAutoResize | Returns or sets a value indicating whether the control will automatically size its visible columns to fit on the control's client width.
ColumnFromPoint | Retrieves the index of the column from the point.
Columns | Returns the Columns collection.
DrawGridLines | Retrieves or sets a value that indicates whether the grid lines are visible or hidden.
EnsureVisibleColumn | Ensures the given column fits the visible client area.
EnsureVisibleItem | Ensures the given item fits the visible client area.
ExpandOnDblClick | Specifies whether the item is expanded or collapsed if the user double clicks the item.
Face | Retrieves the face that owns the content object.
ForeColor | Specifies the tree's foreground color.
ForeColorHeader | Specifies the header's foreground color.
FullRowSelect | Enables full-row selection in the control.
GetItems | Gets the collection of items into a safe array,
GridLineColor | Specifies the grid line color.
GridLineStyle | Specifies the style for gridlines in the list part of the control.
HasLines | Enhances the graphic representation of a tree control's hierarchy by drawing lines that link child items to their corresponding parent item.
HeaderHeight | Retrieves or sets a value indicating the control's header height.
HeaderVisible | Retrieves or sets a value that indicates whether the tree's header is visible or hidden.
Indent | Retrieves or sets the amount, in pixels, that child items are indented relative to their parent items.
Index | Indicates the index of the face.
ItemByIndex | Retrieves the item giving its index.
ItemFromPoint | Retrieves the index of the item from the point.
ItemPadding | Retrieves or sets the item's default padding.
Items | Returns the Items collection.
ItemsCount | Indicates the number of items.
Layout | Saves or loads the control's layout, such as positions of the columns, scroll position, filtering values.
LinesAtRoot | Link items at the root of the hierarchy.
PutItems | Adds an array of integer, long, date, string, double, float, or variant arrays to the control.
Refresh | Refreses the face's content.
SelBackColor | Retrieves or sets a value that indicates the selection background color.
SelectColumn | Specifies the index of the column being selected.
SelectItem | Specifies the index of the item being selected.
SelForeColor | Retrieves or sets a value that indicates the selection foreground color.
ShowSelection | Specifies whether the selection is shown or hidden.
SortOnClick | Retrieves or sets a value that indicates whether the control sorts automatically the data when the user click on column's caption.
TreeColumnIndex | Retrieves or sets a value indicating the column's index where the hierarchy will be displayed.
Value | Indicates the value of the selected cell.
ValueFromPoint | Retrieves the value from the point.
VisibleItemsCount | Indicates the number of visible items.


property BackColorHeader

property FaceTree.BackColorHeader as Color
Specifies the header's background color.

Type | Description
Color | A color expression that indicates the background color for the control's header. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.
The BackColorHeader property specifies the visual appearance of the control's header bar. The ForeColorHeader property specifies the foreground color of the control's header bar. The HeaderVisible property specifies whether the control shows it's header bar. The Caption property specifies the HTML caption to be shown on the control's header bar. The HeaderHeight property retrieves or sets a value indicating the control's header height.


property Caption

property FaceTree.Caption as String
Indicates the caption of the selected cell.

Type | Description
String | A String expression that specifies the caption of selected cell.
The Caption property indicates the caption or the text being shown at the selected item/column. The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ). The Value property indicates the value of the selected item/column. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


property CaptionFromPoint

property FaceTree.CaptionFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as String
Retrieves the caption from the point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
String | A String expression that indicates the caption of the cell from the cursor.
The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ). The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The FaceFromPoint property retrieves the face of the cube from the cursor. The AnchorFromPoint property retrieves the identifier of the anchor from point. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property ColumnAutoResize

property FaceTree.ColumnAutoResize as Boolean
Returns or sets a value indicating whether the control will automatically size its visible columns to fit on the control's client width.

Type | Description
Boolean | A Boolean expression returns or sets a value indicating whether the control will automatically size its visible columns to fit on the control's client width.
By default, the ColumnAutoResize property is True. The ColumnAutoResize property specifies whether the visible columns fit the control's client area. Use the Width property to specify the column's width. Use the Position property to specify the column's position. Use the HeaderVisible property to show or hide the control's header bar. Use the ColumnFromPoint property to get the column from point. Use the Remove method to remove a column.


property ColumnFromPoint

property FaceTree.ColumnFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as Long
Retrieves the index of the column from the point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
Long | A Long expression that indicates the index of the column from point, or -1 if not found.
The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The Item property gets the column object based on its index. The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ). The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The FaceFromPoint property retrieves the face of the cube from the cursor. The AnchorFromPoint property retrieves the identifier of the anchor from point. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property Columns

property FaceTree.Columns as Columns
Returns the Columns collection.

Type | Description
Columns | A Columns object that holds a collection of Column object to be displayed on a face of exFaceTree type
The Columns property returns the Columns collection. Use the Add / ToString / Count method to add new columns to the control. Use the Caption property to change the column's caption. To hide a column use the Visible property of the Column object. Use the BeginUpdate and EndUpdate methods to maintain performance while adding new columns and items. The Items property returns the Items collection. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection.


property DrawGridLines

property FaceTree.DrawGridLines as GridLinesEnum
Retrieves or sets a value that indicates whether the grid lines are visible or hidden.

Type | Description
GridLinesEnum | A GridLinesEnum expression that indicates whether the grid lines are visible or hidden

Use the DrawGridLines property to add grid lines to the current view. Use the GridLineColor property to specify the color for grid lines. Use the LinesAtRoot property specifies whether the control links the root items of the control. Use the HasLines property to specify whether the control draws the link between child items to their corresponding parent item.


method EnsureVisibleColumn

method FaceTree.EnsureVisibleColumn (Index as Variant)
Ensures the given column fits the visible client area.

Type | Description
Index as Variant | A long expression that indicates the index of the column, a string expression that indicates the column's caption or the column's key
The EnsureVisibleColumn method ensures that the given column fits the control's client area. The EnsureVisibleColumn method has no effect if the column is hidded. Use the Visible property to show or hide a column. Use the Position property to change the column's position. Use the EnsureVisibleItem method to ensure that an item fits the control's client area.


method EnsureVisibleItem

method FaceTree.EnsureVisibleItem (Index as Long)
Ensures the given item fits the visible client area.

Type | Description
Index as Long | A Long expression that indicates the index of the item to fit the controls client area.
The method doesn't expand parent items. The EnsureVisibleItem method scrolls the control's content until the item is visible. Use the EnsureVisibleColumn method to ensure that a specified column fits the control's client area.


property ExpandOnDblClick

property FaceTree.ExpandOnDblClick as Boolean
Specifies whether the item is expanded or collapsed if the user double clicks the item.

Type | Description
Boolean | A Boolean expression that specifies whether the item is expanded or collapsed if the user double clicks the item.
By default, the ExpandOnDblClick property is False. The ExpandOnDblClick property specifies whether the item being double-clicked gets expanded or collapsed, in a face of tree type. Use the EnsureVisibleFaceOnDblClick property to prevent ensuring visible the face being double-clicked. The DblClick event occurs once the user double-clicks any face of the control. By default, the face being double-clicked gets visible. The FaceFromPoint property retrieves the index of the face from the cursor. The AnchorFromPoint proeprty retrieves the key of the hyperlink/anchor from the cursor. Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers.


property Face

property FaceTree.Face as Face
Retrieves the face that owns the content object.

Type | Description
Face | A Face object that hosts the Tree-View control.
The Face property indicates the face that hosts the Tree-View control. The Index property retrieves the index of the face that hosts the calendar control.


property ForeColor

property FaceTree.ForeColor as Color
Specifies the tree's foreground color.

Type | Description
Color | A color expression that indicates the Tree's foreground color.
The ForeColor property specifies the Tree's foreground color. In case you need to specify a different background color for the Tree control you can use the Title(exTitleFaceBackColor) / ExtraTile(exTitleFaceBackColor) property. The SelBackColor property retrieves or sets a value that indicates the selection background color. The SelForeColor property retrieves or sets a value that indicates the selection foreground color. The ForeColorHeader property specifies the foreground color of the control's header bar.


property ForeColorHeader

property FaceTree.ForeColorHeader as Color
Specifies the header's foreground color.

Type | Description
Color | A Color expression that specifies the header's foreground color.

The ForeColorHeader property specifies the foreground color of the control's header bar. The BackColorHeader property specifies the visual appearance of the control's header bar. The HeaderVisible property specifies whether the control shows it's header bar. The Caption property specifies the HTML caption to be shown on the control's header bar. The HeaderHeight property retrieves or sets a value indicating the control's header height. The ForeColor property specifies the Tree's foreground color.


property FullRowSelect

property FaceTree.FullRowSelect as Boolean
Enables full-row selection in the control.

Type | Description
Boolean | A Boolean expression that specifies whether the selection is shown on a single or multiple columns.
By default, the FullRowSelect property is False. The FullRowSelect property specifies whether the selection is shown on single or all columns. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


method GetItems

method FaceTree.GetItems (Options as Variant)
Gets the collection of items into a safe array,

Type Description
Options as Variant Specifies a long expression as follows:
  • if 0, the result is a two-dimensional array with cell's values. The list includes the collapsed items, and the items are included as they are displayed ( sorted, filtered ). This option exports the values of cells. This option exports the values of the cells ( Value property )
  • if 1, the result the one-dimensional array of handles of items in the control as they are displayed ( sorted, filtered ). The list does not include the collapsed items.
  • else if other, and the number of columns is 1, the result is a one-dimensional array that includes the items and its child items as they are displayed ( sorted, filtered ). In this case, the array may contains other arrays that specifies the child items. The list includes the collapsed items, and the items are included as they are displayed ( sorted, filtered ). This option exports the values of the cells ( Value property )

If missing, the Options parameter is 0. If the control displays no items, the result is an empty object (VT_EMPTY).

Return | Description
Variant | A safe array that holds the items in the control. If the control has a single column, the GetItems returns a single dimension array (object[]), else The safe array being returned has two dimensions (object[,]). The first dimension holds the collection of columns, and the second holds the cells.
The GetItems method to get a safe array that holds the items in the control. The GetItems method gets the items as they are displayed, sorted and filtered. If the Options parameter is 0, the GetItems method collect the child items as well, no matter if the parent item is collapsed or expanded. Use the PutItems method to load an array to the control. The method returns nothing if the control has no columns or items. Use the Items property to access the items collection. You can use the GetItems(1) method to get the list of handles for the items as they are displayed, sorted and filtered. The GetItems method returns an empty expression ( VT_EMPTY ), if there is no items in the result.

/NET Assembly:

The following C# sample converts the returned value to a object[] when the control contains a single column:

object[] Items = (object[])extree1.GetItems()

or when the control contains multiple columns, the syntax is as follows:

object[,] Items = (object[,])extree1.GetItems()

The following VB.NET sample converts the returned value to a Object() when the control contains a single column:

Dim Items As Object() = Extree1.GetItems()

or when the control contains multiple columns, the syntax is as follows:

Dim Items As Object(,) = Extree1.GetItems()


property GridLineColor

property FaceTree.GridLineColor as Color
Specifies the grid line color.

Type | Description
Color | A color expression that indicates the color of the grid lines.

Use the GridLineColor property to specify the color for grid lines. Use the DrawGridLines property to add grid lines to the current view. Use the LinesAtRoot property specifies whether the control links the root items of the control. Use the HasLines property to specify whether the control draws the link between child items to their corresponding parent item.


property GridLineStyle

property FaceTree.GridLineStyle as GridLinesStyleEnum
Specifies the style for gridlines in the list part of the control.

Type | Description
GridLinesStyleEnum | An GridLinesStyleEnum expression that specifies the style for gridlines in the list part of the control.
By default, the GridLineStyle property is exGridLinesDot. The GridLineStyle property has effect only if the DrawGridLines property is not zero. The GridLineStyle property can be used to specify the style for horizontal or/and vertical grid lines. Use the GridLineColor property to specify the color for grid lines. Use the LinesAtRoot property specifies whether the control links the root items of the control. Use the HasLines property to specify whether the control draws the link between child items to their corresponding parent item.


property HasLines

property FaceTree.HasLines as HierarchyLineEnum
Enhances the graphic representation of a tree control's hierarchy by drawing lines that link child items to their corresponding parent item.

Type | Description
HierarchyLineEnum | A HierarchyLineEnum expression that defines the lines that link child items to their corresponding parent item.
By default, the LinesAtRoot property is exNoLinesAtRoot. The HasLines property enhances the graphic representation of a tree control's hierarchy by drawing lines that link child items to their corresponding parent item. The LinesAtRoot property link items at the root of the hierarchy. The Expanded property specifies whether the item is expanded or collapsed. The ExpandAll method expands all items in the collection. The CollapseAll method expands all items in the collection. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element.


property HeaderHeight

property FaceTree.HeaderHeight as Long
Retrieves or sets a value indicating the control's header height.

Type | Description
Long | A Long expression that defines the height of the control's header
By default, the HeaderHeight property is 24 pixels. The HeaderHeight property retrieves or sets a value indicating the control's header height. The HeaderVisible property specifies whether the control shows it's header bar. The ItemPadding increases / decreases the vertical padding for items, including the control's header bar. The Caption property specifies the HTML caption to be shown on the control's header bar. The BackColorHeader property specifies the visual appearance of the control's header bar. The ForeColorHeader property specifies the foreground color of the control's header bar.


property HeaderVisible

property FaceTree.HeaderVisible as Boolean
Retrieves or sets a value that indicates whether the tree's header is visible or hidden.

Type | Description
Boolean | A Boolean expression that specifies whether the control's header is visible or hidden.
By default, the HeaderVisible property is True. The HeaderVisible property specifies whether the control shows it's header bar. The Caption property specifies the HTML caption to be shown on the control's header bar. The HeaderHeight property retrieves or sets a value indicating the control's header height. The BackColorHeader property specifies the visual appearance of the control's header bar. The ForeColorHeader property specifies the foreground color of the control's header bar.


property Indent

property FaceTree.Indent as Long
Retrieves or sets the amount, in pixels, that child items are indented relative to their parent items.

Type | Description
Long | A long expression that indicates the amount, in pixels, that child items are indented relative to their parent items.
If the Indent property is 0, the child items are not indented relative to their parent item. Use HasLines and LinesAtRoot properties to show the hierarchy lines. Use the HasButtons property to define the +/- signs appearance. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object.


property Index

property FaceTree.Index as FaceEnum
Indicates the index of the face.

Type | Description
FaceEnum | A FaceEnum expression that specifies the index of the face that hosts the Tree-View control.
The Index property retrieves the index of the face that hosts the calendar control. The Face property indicates the face that hosts the Tree-View control.


property ItemByIndex

property FaceTree.ItemByIndex (Index as Long) as Item
Retrieves the item giving its index.

Type | Description
Index as Long | A Long expression that indicates the index of the item to be requested
Item | An Item object being requested.

The ItemByIndex property retrieves an Item object based on its index. The ItemsCount property specifies returns the number of items. The Index property specifies the index of the item within face's items collection. The Item property retrieves the Item object giving its position. The Position property specifies the position of the item relative to its parent. The ItemFromPoint property retrieves the index of the item from the point.


property ItemFromPoint

property FaceTree.ItemFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as Long
Retrieves the index of the item from the point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
Long | A Long expression that indicates the index of the item from the point, or -1 if not found.
The ItemFromPoint property retrieves the index of the item from the point. The ItemFromPoint(-1,-1) property retrieves the index of the item from the current mouse position. The Index property specifies the index of the item within face's items collection. The ItemByIndex property retrieves an Item object based on its index. The Item property retrieves the Item object giving its position. The Position property specifies the position of the item relative to its parent.


property ItemPadding

property FaceTree.ItemPadding as Long
Retrieves or sets the item's default padding.

Type | Description
Long | A Long expression retrieves or sets the item's default padding.
By default, the ItemPadding property is 4. The ItemPadding property retrieves or sets the item's default padding. By default, the height of the item is based on the height of the control's Font, so the height for all items are automatically updated once the user changes the control's font. The item's height is automatically computed if the SingleLine property is False. The Def(exCellSingleLine) / SingleLine property specifies whether the cell's caption is displayed by single or multiple lines. The HeaderVisible property specifies whether the control shows it's header bar. The HeaderHeight property retrieves or sets a value indicating the control's header height. The Margins / RelativeMargins specifies the size of the margins that the face's content is displayed relative to its face.


property Items

property FaceTree.Items as Items
Returns the Items collection.

Type | Description
Items | An Items object that holds Item objects.
The Items property returns the Items collection. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Columns property returns the Columns collection. Use the Add / ToString / Count method to add new columns to the control. Use the Caption property to change the column's caption. To hide a column use the Visible property of the Column object. Use the BeginUpdate and EndUpdate methods to maintain performance while adding new columns and items.


property ItemsCount

property FaceTree.ItemsCount as Long
Indicates the number of items.

Type | Description
Long | A Long expression that specifies the count of the items in the face.
The ItemsCount property specifies returns the number of items. The ItemByIndex property retrieves an Item object based on its index. The Index property specifies the index of the item within face's items collection. The Item property retrieves the Item object giving its position. The Position property specifies the position of the item relative to its parent. The ItemFromPoint property retrieves the index of the item from the point.


property Layout

property FaceTree.Layout as String
Saves or loads the control's layout, such as positions of the columns, scroll position, filtering values.

Type | Description
String | A String expression that specifies the control's layout.
You can use the Layout property to store the control's layout and to restore the layout later. For instance, you can save the control's Layout property to a file when the application is closing, and you can restore the control's layout when the application is loaded. The Layout property saves almost all of the control's properties that user can change at runtime ( like changing the column's position by drag and drop ). The Layout property does NOT save the control's data, so the Layout property should be called once you loaded the data from your database, xml or any other alternative. Once the data is loaded, you can call the Layout property to restore the View as it was saved. Before closing the application, you can call the Layout property and save the content to a file for reading next time the application is opened.

The Layout property saves/loads the following information:

  • columns size and position
  • current selection
  • scrolling position and size
  • expanded/collapsed items, if any
  • sorting columns
  • filtering options
  • SearchColumnIndex property, indicates the column where the user can use the control's incremental searching.
  • TreeColumnIndex property, which indicates the index of the column that displays the hierarchy lines.

These properties are serialized to a string and encoded in BASE64 format.

The following movies show how Layout works:

  • The Layout property is used to save and restore the control's view.

Generally, the Layout property can be used to save / load the control's layout ( or as it is displayed ). Thought, you can benefit of this property to sort the control using one or more columns as follows:

  • multiplesort="";singlesort="", removes any previously sorting
  • multiplesort="C3:1", sorts ascending the column with the index 3 ( and add it to the sort bar if visible )
  • singlesort="C4:2", sorts descending the column with the index 4 ( it is not added to sort bar panel )
  • multiplesort="C3:1";singlesort="C4:2", sorts ascending the column with the index 3 ( and add it to the sort bar if visible ), and sorts descending the column with the index 4. In other words, it re-sort the control by columns 3 and 4.
  • multiplesort="C3:1 C5:2";singlesort="C4:2", sorts ascending the column with the index 3 ( and add it to the sort bar if visible ), sorts descending the column with the index 5 ( and add it to the sort bar if visible ), and sorts descending the column with the index 4. In other words, it re-sort the control by columns 3, 5 and 4.

The format of the Layout in non-encoded form is like follows:

c0.filtertype=0
c0.position=0
c0.select=0
c0.visible=1
c0.width=96
....
columns=13
collapse="0-3 5-63 80-81 83"
filterprompt=""
focus=8
focuscolumnindex=0
hasfilter=1
hscroll=0
multiplesort="C12:1 C2:2"
searchcolumnindex=3
select="39 2 13 8"
selectcolumnindex=0
singlesort="C5:2"
treecolumnindex=0
vscroll=12
vscrolloffset=0


property LinesAtRoot

property FaceTree.LinesAtRoot as LinesAtRootEnum
Link items at the root of the hierarchy.

Type | Description
LinesAtRootEnum | A LinesAtRootEnum expression that specifies the type of link to be shown.
By default, the LinesAtRoot property is exNoLinesAtRoot. The LinesAtRoot property link items at the root of the hierarchy. The Expanded property specifies whether the item is expanded or collapsed. The ExpandAll method expands all items in the collection. The CollapseAll method expands all items in the collection. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element. The HasLines property enhances the graphic representation of a tree control's hierarchy by drawing lines that link child items to their corresponding parent item.

How do I add a hierarchy?

VBA (MS Access, Excell...)

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("").Alignment = LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub Extreecube1_FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles Extreecube1.FaceTreeExpandItem
    With Extreecube1
        Debug.Print( Item )
    End With
End Sub

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub AxTreeCube1_FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles AxTreeCube1.FaceTreeExpandItem
    With AxTreeCube1
        Debug.Print( e.item )
    End With
End Sub

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void OnFaceTreeExpandItemTreeCube1(LPDISPATCH   Tree,long   Item)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
    OutputDebugString( L"Item" );
}

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void extreecube1_FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
}
//this.extreecube1.FaceTreeExpandItem += new exontrol.EXTREECUBELib.exg2antt.FaceTreeExpandItemEventHandler(this.extreecube1_FaceTreeExpandItem);

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
    alert( Item );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeExpandItem(Tree,Item)
    With TreeCube1
        alert( Item )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 10
            .HeaderVisible = False
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("").Alignment = 0
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void axTreeCube1_FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
}
//this.axTreeCube1.FaceTreeExpandItem += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEventHandler(this.axTreeCube1_FaceTreeExpandItem);

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
    ;
    print( _Item );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(10);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
    end
end;

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TForm1.TreeCube1FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
    end
end;

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

*** FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type. ***
LPARAMETERS Tree,Item
    with thisform.TreeCube1
        DEBUGOUT( Item )
    endwith

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 10
        .HeaderVisible = .F.
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeExpandItem = class::nativeObject_FaceTreeExpandItem
endwith
*/
// Notifies that an item has been expanded/collapsed into a face of tree type.
function nativeObject_FaceTreeExpandItem(Tree,Item)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
return

local oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

' Notifies that an item has been expanded/collapsed into a face of tree type.
function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

METHOD OCX_Exontrol1FaceTreeExpandItem(Tree,Item) CLASS MainDialog
    // FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
    OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 10
    var_FaceTree:HeaderVisible := false
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

/*begin event FaceTreeExpandItem(oleobject  Tree,long  Item) - Notifies that an item has been expanded/collapsed into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
*/
/*end event FaceTreeExpandItem*/

OleObject oTreeCube,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

// Notifies that an item has been expanded/collapsed into a face of tree type.
Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
    Showln llItem
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 10
            Set ComHeaderVisible of hoFaceTree to False
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
    DevOut( Transform(Item,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 10
            oFaceTree:HeaderVisible := .F.
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method PutItems

method FaceTree.PutItems (Items as Variant, [Parent as Variant])
Adds an array of integer, long, date, string, double, float, or variant arrays to the control.

Type | Description
Items as Variant | An array that control uses to fill with. The array can be one or two- dimensional. If the array is one-dimensional, the control requires one column being added before calling the PutItems method. If the Items parameter indicates a two-dimensional array, the first dimension defines the columns, while the second defines the number of items to be loaded. For instance, a(2,100) means 2 columns and 100 items.
Parent as Variant | A long expression that specifies the handle of the item where the array is being inserted, or 0 if missing.
The PutItems method loads items from a safe array. The Parent parameter of the PutItems method specifies the handle of the item where the array is being inserted as child items. Use the GetItems method to get a safe array with the items in the control. Use the Items property to access the items collection. Use the ColumnAutoResize property to specify whether the visible columns should fit the control's client area.


method Refresh

method FaceTree.Refresh ()
Refreses the face's content.

Type Description


property SelBackColor

property FaceTree.SelBackColor as Color
Retrieves or sets a value that indicates the selection background color.

Type | Description
Color | A color expression that defines the selected items background color. The last 7 bits in the high significant byte of the color indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.

The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. Use the BackColor property to change the item's background color. The ForeColor property specifies the item's foreground color. The Selectable property specifies whether the item is selectable.


property SelectColumn

property FaceTree.SelectColumn as Long
Specifies the index of the column being selected.

Type | Description
Long | A Long expression that specifies the index of the column being selected. The Item property of the Columns gets access to the Column object giving its index.
The SelectColumn property specifies the index of the column being selected. The SelectItem property specifies the index of the item being selected. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


property SelectItem

property FaceTree.SelectItem as Long
Specifies the index of the item being selected.

Type | Description
Long | A Long expression that specifies the index of the item being selected. Use the ItemByIndex property to access the Item object giving its index.
The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


property SelForeColor

property FaceTree.SelForeColor as Color
Retrieves or sets a value that indicates the selection foreground color.

Type | Description
Color | A color expression that defines the selection foreground color.

The SelForeColor property specifies the foreground color of selected cell/item. The SelBackColor property specifies the visual appearance of selected cell/item. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected.


property ShowSelection

property FaceTree.ShowSelection as Boolean
Specifies whether the selection is shown or hidden.

Type | Description
Boolean | A Boolean expression that specifies whether the selection is shown or hidden.
By default, the ShowSelection property is true, The ShowSelection property specifies whether the selection is shown or hidden. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column.The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


property SortOnClick

property FaceTree.SortOnClick as SortOnClickEnum
Retrieves or sets a value that indicates whether the control sorts automatically the data when the user click on column's caption.

Type | Description
SortOnClickEnum | A SortOnClickEnum expression that retrieves or sets a value that indicates whether the control sorts automatically the data when the user click on column's caption.
Use the SortOnClick property to disable sorting items when the user clicks on the column's header.


property TreeColumnIndex

property FaceTree.TreeColumnIndex as Long
Retrieves or sets a value indicating the column's index where the hierarchy will be displayed.

Type | Description
Long | A long expression that indicates the index of the column where the control's hierarchy is displayed

Use the TreeColumnIndex property to change the column's index where the hierarchy lines are painted. Use HasLines and LinesAtRoot properties to show the hierarchy lines. Use the HasButtons property to define the +/- signs appearance. If the TreeColumnIndex property is -1, the control doesn't paint the hierarchy. Use the Indent property to define the amount, in pixels, that child items are indented relative to their parent items.


property Value

property FaceTree.Value as Variant
Indicates the value of the selected cell.

Type | Description
Variant | A Variant expression that specifies the value of selected cell.
The Value property indicates the value of the selected item/column. The Value property specifies the cell's value ( for instance, if the cell display HTML text, the cell's value includes the HTML tags ). The Caption property indicates the caption or the text being shown at the selected item/column. The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.


property ValueFromPoint

property FaceTree.ValueFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as Variant
Retrieves the value from the point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
Variant | A VARIANT expression that defines the cell's value.
The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The Value property specifies the cell's value ( for instance, if the cell display HTML text, the cell's value includes the HTML tags ). The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The FaceFromPoint property retrieves the face of the cube from the cursor. The AnchorFromPoint property retrieves the identifier of the anchor from point. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property VisibleItemsCount

property FaceTree.VisibleItemsCount as Long
Indicates the number of visible items.

Type | Description
Long | A Long expression that indicates the number of visible items.
The VisibleItemsCount property specifies number of items that can be displayed on the face. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Count property gets or sets the number of the items.

How can add items to a list?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = Extreecube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->GetColumns()->Add(L"Pos")->PutFormatColumn(L"1 pos ``");
    var_FaceTree->GetItems()->PutCount(spTreeCube1->GetFrontFace()->GetFaceTree()->GetVisibleItemsCount());

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->Columns->Add(L"Pos")->FormatColumn = L"1 pos ``";
    var_FaceTree->Items->Count = TreeCube1->FrontFace->FaceTree->VisibleItemsCount;

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
    var_FaceTree.Items.Count = extreecube1.FrontFace.FaceTree.VisibleItemsCount;

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
        var_FaceTree.Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .Columns.Add("Pos").FormatColumn = "1 pos ``"
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
    var_FaceTree.Items.Count = axTreeCube1.FrontFace.FaceTree.VisibleItemsCount;

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Pos"); com_Column = var_Column;
        com_Column.FormatColumn("1 pos ``");
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.Count(extreecube1.FrontFace().FaceTree().VisibleItemsCount());
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        Columns.Add('Pos').FormatColumn := '1 pos ``';
        Items.Count := AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        Columns.Add('Pos').FormatColumn := '1 pos ``';
        Items.Count := TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = thisform.TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    endwith
endwith

dBASE Plus

local oTreeCube,var_Column,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    // var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_Column = var_FaceTree.Columns.Add("Pos")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.FormatColumn = "1 pos ``"]
    endwith
    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    ' var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_Column = var_FaceTree.Columns.Add("Pos")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.FormatColumn = `1 pos `````"

    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

Visual Objects

local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:Columns:Add("Pos"):FormatColumn := "1 pos ``"
    var_FaceTree:Items:Count := oDCOCX_Exontrol1:FrontFace:FaceTree:VisibleItemsCount

PowerBuilder

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Pos" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComFormatColumn of hoColumn to "1 pos ``"
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant v
                    Variant voFace1
                    Get ComFrontFace to voFace1
                    Handle hoFace1
                    Get Create (RefClass(cComFace)) to hoFace1
                    Set pvComObject of hoFace1 to voFace1
                        Variant voFaceTree1
                        Get ComFaceTree of hoFace1 to voFaceTree1
                        Handle hoFaceTree1
                        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
                        Set pvComObject of hoFaceTree1 to voFaceTree1
                            Get ComVisibleItemsCount of hoFaceTree1 to v
                        Send Destroy to hoFaceTree1
                    Send Destroy to hoFace1
                Set ComCount of hoItems to v
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:Columns():Add("Pos"):FormatColumn := "1 pos ``"
            oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


Item object
The Item object holds information about an item to be displayed on a exFaceTree type. The Type property specifies the type of the face. The exFaceTree type can display one or multiple columns.

The following screen shot shows a FaceTree with multiple items:

The following table shows how you can get a Item object ( the red items indicates properties )

EXTREECUBELib.FaceTree
    "ItemByIndex(Long)" -> EXTREECUBELib.Item
EXTREECUBELib.Items
    "Add(Variant)" -> EXTREECUBELib.Item
    "Item(Variant)" -> EXTREECUBELib.Item
EXTREECUBELib.Item
    "Parent" -> EXTREECUBELib.Item

The following table shows how you can get a Item object ( the red items indicates properties )

EXTREECUBELib.Item <- "Add(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "Item(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "ItemByIndex(Long)" of EXTREECUBELib.FaceTree
EXTREECUBELib.Item <- "Parent" of EXTREECUBELib.Item

The Item object supports the following properties and methods:

Name | Description
BackColor | Specifies the item's background color.
BackgroundExt | Indicates additional colors, text, images that can be displayed on the cell's background using the EBN string format.
BackgroundExtValue | Specifies at runtime, the value of the giving property for specified part of the background extension.
Bold | Indicates that the item should appear as bold.
Caption | Returns the cell's caption.
CellParent | Retrieves the parent of an inner cell.
CellWidth | Retrieves or sets a value that indicates the width of the inner cell.
Divider | Specifies whether the item acts like a divider item. The value indicates the index of column used to define the divider's title.
DividerLine | Defines the type of line in the divider item.
DividerLineAlignment | Specifies the alignment of the line in the divider item.
Enabled | Enables or disables the item.
Expanded | Expands or collapses the item.
ForeColor | Specifies the item's foreground color.
FormatCell | Specifies the format to display the cell's content.
HasButton | Retrieves or sets a value indicating whether the cell has a button associated or not.
HasCheckBox | Retrieves or sets a value indicating whether the cell has a checkbox associated or not.
HasRadioButton | Retrieves or sets a value indicating whether the cell has a radiobutton associated or not.
Height | Specifies the item's height.
Index | Indicates the index of the item.
InnerCell | Retrieves the inner cell.
Italic | Indicates that the item should appear in italics.
Items | Gets the item's child collection.
Parent | Indicates the item's parent.
Position | Specifies the item's position.
RadioGroup | Retrieves or sets a value whether the radio button group.
Remove | Removes the item.
Selectable | Specifies whether the item is selectable.
SingleLine | Indicates whether the cell is displayed on a single or multiple lines.
SplitCell | Splits a cell, and returns the inner created cell.
State | Specifies the cell's state / checked / unchecked.
StrikeOut | Indicates that the item should appear as strikeout.
ToString | Loads or saves the Item object using string representation.
Underline | Indicates that the item should appear as underlined.
UnsplitCell | Unsplits a cell.
UserData | Specifies the cell's user data.
Value | Specifies the cell's value.


property BackColor

property Item.BackColor as Color
Specifies the item's background color.

Type | Description
Color | A color expression that specifies the item's background color. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.
By default, the item's BackColor property is -1, which indicates that no background color is applied. Use the BackColor property to change the item's background color. The ForeColor property specifies the item's foreground color. The SelBackColor / SelForeColor property retrieves or sets a value that indicates the selection background / foreground color. You can use the <bgcolor> / <fgcolor> HTML tags in cell's Value property to display the text of the cell with different colors.


property BackgroundExt

property Item.BackgroundExt([ColIndex as Variant]) as String
Indicates additional colors, text, images that can be displayed on the cell's background using the EBN string format.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to apply the EBN String Format.
String | A String expression ( "EBN String Format" ) that defines the layout of the UI to be applied on the object's background. The syntax of EBN String Format in BNF notation is shown bellow. You can use the EBN's Builder of eXButton/COM control to define visually the EBN String Format.
By default, the BackgroundExt property is empty. Using the BackgroundExt property you have unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the object's background. For instance, let's say you need to display more colors on the object's background, or just want to display an additional caption or image to a specified location on the object's background. The EBN String Format defines the parts of the EBN to be applied on the object's background. The EBN is a set of UI elements that are built as a tree where each element is anchored to its parent element. Use the BackgroundExtValue property to change at runtime any UI property for any part that composes the EBN String Format. The BackgroundExt property is applied right after setting the object's backcolor, and before drawing the default object's captions, icons or pictures.

The following screen shot shows how you can use the BackgroundExt / BackgroundExtValue properties:

Complex samples:

Easy samples:

  • "[pattern=6]", shows the BDiagonal pattern on the object's background.

  • "[frame=RGB(255,0,0),framethick]", draws a red thick-border around the object.

  • "[frame=RGB(255,0,0),framethick,pattern=6,patterncolor=RGB(255,0,0)]", draws a red thick-border around the object, with a patter inside.

  • "[[patterncolor=RGB(255,0,0)](none[(4,4,100%-8,100%-8),pattern=0x006,patterncolor=RGB(255,0,0),frame=RGB(255,0,0),framethick])]", draws a red thick-border around the object, with a patter inside, with a 4-pixels wide padding:

  • "top[4,back=RGB(0,0,255)]", draws a blue line on the top side of the object's background, of 4-pixels wide.

  • "[text=`caption`,align=0x22]", shows the caption string aligned to the bottom-right side of the object's background.

  • "[text=`<img>flag</img>`,align=0x11]" shows the flag picture and the sweden string aligned to the bottom side of the object.

  • "left[10,back=RGB(255,0,0)]", draws a red line on the left side of the object's background, of 10-pixels wide.

  • "bottom[50%,pattern=6,frame]", shows the BDiagonal pattern with a border arround on the lower-half part of the object's background.

  • "root[text=`caption <b>2`,align=0x22](client[text=`caption <b>1`,align=0x20])", shows the caption 1 aligned to the bottom-left side, and the caption 2 to the bottom-right side

The Exontrol's eXButton WYSWYG Builder helps you to generate or view the EBN String Format, in the To String field as shown in the following screen shot:

The To String field of the EBN Builder defines the EBN String Format that can be used on BackgroundExt property.

The EBN String Format syntax in BNF notation is defined like follows:

<EBN> ::= <elements> | <root> "(" [<elements>] ")"
<elements> ::= <element> [ "," <elements> ]
<root> ::= "root" [ <attributes> ] | [ <attributes> ]
<element> ::= <anchor> [ <attributes> ] [ "(" [<elements>] ")" ]
<anchor> ::= "none" | "left" | "right" | "client" | "top" | "bottom"
<attributes> ::= "[" [<client> ","] <attribute> [ "," <attributes> ] "]"
<client> ::= <expression> | <expression> "," <expression> "," <expression> "," <expression>
<expression> ::= <number> | <number> "%"
<attribute> ::= <backcolor> | <text> | <wordwrap> | <align> | <pattern> | <patterncolor> | <frame> | <framethick> | <data> | <others>
<equal> ::= "="
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<decimal> ::= <digit><decimal>
<hexadigit> ::= <digit> | "A" | "B"  "C" | "D" | "E"  "F"
<hexa> ::= <hexadigit><hexa>
<number> ::= <decimal> | "0x" <hexa>
<color> ::= <rgbcolor> | number
<rgbcolor> ::= "RGB" "(" <number> "," <number> "," <number> ")"
<string> ::= "`" <characters> "`" | "'" <characters> "'" | " <characters> "
<characters> ::= <char>|<characters>
<char> ::= <any_character_excepts_null>
<backcolor> ::= "back" <equal> <color>
<text> ::= "text" <equal> <string>
<align> ::= "align" <equal> <number>
<pattern> ::= "pattern" <equal> <number>
<patterncolor> ::= "patterncolor" <equal> <color>
<frame> ::= "frame" <equal> <color>
<data> ::= "data" <equal> <number> | <string>
<framethick> ::= "framethick"
<wordwrap> ::= "wordwrap"

Others like: pic, stretch, hstretch, vstretch, transparent, from, to are reserved for future use only.

Now, lets say we have the following request to layout the colors on the objects:

We define the BackgroundExt property such as "top[30%,back=RGB(253,218,101)],client[back=RGB(91,157,210)],none[(0%,0%,10%,100%)](top[90%,back=RGB(0,0,0)])", and it looks as:

so, if we apply to our object we got:

Now, lets say we have the following request to layout the colors on the objects:

We define BackgroundExt property such as "left[10%](top[90%,back=RGB(0,0,0)]),top[30%,back=RGB(254,217,102)],client[back=RGB(91,156,212)]", and it looks as:

so, if we apply to our object we got:


property BackgroundExtValue

property Item.BackgroundExtValue(ColIndex as Variant, Index as IndexExtEnum, Property as BackgroundExtPropertyEnum) as Variant
Specifies at runtime, the value of the giving property for specified part of the background extension.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to apply the EBN String Format.
Index as IndexExtEnum | A Long expression that defines the index of the part that composes the EBN to be accessed / changed. The following screen shot shows where you can find Index of the parts: The screen shot shows that the EBN contains 11 elements, so in this case the Index starts at 0 ( root element ) and ends on 10.
Property as BackgroundExtPropertyEnum | A BackgroundExtPropertyEnum expression that specifies the property to be changed as explained bellow.
Variant | A Variant expression that defines the part's value. The Type of the expression depending on the Property parameter as explained bellow.
Use the BackgroundExtValue property to change at runtime any UI property for any part that composes the EBN String Format. The BackgroundExtValue property has no effect if the BackgroundExt property is empty ( by default ). The idea is as follows: first you need to decide the layout of the UI to put on the object's background, using the BackgroundExt property, and next ( if required ), you can change any property of any part of the background extension to a new value. In other words, let's say you have the same layout to be applied to some of your objects, so you specify the BackgroundExt to be the same for them, and next use the BackgroundExtValue property to change particular properties ( like back-color, size, position, anchor ) for different objects.

You can access/define/change the following UI properties of the element:

  • exBackColorExt(1), Indicates the background color / EBN color to be shown on the part of the object. Sample: 255 indicates red, RGB(0,255,0) green, or 0x1000000. (Color/Numeric expression, The last 7 bits in the high significant byte of the color indicate the identifier of the skin being used )
  • exClientExt(2), Specifies the position/size of the object, depending on the object's anchor. The syntax of the exClientExt is related to the exAnchorExt value. For instance, if the object is anchored to the left side of the parent ( exAnchorExt = 1 ), the exClientExt specifies just the width of the part in pixels/percents, not including the position. In case, the exAnchorExt is client, the exClientExt has no effect. Sample: 50% indicates half of the parent, 25 indicates 25 pixels, or 50%-8 indicates 8-pixels left from the center of the parent. (String/Numeric expression)
  • exAnchorExt(3), Specifies the object's alignment relative to its parent. (Numeric expression)
  • exTextExt(4), Specifies the HTML text to be displayed on the object. (String expression)
  • exTextExtWordWrap(5), Specifies that the object is wrapping the text. The exTextExt value specifies the HTML text to be displayed on the part of the EBN object. This property has effect only if there is a text assigned to the part using the exTextExt flag. (Boolean expression)
  • exTextExtAlignment(6), Indicates the alignment of the text on the object. The exTextExt value specifies the HTML text to be displayed on the part of the EBN object. This property has effect only if there is a text assigned to the part using the exTextExt flag (Numeric expression)
  • exPatternExt(7), Indicates the pattern to be shown on the object. The exPatternColorExt specifies the color to show the pattern. (Numeric expression)
  • exPatternColorExt(8), Indicates the color to show the pattern on the object. The exPatternColorExt property has effect only if the exPatternExt property is not 0 ( empty ). The exFrameColorExt specifies the color to show the frame ( the exPatternExt property includes the exFrame or exFrameThick flag ). (Color expression)
  • exFrameColorExt(9), Indicates the color to show the border-frame on the object. This property set the Frame flag for exPatternExt property. (Color expression)
  • exFrameThickExt(11), Specifies that a thick-frame is shown around the object. This property set the FrameThick flag for exPatternExt property. (Boolean expression)
  • exUserDataExt(12), Specifies an extra-data associated with the object. (Variant expression)

For instance, having the BackgroundExt on "bottom[50%,pattern=6,frame]"

we got:

so let's change the percent of 50% to 25% like BackgroundExtValue(1,2) on "25%", where 1 indicates the first element after root, and 2 indicates the exClientExt property, we get:

In VB you should have the following syntax:

.BackgroundExt = "bottom[50%,pattern=6,frame]"
.BackgroundExtValue(exIndexExt1, exClientExt) = "25%"


property Bold

property Item.Bold as Boolean
Indicates that the item should appear as bold.

Type | Description
Boolean | A Boolean expression that specifies whether the item should appear in bold.
By default, the Bold property is False. The Bold property indicates that the item should appear as bold. You can use the <b> HTML tags in cell's Value property to display portions of the text in bold.

The following properties changes the item's font attribute as:

  • Italic property indicates that the item should appear as italics.
  • Underline property indicates that the item should appear as underlined.
  • Strikeout property indicates that the item should appear as strikeout.


property Caption

property Item.Caption (ColIndex as Variant) as String
Returns the cell's caption.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's caption.
String | A string expression that indicates the cell's caption.
The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ). The Value property specifies the cell's value ( for instance, if the cell display HTML text, the cell's value includes the HTML tags ). The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The Caption property indicates the caption of the selected cell.


property CellParent

property Item.CellParent ([ColIndex as Variant]) as Variant
Retrieves the parent of an inner cell.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's parent.
Variant | A Long expression that indicates the handle of the cell's parent, or zero if no parent
Use the CellParent property to get the parent of the inner cell. The SplitCell method splits a cell in two cells ( the newly created cell is called inner cell ). Use the InnerCell property to get the inner cell. The CellParent property gets 0 if the cell is not an inner cell. The parent cell is always displayed to the left side of the cell. The inner cell ( InnerCell ) is displayed to the right side of the cell. Use the CellWidth property to specify the width of the inner cell. The UnsplitCell method unsplits the cell. The Parent property indicates the item's parent.


property CellWidth

property Item.CellWidth([ColIndex as Variant]) as Long
Retrieves or sets a value that indicates the width of the inner cell.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to change the width of the inner cell.
Long | A Long expression that indicates the width of inner cell.
Use the CellWidth property to specify the width of the inner cell. Use the CellParent property to get the parent of the inner cell. The SplitCell method splits a cell in two cells ( the newly created cell is called inner cell ). Use the InnerCell property to get the inner cell. The CellParent property gets 0 if the cell is not an inner cell. The parent cell is always displayed to the left side of the cell. The inner cell ( InnerCell ) is displayed to the right side of the cell. The UnsplitCell method unsplits the cell


property Divider

property Item.Divider as Long
Specifies whether the item acts like a divider item. The value indicates the index of column used to define the divider's title.

Type | Description
Long | A long expression that indicates the column's index.
A divider item uses the item's client area to display a single cell. The ItemDivider property specifies the index of the cell being displayed. In other words, the divider item merges the item cells into a single cell. Use the DividerLine / DividerLineAlignment property to define the line that underlines the divider item. Use the Selectable property to specify the user can select an item. A divider item has sense for a control with multiple columns.


property DividerLine

property Item.DividerLine as DividerLineEnum
Defines the type of line in the divider item.

Type | Description
DividerLineEnum | A DividerLineEnum expression that indicates the type of the line in the divider item.
A divider item uses the item's client area to display a single cell. Use the DividerLine / DividerLineAlignment property to define the line that underlines the divider item. The Divider property specifies the index of the cell being displayed. In other words, the divider item merges the item cells into a single cell. Use the Selectable property to specify the user can select an item. A divider item has sense for a control with multiple columns.


property DividerLineAlignment

property Item.DividerLineAlignment as DividerAlignmentEnum
Specifies the alignment of the line in the divider item.

Type | Description
DividerAlignmentEnum | A DividerAlignmentEnum expression that specifies the line's alignment.
Use the DividerLine / DividerLineAlignment property to define the line that underlines the divider item. A divider item uses the item's client area to display a single cell. The Divider property specifies the index of the cell being displayed. In other words, the divider item merges the item cells into a single cell. Use the Selectable property to specify the user can select an item. A divider item has sense for a control with multiple columns.


property Enabled

property Item.Enabled as Boolean
Enables or disables the item.

Type | Description
Boolean | A boolean expression that determines whether an item can respond to user-generated events.
By default, the Enabled property is True. The Enabled property specifies whether the item is enabled or disabled. The Enabled property enables or disables the column. The Enabled property specifies whether the entire control is enabled or disabled. The Enabled property specifies whether a Face is enabled or disabled.


property Expanded

property Item.Expanded as Boolean
Expands or collapses the item.

Type | Description
Boolean | A Boolean expression that specifies whether the item is expanded or collapsed.
The Expanded property specifies whether the item is expanded or collapsed. The ExpandAll method expands all items in the collection. The CollapseAll method expands all items in the collection. The LinesAtRoot property link items at the root of the hierarchy. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element.


property ForeColor

property Item.ForeColor as Color
Specifies the item's foreground color.

Type | Description
Color | A color expression that specifies the item's foreground color.
By default, the item's ForeColor property is -1, which indicates that no foreground color is applied. The ForeColor property specifies the item's foreground color. Use the BackColor property to change the item's background color. The SelBackColor / SelForeColor property retrieves or sets a value that indicates the selection background / foreground color. You can use the <bgcolor> / <fgcolor> HTML tags in cell's Value property to display the text of the cell with different colors.


property FormatCell

property Item.FormatCell([ColIndex as Variant]) as String
Specifies the format to display the cell's content.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's caption.
String | A string expression that defines the format to display the cell, including HTML formatting, if the cell supports it.
By default, the FormatCell property is empty. The FormatCell property specifies the caption to be displayed on a specified cell. The cells in the column use the specified format only if is valid ( not empty, and syntactically correct ), to display data in the column. The FormatColumn property provides a format to display all cells in the column using a predefined format. The expression may be a combination of variables, constants, strings, dates and operators, and value. The value operator gives the value to be formatted, while the state operator indicates the cell's state. A string is delimited by ", ` or ' characters, and inside they can have the starting character preceded by \ character, ie "\"This is a quote\"". A date is delimited by # character, ie #1/31/2001 10:00# means the January 31th, 2001, 10:00 AM.

For instance:

  • the "currency(value)" displays the column using the current format for the currency ie, 1000 gets displayed as $1,000.00
  • the "longdate(date(value))" converts the value to a date and gets the long format to display the date in the column, ie #1/1/2001# displays instead Monday, January 01, 2001
  • the "'<b>' + ((0:=proper(value)) left 1) + '</b>' + (=:0 mid 2)" converts the name to proper, so the first letter is capitalized, bolds the first character, and let unchanged the rest, ie a "mihai filimon" gets displayed "Mihai Filimon".
  • the "len(value) ? ((0:=dbl(value)) < 10 ? '<fgcolor=808080><font ;7>' : '<b>') + currency(=:0)" displays the cells that contains not empty daya, the value in currency format, with a different font and color for values less than 10, and bolded for those that are greater than 10, as can see in the following screen shot in the column (A+B+C):

The value keyword in the property indicates the value to be formatted. The Value property specifies the cell's value.

The state keyword in the property indicates the cell's state. The State property specifies the cell's state, which can be 0, 1 or 2.

The supported binary arithmetic operators are:

  • * ( multiplicity operator ), priority 5
  • / ( divide operator ), priority 5
  • mod ( reminder operator ), priority 5
  • + ( addition operator ), priority 4 ( concatenates two strings, if one of the operands is of string type )
  • - ( subtraction operator ), priority 4

The supported unary boolean operators are:

  • not ( not operator ), priority 3 ( high priority )

The supported binary boolean operators are:

  • or ( or operator ), priority 2
  • and ( or operator ), priority 1

The supported binary boolean operators, all these with the same priority 0, are :

  • < ( less operator )
  • <= ( less or equal operator )
  • = ( equal operator )
  • != ( not equal operator )
  • >= ( greater or equal operator )
  • > ( greater operator )

The supported ternary operators, all these with the same priority 0, are :

  • ? ( Immediate If operator ), returns and executes one of two expressions, depending on the evaluation of an expression. The syntax for is

"expression ? true_part : false_part"

, while it executes and returns the true_part if the expression is true, else it executes and returns the false_part. For instance, the "%0 = 1 ? 'One' : (%0 = 2 ? 'Two' : 'not found')" returns 'One' if the value is 1, 'Two' if the value is 2, and 'not found' for any other value. A n-ary equivalent operation is the case() statement, which is available in newer versions of the component.

The supported n-ary operators are (with priority 5):

  • array (at operator), returns the element from an array giving its index ( 0 base ). The array operator returns empty if the element is found, else the associated element in the collection if it is found. The syntax for array operator is

"expression array (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "month(value)-1 array ('J','F','M','A','M','Jun','J','A','S','O','N','D')" is equivalent with "month(value)-1 case (default:''; 0:'J';1:'F';2:'M';3:'A';4:'M';5:'Jun';6:'J';7:'A';8:'S';9:'O';10:'N';11:'D')".

  • in (include operator), specifies whether an element is found in a set of constant elements. The in operator returns -1 ( True ) if the element is found, else 0 (false) is retrieved. The syntax for in operator is

"expression in (c1,c2,c3,...cn)"

, where the c1, c2, ... are constant elements. The constant elements could be numeric, date or string expressions. For instance the "value in (11,22,33,44,13)" is equivalent with "(expression = 11) or (expression = 22) or (expression = 33) or (expression = 44) or (expression = 13)". The in operator is not a time consuming as the equivalent or version is, so when you have large number of constant elements it is recommended using the in operator. Shortly, if the collection of elements has 1000 elements the in operator could take up to 8 operations in order to find if an element fits the set, else if the or statement is used, it could take up to 1000 operations to check, so by far, the in operator could save time on finding elements within a collection.

  • switch (switch operator), returns the value being found in the collection, or a predefined value if the element is not found (default). The syntax for switch operator is

"expression switch (default,c1,c2,c3,...,cn)"

, where the c1, c2, ... are constant elements, and the default is a constant element being returned when the element is not found in the collection. The constant elements could be numeric, date or string expressions. The equivalent syntax is "%0 = c 1 ? c 1 : ( %0 = c 2 ? c 2 : ( ... ? . : default) )". The switch operator is very similar with the in operator excepts that the first element in the switch is always returned by the statement if the element is not found, while the returned value is the value itself instead -1. For instance, the "%0 switch ('not found',1,4,7,9,11)" gets 1, 4, 7, 9 or 11, or 'not found' for any other value. As the in operator the switch operator uses binary searches for fitting the element, so it is quicker that iif (immediate if operator) alterative.

  • case() (case operator) returns and executes one of n expressions, depending on the evaluation of the expression ( IIF - immediate IF operator is a binary case() operator ). The syntax for case() operator is:

"expression case ([default : default_expression ; ] c1 : expression1 ; c2 : expression2 ; c3 : expression3 ;....)"

If the default part is missing, the case() operator returns the value of the expression if it is not found in the collection of cases ( c1, c2, ...). For instance, if the value of expression is not any of c1, c2, .... the default_expression is executed and returned. If the value of the expression is c1, then the case() operator executes and returns the expression1. The default, c1, c2, c3, ... must be constant elements as numbers, dates or strings. For instance, the "date(shortdate(value)) case (default:0 ; #1/1/2002#:1 ; #2/1/2002#:1; #4/1/2002#:1; #5/1/2002#:1)" indicates that only #1/1/2002#, #2/1/2002#, #4/1/2002# and #5/1/2002# dates returns 1, since the others returns 0. For instance the following sample specifies the hour being non-working for specified dates: "date(shortdate(value)) case(default:0;#4/1/2009# : hour(value) >= 6 and hour(value) <= 12 ; #4/5/2009# : hour(value) >= 7 and hour(value) <= 10 or hour(value) in(15,16,18,22); #5/1/2009# : hour(value) <= 8)" statement indicates the working hours for dates as follows:

    • #4/1/2009#, from hours 06:00 AM to 12:00 PM
    • #4/5/2009#, from hours 07:00 AM to 10:00 AM and hours 03:00PM, 04:00PM, 06:00PM and 10:00PM
    • #5/1/2009#, from hours 12:00 AM to 08:00 AM

The in, switch and case() use binary search to look for elements so they are faster then using iif and or expressions.

Obviously, the priority of the operations inside the expression is determined by ( ) parenthesis and the priority for each operator.

The supported conversion unary operators are:

  • type (unary operator) retrieves the type of the object. For instance type(%0) = 8 specifies the cells that contains string values.

    Here's few predefined types:

    • 0 - empty ( not initialized )
    • 1 - null
    • 2 - short
    • 3 - long
    • 4 - float
    • 5 - double
    • 6 - currency
    • 7 - date
    • 8 - string
    • 9 - object
    • 10 - error
    • 11 - boolean
    • 12 - variant
    • 13 - any
    • 14 - decimal
    • 16 - char
    • 17 - byte
    • 18 - unsigned short
    • 19 - unsigned long
    • 20 - long on 64 bits
    • 21 - unsigned long on 64 bites
  • str (unary operator) converts the expression to a string
  • dbl (unary operator) converts the expression to a number
  • date (unary operator) converts the expression to a date
  • date (unary operator) converts the expression to a date, based on your regional settings
  • dateS (unary operator) converts the string expression to a date using the format MM/DD/YYYY HH:MM:SS

Other known operators for numbers are:

  • int (unary operator) retrieves the integer part of the number
  • round (unary operator) rounds the number ie 1.2 gets 1, since 1.8 gets 2
  • floor (unary operator) returns the largest number with no fraction part that is not greater than the value of its argument
  • abs (unary operator) retrieves the absolute part of the number ie -1 gets 1, 2 gets 2
  • value format 'flags' (binary operator) formats the value with specified flags. If flags is empty, the number is displayed as shown in the field "Number" in the "Regional and Language Options" from the Control Panel. For instance the 1000 format '' displays 1,000.00 for English format, while 1.000,00 is displayed for German format. 1000 format '2|.|3|,' will always displays 1,000.00 no matter of settings in the control panel. If formatting the number fails for some invalid parameter, the value is displayed with no formatting.

    The ' flags' for format operator is a list of values separated by | character such as 'NumDigits|DecimalSep|Grouping|ThousandSep|NegativeOrder|LeadingZero' with the following meanings:

    • NumDigits - specifies the number of fractional digits, If the flag is missing, the field "No. of digits after decimal" from "Regional and Language Options" is using.
    • DecimalSep - specifies the decimal separator. If the flag is missing, the field "Decimal symbol" from "Regional and Language Options" is using.
    • Grouping - indicates the number of digits in each group of numbers to the left of the decimal separator. Values in the range 0 through 9 and 32 are valid. The most significant grouping digit indicates the number of digits in the least significant group immediately to the left of the decimal separator. Each subsequent grouping digit indicates the next significant group of digits to the left of the previous group. If the last value supplied is not 0, the remaining groups repeat the last group. Typical examples of settings for this member are: 0 to group digits as in 123456789.00; 3 to group digits as in 123,456,789.00; and 32 to group digits as in 12,34,56,789.00. If the flag is missing, the field "Digit grouping" from "Regional and Language Options" indicates the grouping flag.
    • ThousandSep - specifies the thousand separator. If the flag is missing, the field "Digit grouping symbol" from "Regional and Language Options" is using.
    • NegativeOrder - indicates the negative number mode. If the flag is missing, the field "Negative number format" from "Regional and Language Options" is using. The valid values are 0, 1, 2, 3 and 4 with the following meanings:
      • 0 - Left parenthesis, number, right parenthesis; for example, (1.1)
      • 1 - Negative sign, number; for example, -1.1
      • 2 - Negative sign, space, number; for example, - 1.1
      • 3 - Number, negative sign; for example, 1.1-
      • 4 - Number, space, negative sign; for example, 1.1 -
    • LeadingZero - indicates if leading zeros should be used in decimal fields. If the flag is missing, the field "Display leading zeros" from "Regional and Language Options" is using. The valid values are 0, 1

Other known operators for strings are:

  • len (unary operator) retrieves the number of characters in the string
  • lower (unary operator) returns a string expression in lowercase letters
  • upper (unary operator) returns a string expression in uppercase letters
  • proper (unary operator) returns from a character expression a string capitalized as appropriate for proper names
  • ltrim (unary operator) removes spaces on the left side of a string
  • rtrim (unary operator) removes spaces on the right side of a string
  • trim (unary operator) removes spaces on both sides of a string
  • startwith (binary operator) specifies whether a string starts with specified string
  • endwith (binary operator) specifies whether a string ends with specified string
  • contains (binary operator) specifies whether a string contains another specified string
  • left (binary operator) retrieves the left part of the string
  • right (binary operator) retrieves the right part of the string
  • a mid b (binary operator) retrieves the middle part of the string a starting from b ( 1 means first position, and so on )
  • a count b (binary operator) retrieves the number of occurrences of the b in a
  • a replace b with c (double binary operator) replaces in a the b with c, and gets the result.
  • a split b, splits the a using the separator b, and returns an array. For instance, the "weekday(value) array 'Sun Mon Thu Wed Thu Fri Sat' split ' '" gets the weekday as string. This operator can be used with the array

Other known operators for dates are:

  • time (unary operator) retrieves the time of the date in string format, as specified in the control's panel.
  • timeF (unary operator) retrieves the time of the date in string format, as "HH:MM:SS". For instance the timeF(1:23 PM) returns "13:23:00"
  • shortdate (unary operator) formats a date as a date string using the short date format, as specified in the control's panel.
  • shortdateF (unary operator) formats a date as a date string using the "MM/DD/YYYY" format. For instance the shortdateF(December 31, 1971 11:00 AM) returns "12/31/1971".
  • dateF (unary operator) converts the date expression to a string expression in "MM/DD/YYYY HH:MM:SS" format.
  • longdate (unary operator) formats a date as a date string using the long date format, as specified in the control's panel.
  • year (unary operator) retrieves the year of the date (100,...,9999)
  • month (unary operator) retrieves the month of the date ( 1, 2,...,12 )
  • day (unary operator) retrieves the day of the date ( 1, 2,...,31 )
  • yearday (unary operator) retrieves the number of the day in the year, or the days since January 1st ( 0, 1,...,365 )
  • weekday (unary operator) retrieves the number of days since Sunday ( 0 - Sunday, 1 - Monday,..., 6 - Saturday )
  • hour (unary operator) retrieves the hour of the date ( 0, 1, ..., 23 )
  • min (unary operator) retrieves the minute of the date ( 0, 1, ..., 59 )
  • sec (unary operator) retrieves the second of the date ( 0, 1, ..., 59 )

Other known operators for auto-numbering are:

  • number index 'format', indicates the index of the item. The first added item has the index 0, the second added item has the index 1, and so on. The index of the item remains the same even if the order of the items is changed by sorting. For instance, 1 index '' gets the index of the item starting from 1 while 100 index '' gets the index of the item starting from 100. The number indicates the starting index, while the format is a set of characters to be used for specifying the index. If the format is missing, the index of the item is formatted as numbers. For instance: 1 index 'A-Z' gets the index as A, B, C... Z, BA, BB, ... BZ, CA, ... . The 1 index 'abc' gives the index as: a,b,c,ba,bb,bc,ca,cb,cc,.... You can use other number formatting function to format the returned value. For instance "1 index '' format '0||2|:'" gets the numbers grouped by 2 digits and separated by : character.

    In the following screen shot the FormatColumn("Col 1") = "1 index ''"

    In the following screen shot the FormatColumn("Col 1") = "1 index 'A-Z'"

  • number apos 'format' indicates the absolute position of the item. The first displayed item has the absolute position 0 ( scrolling position on top ), the next visible item is 1, and so on. The number indicates the starting position, while the format is a set of characters to be used for specifying the position. For instance, 1 apos '' gets the absolute position of the item starting from 1, while 100 apos '' gets the position of the item starting from 100. If the format is missing, the absolute position of the item is formatted as numbers.

    In the following screen shot the FormatColumn("Col 1") = "1 apos ''"

    In the following screen shot the FormatColumn("Col 1") = "1 apos 'A-Z'"

  • number pos 'format' indicates the relative position of the item. The relative position is the position of the visible child item in the parent children collection. The number indicates the starting position, while the format is a set of characters to be used for specifying the position. For instance, 1 pos '' gets the relative position of the item starting from 1, while 100 pos '' gets the relative position of the item starting from 100. If the format is missing, the relative position of the item is formatted as numbers. The difference between pos and opos can be seen while filtering the items in the control. For instance, if no filter is applied to the control, the pos and opos gets the same result. Instead, if the filter is applied, the opos gets the position of the item in the list of unfiltered items, while the pos gets the position of the item in the filtered list.

    In the following screen shot the FormatColumn("Col 2") = "'<b>' + 1 pos '' + '</b> ' + value"

    In the following screen shot the FormatColumn("Col 2") = "'<b>' + 1 pos 'A-Z' + '</b> ' + value"

  • number opos 'format' indicates the relative old position of the item. The relative old position is the position of the child item in the parent children collection. The number indicates the starting position, while the format is a set of characters to be used for specifying the position.For instance, 1 pos '' gets the relative position of the item starting from 1, while 100 pos '' gets the relative position of the item starting from 100. If the format is missing, the relative position of the item is formatted as numbers. The difference between pos and opos can be seen while filtering the items in the control. For instance, if no filter is applied to the control, the pos and opos gets the same result. Instead, if the filter is applied, the opos gets the position of the item in the list of unfiltered items, while the pos gets the position of the item in the filtered list.
  • number rpos 'format' indicates the relative recursive position of the item. The recursive position indicates the position of the parent items too. The relative position is the position of the visible child item in the parent children collection. The number indicates the starting position, while the format is of the following type "delimiter|format|format|...". If the format is missing, the delimiter is . character, and the positions are formatted as numbers. The format is applied consecutively to each parent item, from root to item itself.

    In the following screen shot the FormatColumn("Col 1") = "1 rpos ''"

    In the following screen shot the FormatColumn("Col 1") = "1 rpos ':|A-Z'"

    In the following screen shot the FormatColumn("Col 1") = "1 rpos '.|A-Z|'"

    In the following screen shot the FormatColumn("Col 1") = "1 apos ''" and FormatColumn("Col 2") = "'<b><font Tahoma;10>' + 1 rpos '.|A-Z|' + '</font></b> ' + value"

  • number rindex 'format', number rapos 'format' and number ropos 'format' are working similar with number rpos 'format', excepts that they gives the index, absolute position, or the old child position.

The expression supports also immediate if ( similar with iif in visual basic, or ? : in C++ ) ie cond ? value_true : value_false, which means that once that cond is true the value_true is used, else the value_false is used. Also, it supports variables, up to 10 from 0 to 9. For instance, 0:="Abc" means that in the variable 0 is "Abc", and =:0 means retrieves the value of the variable 0. You can use variables to avoid computing several times the same thing.


property HasButton

property Item.HasButton(ColIndex as Variant) as Boolean
Retrieves or sets a value indicating whether the cell has a button associated or not.

Type | Description
ColIndex as Variant | A Long expression that indicates the index of the column, or a string expression that specifies the name of the column, where to display the cell's button.
Boolean | A Boolean expression that specifies whether the cell's button is visible or hidden.
By default, the cell's button is hidden. The HasButton property specifies whether the cell's button is visible or hidden. The FaceTreeButtonClick event occurs once the user clicks a button. The Def(exCellHasButton) property of the Column, assign buttons to all cells in the column. The HasCheckBox property specifies whether the cell displays a check box. The HasRadioButton property specifies whether the cell displays a radio-button. Use the RadioGroup property to group more radio buttons to a single group.


property HasCheckBox

property Item.HasCheckBox(ColIndex as Variant) as Boolean
Retrieves or sets a value indicating whether the cell has a checkbox associated or not.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to display/hide the check-box.
Boolean | A Boolean expression that specifies whether the cell's checkbox is visible or hidden.
The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed.

How can I display a list of check-boxes?

VBA (MS Access, Excell...)

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Check").Alignment = 0
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

VB6

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exNoLines
        .Columns.Add("Check").Alignment = LeftAlignment
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

VB.NET

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub Extreecube1_FaceTreeStateChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles Extreecube1.FaceTreeStateChanged
    With Extreecube1
        With .FrontFace.FaceTree.get_ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .get_State(0) )
        End With
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Check").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            .Add("Check <b>1").set_HasCheckBox(0,True)
            .Add("Check <b>2").set_HasCheckBox(0,True)
            With .Add("Check <b>3")
                .set_HasCheckBox(0,True)
                .set_State(0,1)
            End With
            .Add("Check <b>4").set_HasCheckBox(0,True)
        End With
    End With
End With

VB.NET for /COM

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub AxTreeCube1_FaceTreeStateChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent) Handles AxTreeCube1.FaceTreeStateChanged
    With AxTreeCube1
        With .FrontFace.FaceTree.ItemByIndex(e.item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Check").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

C++

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void OnFaceTreeStateChangedTreeCube1(LPDISPATCH   Tree,long   Item,long   Column)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    EXTREECUBELib::IItemPtr var_Item = spTreeCube1->GetFrontFace()->GetFaceTree()->GetItemByIndex(Item);
        OutputDebugStringW( L"State" );
        OutputDebugStringW( _bstr_t(var_Item->GetState(long(0))) );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutItemPadding(16);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exNoLines);
    var_FaceTree->GetColumns()->Add(L"Check")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        var_Items->Add("Check <b>1")->PutHasCheckBox(long(0),VARIANT_TRUE);
        var_Items->Add("Check <b>2")->PutHasCheckBox(long(0),VARIANT_TRUE);
        EXTREECUBELib::IItemPtr var_Item = var_Items->Add("Check <b>3");
            var_Item->PutHasCheckBox(long(0),VARIANT_TRUE);
            var_Item->PutState(long(0),1);
        var_Items->Add("Check <b>4")->PutHasCheckBox(long(0),VARIANT_TRUE);

C++ Builder

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeStateChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
    Extreecubelib_tlb::IItemPtr var_Item = TreeCube1->FrontFace->FaceTree->get_ItemByIndex(Item);
        OutputDebugString( L"State" );
        OutputDebugString( PChar(var_Item->get_State(TVariant(0))) );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->ItemPadding = 16;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exNoLines;
    var_FaceTree->Columns->Add(L"Check")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        var_Items->Add(TVariant("Check <b>1"))->set_HasCheckBox(TVariant(0),true);
        var_Items->Add(TVariant("Check <b>2"))->set_HasCheckBox(TVariant(0),true);
        Extreecubelib_tlb::IItemPtr var_Item = var_Items->Add(TVariant("Check <b>3"));
            var_Item->set_HasCheckBox(TVariant(0),true);
            var_Item->set_State(TVariant(0),1);
        var_Items->Add(TVariant("Check <b>4"))->set_HasCheckBox(TVariant(0),true);

C#

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void extreecube1_FaceTreeStateChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
    exontrol.EXTREECUBELib.Item var_Item = extreecube1.FrontFace.FaceTree.get_ItemByIndex(Item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.extreecube1.FaceTreeStateChanged += new exontrol.EXTREECUBELib.exg2antt.FaceTreeStateChangedEventHandler(this.extreecube1_FaceTreeStateChanged);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Check").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        var_Items.Add("Check <b>1").set_HasCheckBox(0,true);
        var_Items.Add("Check <b>2").set_HasCheckBox(0,true);
        exontrol.EXTREECUBELib.Item var_Item = var_Items.Add("Check <b>3");
            var_Item.set_HasCheckBox(0,true);
            var_Item.set_State(0,1);
        var_Items.Add("Check <b>4").set_HasCheckBox(0,true);

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeStateChanged(Tree,Item,Column)" LANGUAGE="JScript">
    var var_Item = TreeCube1.FrontFace.FaceTree.ItemByIndex(Item);
        alert( "State" );
        alert( var_Item.State(0) );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.ItemPadding = 16;
        var_FaceTree.DrawGridLines = 0;
        var_FaceTree.Columns.Add("Check").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var_Items.Add("Check <b>1").HasCheckBox(0) = true;
            var_Items.Add("Check <b>2").HasCheckBox(0) = true;
            var var_Item = var_Items.Add("Check <b>3");
                var_Item.HasCheckBox(0) = true;
                var_Item.State(0) = 1;
            var_Items.Add("Check <b>4").HasCheckBox(0) = true;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeStateChanged(Tree,Item,Column)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            alert( "State" )
            alert( .State(0) )
        End With
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .HeaderVisible = False
            .ItemPadding = 16
            .DrawGridLines = 0
            .Columns.Add("Check").Alignment = 0
            With .Items
                .Add("Check <b>1").HasCheckBox(0) = True
                .Add("Check <b>2").HasCheckBox(0) = True
                With .Add("Check <b>3")
                    .HasCheckBox(0) = True
                    .State(0) = 1
                End With
                .Add("Check <b>4").HasCheckBox(0) = True
            End With
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void axTreeCube1_FaceTreeStateChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent e)
{
    EXTREECUBELib.Item var_Item = axTreeCube1.FrontFace.FaceTree.get_ItemByIndex(e.item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.axTreeCube1.FaceTreeStateChanged += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEventHandler(this.axTreeCube1_FaceTreeStateChanged);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Check").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        var_Items.Add("Check <b>1").set_HasCheckBox(0,true);
        var_Items.Add("Check <b>2").set_HasCheckBox(0,true);
        EXTREECUBELib.Item var_Item = var_Items.Add("Check <b>3");
            var_Item.set_HasCheckBox(0,true);
            var_Item.set_State(0,1);
        var_Items.Add("Check <b>4").set_HasCheckBox(0,true);

X++ (Dynamics Ax 2009)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void onEvent_FaceTreeStateChanged(COM   _Tree,int   _Item,int   _Column)
{
    COM com_Item;
    anytype var_Item;
    ;
    var_Item = COM::createFromObject(extreecube1.FrontFace().FaceTree()).ItemByIndex(_Item); com_Item = var_Item;
        print( "State" );
        print( com_Item.State(COMVariant::createFromInt(0)) );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Item1,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Item1,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.ItemPadding(16);
        com_FaceTree.DrawGridLines(0/*exNoLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Check"); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Check <b>1")); com_Item = var_Item;
            com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
            var_Item = COM::createFromObject(com_Items.Add("Check <b>2")); com_Item = var_Item;
            com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
            var_Item = com_Items.Add("Check <b>3"); com_Item = var_Item;
                com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
                com_Item.State(COMVariant::createFromInt(0),1);
            var_Item1 = COM::createFromObject(com_Items.Add("Check <b>4")); com_Item1 = var_Item1;
            com_Item1.HasCheckBox(COMVariant::createFromInt(0),true);
}

Delphi 8 (.NET only)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeStateChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent);
begin
    with AxTreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[e.item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[TObject(0)] );
        end;
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exNoLines;
        Columns.Add('Check').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            Add('Check <b>1').HasCheckBox[TObject(0)] := True;
            Add('Check <b>2').HasCheckBox[TObject(0)] := True;
            with Add('Check <b>3') do
            begin
                HasCheckBox[TObject(0)] := True;
                State[TObject(0)] := 1;
            end;
            Add('Check <b>4').HasCheckBox[TObject(0)] := True;
        end;
    end;
end

Delphi (standard)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TForm1.TreeCube1FaceTreeStateChanged(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
    with TreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[Item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[OleVariant(0)] );
        end;
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib_TLB.exNoLines;
        Columns.Add('Check').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            Add('Check <b>1').HasCheckBox[OleVariant(0)] := True;
            Add('Check <b>2').HasCheckBox[OleVariant(0)] := True;
            with Add('Check <b>3') do
            begin
                HasCheckBox[OleVariant(0)] := True;
                State[OleVariant(0)] := 1;
            end;
            Add('Check <b>4').HasCheckBox[OleVariant(0)] := True;
        end;
    end;
end

VFP

*** FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type. ***
LPARAMETERS Tree,Item,Column
    with thisform.TreeCube1
        with .FrontFace.FaceTree.ItemByIndex(Item)
            DEBUGOUT( "State" )
            DEBUGOUT( .State(0) )
        endwith
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .HeaderVisible = .F.
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Check").Alignment = 0
        with .Items
            .Add("Check <b>1").HasCheckBox(0) = .T.
            .Add("Check <b>2").HasCheckBox(0) = .T.
            with .Add("Check <b>3")
                .HasCheckBox(0) = .T.
                .State(0) = 1
            endwith
            .Add("Check <b>4").HasCheckBox(0) = .T.
        endwith
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeStateChanged = class::nativeObject_FaceTreeStateChanged
endwith
*/
// Notifies that a cell changes its state into a face of tree type.
function nativeObject_FaceTreeStateChanged(Tree,Item,Column)
    local var_Item
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? Str(var_Item.State(0))
return

local oTreeCube,var_Column,var_FaceTree,var_Item,var_Item1,var_Item2,var_Item3,var_Items

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    // var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Check")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        // var_Items.Add("Check <b>1").HasCheckBox(0) = true
        var_Item = var_Items.Add("Check <b>1")
        with (oTreeCube)
            TemplateDef = [dim var_Item]
            TemplateDef = var_Item
            Template = [var_Item.HasCheckBox(0) = True]
        endwith
        // var_Items.Add("Check <b>2").HasCheckBox(0) = true
        var_Item1 = var_Items.Add("Check <b>2")
        with (oTreeCube)
            TemplateDef = [dim var_Item1]
            TemplateDef = var_Item1
            Template = [var_Item1.HasCheckBox(0) = True]
        endwith
        var_Item2 = var_Items.Add("Check <b>3")
            // var_Item2.HasCheckBox(0) = true
            with (oTreeCube)
                TemplateDef = [dim var_Item2]
                TemplateDef = var_Item2
                Template = [var_Item2.HasCheckBox(0) = True]
            endwith
            // var_Item2.State(0) = 1
            with (oTreeCube)
                TemplateDef = [dim var_Item2]
                TemplateDef = var_Item2
                Template = [var_Item2.State(0) = 1]
            endwith
        // var_Items.Add("Check <b>4").HasCheckBox(0) = true
        var_Item3 = var_Items.Add("Check <b>4")
        with (oTreeCube)
            TemplateDef = [dim var_Item3]
            TemplateDef = var_Item3
            Template = [var_Item3.HasCheckBox(0) = True]
        endwith

XBasic (Alpha Five)

' Notifies that a cell changes its state into a face of tree type.
function FaceTreeStateChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
    Dim var_Item as P
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? var_Item.State(0)
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Item as local
Dim var_Item1 as local
Dim var_Item2 as P
Dim var_Item3 as local
Dim var_Items as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    ' var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Check")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        ' var_Items.Add("Check <b>1").HasCheckBox(0) = .t.
        var_Item = var_Items.Add("Check <b>1")
        oTreeCube.TemplateDef = "dim var_Item"
        oTreeCube.TemplateDef = var_Item
        oTreeCube.Template = "var_Item.HasCheckBox(0) = True"

        ' var_Items.Add("Check <b>2").HasCheckBox(0) = .t.
        var_Item1 = var_Items.Add("Check <b>2")
        oTreeCube.TemplateDef = "dim var_Item1"
        oTreeCube.TemplateDef = var_Item1
        oTreeCube.Template = "var_Item1.HasCheckBox(0) = True"

        var_Item2 = var_Items.Add("Check <b>3")
            ' var_Item2.HasCheckBox(0) = .t.
            oTreeCube.TemplateDef = "dim var_Item2"
            oTreeCube.TemplateDef = var_Item2
            oTreeCube.Template = "var_Item2.HasCheckBox(0) = True"

            ' var_Item2.State(0) = 1
            oTreeCube.TemplateDef = "dim var_Item2"
            oTreeCube.TemplateDef = var_Item2
            oTreeCube.Template = "var_Item2.State(0) = 1"

        ' var_Items.Add("Check <b>4").HasCheckBox(0) = .t.
        var_Item3 = var_Items.Add("Check <b>4")
        oTreeCube.TemplateDef = "dim var_Item3"
        oTreeCube.TemplateDef = var_Item3
        oTreeCube.Template = "var_Item3.HasCheckBox(0) = True"

Visual Objects

METHOD OCX_Exontrol1FaceTreeStateChanged(Tree,Item,Column) CLASS MainDialog
    // FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
    local var_Item as IItem
    var_Item := oDCOCX_Exontrol1:FrontFace:FaceTree:[ItemByIndex,Item]
        OutputDebugString(String2Psz( "State" ))
        OutputDebugString(String2Psz( AsString(var_Item:[State,0]) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Item as IItem
local var_Items as IItems

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:HeaderVisible := false
    var_FaceTree:ItemPadding := 16
    var_FaceTree:DrawGridLines := exNoLines
    var_FaceTree:Columns:Add("Check"):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items:Add("Check <b>1"):[HasCheckBox,0] := true
        var_Items:Add("Check <b>2"):[HasCheckBox,0] := true
        var_Item := var_Items:Add("Check <b>3")
            var_Item:[HasCheckBox,0] := true
            var_Item:[State,0] := 1
        var_Items:Add("Check <b>4"):[HasCheckBox,0] := true

PowerBuilder

/*begin event FaceTreeStateChanged(oleobject  Tree,long  Item,long  Column) - Notifies that a cell changes its state into a face of tree type.*/
/*
    OleObject var_Item
    oTreeCube = ole_1.Object
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        MessageBox("Information",string( "State" ))
        MessageBox("Information",string( String(var_Item.State(0)) ))
*/
/*end event FaceTreeStateChanged*/

OleObject oTreeCube,var_FaceTree,var_Item,var_Items

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items.Add("Check <b>1").HasCheckBox(0,true)
        var_Items.Add("Check <b>2").HasCheckBox(0,true)
        var_Item = var_Items.Add("Check <b>3")
            var_Item.HasCheckBox(0,true)
            var_Item.State(0,1)
        var_Items.Add("Check <b>4").HasCheckBox(0,true)

Visual DataFlex

// Notifies that a cell changes its state into a face of tree type.
Procedure OnComFaceTreeStateChanged Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeStateChanged llTree llItem llColumn
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComFaceTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voItem
            Get ComItemByIndex of hoFaceTree llItem to voItem
            Handle hoItem
            Get Create (RefClass(cComItem)) to hoItem
            Set pvComObject of hoItem to voItem
                Showln "State" (ComState(hoItem,0))
            Send Destroy to hoItem
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace1
    Get ComFrontFace to voFace1
    Handle hoFace1
    Get Create (RefClass(cComFace)) to hoFace1
    Set pvComObject of hoFace1 to voFace1
        Variant voFaceTree1
        Get ComCreateTree of hoFace1 to voFaceTree1
        Handle hoFaceTree1
        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
        Set pvComObject of hoFaceTree1 to voFaceTree1
            Set ComHeaderVisible of hoFaceTree1 to False
            Set ComItemPadding of hoFaceTree1 to 16
            Set ComDrawGridLines of hoFaceTree1 to OLEexNoLines
            Variant voColumns
            Get ComColumns of hoFaceTree1 to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Check" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree1 to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem1
                Get ComAdd of hoItems "Check <b>1" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Set ComHasCheckBox of hoItem1 0 to True
                Send Destroy to hoItem1
                Variant voItem2
                Get ComAdd of hoItems "Check <b>2" to voItem2
                Handle hoItem2
                Get Create (RefClass(cComItem)) to hoItem2
                Set pvComObject of hoItem2 to voItem2
                    Set ComHasCheckBox of hoItem2 0 to True
                Send Destroy to hoItem2
                Variant voItem3
                Get ComAdd of hoItems "Check <b>3" to voItem3
                Handle hoItem3
                Get Create (RefClass(cComItem)) to hoItem3
                Set pvComObject of hoItem3 to voItem3
                    Set ComHasCheckBox of hoItem3 0 to True
                    Set ComState of hoItem3 0 to 1
                Send Destroy to hoItem3
                Variant voItem4
                Get ComAdd of hoItems "Check <b>4" to voItem4
                Handle hoItem4
                Get Create (RefClass(cComItem)) to hoItem4
                Set pvComObject of hoItem4 to voItem4
                    Set ComHasCheckBox of hoItem4 0 to True
                Send Destroy to hoItem4
            Send Destroy to hoItems
        Send Destroy to hoFaceTree1
    Send Destroy to hoFace1
End_Procedure

XBase++

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
    LOCAL oItem
    oItem := oTreeCube:FrontFace():FaceTree():ItemByIndex(Item)
        DevOut( "State" )
        DevOut( Transform(oItem:State(0),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItem
    LOCAL oItems
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:HeaderVisible := .F.
            oFaceTree:ItemPadding := 16
            oFaceTree:DrawGridLines := 0/*exNoLines*/
            oFaceTree:Columns():Add("Check"):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems:Add("Check <b>1"):SetProperty("HasCheckBox",0,.T.)
                oItems:Add("Check <b>2"):SetProperty("HasCheckBox",0,.T.)
                oItem := oItems:Add("Check <b>3")
                    oItem:SetProperty("HasCheckBox",0,.T.)
                    oItem:SetProperty("State",0,1)
                oItems:Add("Check <b>4"):SetProperty("HasCheckBox",0,.T.)

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property HasRadioButton

property Item.HasRadioButton(ColIndex as Variant) as Boolean
Retrieves or sets a value indicating whether the cell has a radiobutton associated or not.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to display/hide the radio-button.
Boolean | A Boolean expression that specifies whether the cell's radio-button is visible or hidden.

By default, the HasRadioButton property is False. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column.

How can I display two lists of radio-buttons?

VBA (MS Access, Excell...)

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Radio").Alignment = 0
        With .Items
            With .Add("Group A")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                        .State(0) = 1
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                End With
                .Expanded = True
            End With
            With .Add("Group B")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                        .State(0) = 1
                    End With
                End With
                .Expanded = True
            End With
        End With
    End With
End With

VB6

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exNoLines
        .Columns.Add("Radio").Alignment = LeftAlignment
        With .Items
            With .Add("Group A")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                        .State(0) = 1
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                End With
                .Expanded = True
            End With
            With .Add("Group B")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                        .State(0) = 1
                    End With
                End With
                .Expanded = True
            End With
        End With
    End With
End With

VB.NET

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub Extreecube1_FaceTreeStateChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles Extreecube1.FaceTreeStateChanged
    With Extreecube1
        With .FrontFace.FaceTree.get_ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .get_State(0) )
        End With
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Radio").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Group A")
                With .Items
                    With .Add("Radio <b>1")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1234)
                    End With
                    With .Add("Radio <b>2")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1234)
                        .set_State(0,1)
                    End With
                    With .Add("Radio <b>3")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1234)
                    End With
                End With
                .Expanded = True
            End With
            With .Add("Group B")
                With .Items
                    With .Add("Radio <b>1")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1235)
                    End With
                    With .Add("Radio <b>2")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1235)
                    End With
                    With .Add("Radio <b>3")
                        .set_HasRadioButton(0,True)
                        .set_RadioGroup(0,1235)
                        .set_State(0,1)
                    End With
                End With
                .Expanded = True
            End With
        End With
    End With
End With

VB.NET for /COM

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub AxTreeCube1_FaceTreeStateChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent) Handles AxTreeCube1.FaceTreeStateChanged
    With AxTreeCube1
        With .FrontFace.FaceTree.ItemByIndex(e.item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Radio").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Group A")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                        .State(0) = 1
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1234
                    End With
                End With
                .Expanded = True
            End With
            With .Add("Group B")
                With .Items
                    With .Add("Radio <b>1")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>2")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                    End With
                    With .Add("Radio <b>3")
                        .HasRadioButton(0) = True
                        .RadioGroup(0) = 1235
                        .State(0) = 1
                    End With
                End With
                .Expanded = True
            End With
        End With
    End With
End With

C++

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void OnFaceTreeStateChangedTreeCube1(LPDISPATCH   Tree,long   Item,long   Column)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    EXTREECUBELib::IItemPtr var_Item = spTreeCube1->GetFrontFace()->GetFaceTree()->GetItemByIndex(Item);
        OutputDebugStringW( L"State" );
        OutputDebugStringW( _bstr_t(var_Item->GetState(long(0))) );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutItemPadding(16);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exNoLines);
    var_FaceTree->GetColumns()->Add(L"Radio")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemPtr var_Item = var_Items->Add("Group A");
            EXTREECUBELib::IItemsPtr var_Items1 = var_Item->GetItems();
                EXTREECUBELib::IItemPtr var_Item1 = var_Items1->Add("Radio <b>1");
                    var_Item1->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item1->PutRadioGroup(long(0),1234);
                EXTREECUBELib::IItemPtr var_Item2 = var_Items1->Add("Radio <b>2");
                    var_Item2->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item2->PutRadioGroup(long(0),1234);
                    var_Item2->PutState(long(0),1);
                EXTREECUBELib::IItemPtr var_Item3 = var_Items1->Add("Radio <b>3");
                    var_Item3->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item3->PutRadioGroup(long(0),1234);
            var_Item->PutExpanded(VARIANT_TRUE);
        EXTREECUBELib::IItemPtr var_Item4 = var_Items->Add("Group B");
            EXTREECUBELib::IItemsPtr var_Items2 = var_Item4->GetItems();
                EXTREECUBELib::IItemPtr var_Item5 = var_Items2->Add("Radio <b>1");
                    var_Item5->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item5->PutRadioGroup(long(0),1235);
                EXTREECUBELib::IItemPtr var_Item6 = var_Items2->Add("Radio <b>2");
                    var_Item6->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item6->PutRadioGroup(long(0),1235);
                EXTREECUBELib::IItemPtr var_Item7 = var_Items2->Add("Radio <b>3");
                    var_Item7->PutHasRadioButton(long(0),VARIANT_TRUE);
                    var_Item7->PutRadioGroup(long(0),1235);
                    var_Item7->PutState(long(0),1);
            var_Item4->PutExpanded(VARIANT_TRUE);

C++ Builder

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeStateChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
    Extreecubelib_tlb::IItemPtr var_Item = TreeCube1->FrontFace->FaceTree->get_ItemByIndex(Item);
        OutputDebugString( L"State" );
        OutputDebugString( PChar(var_Item->get_State(TVariant(0))) );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->ItemPadding = 16;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exNoLines;
    var_FaceTree->Columns->Add(L"Radio")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemPtr var_Item = var_Items->Add(TVariant("Group A"));
            Extreecubelib_tlb::IItemsPtr var_Items1 = var_Item->Items;
                Extreecubelib_tlb::IItemPtr var_Item1 = var_Items1->Add(TVariant("Radio <b>1"));
                    var_Item1->set_HasRadioButton(TVariant(0),true);
                    var_Item1->set_RadioGroup(TVariant(0),1234);
                Extreecubelib_tlb::IItemPtr var_Item2 = var_Items1->Add(TVariant("Radio <b>2"));
                    var_Item2->set_HasRadioButton(TVariant(0),true);
                    var_Item2->set_RadioGroup(TVariant(0),1234);
                    var_Item2->set_State(TVariant(0),1);
                Extreecubelib_tlb::IItemPtr var_Item3 = var_Items1->Add(TVariant("Radio <b>3"));
                    var_Item3->set_HasRadioButton(TVariant(0),true);
                    var_Item3->set_RadioGroup(TVariant(0),1234);
            var_Item->Expanded = true;
        Extreecubelib_tlb::IItemPtr var_Item4 = var_Items->Add(TVariant("Group B"));
            Extreecubelib_tlb::IItemsPtr var_Items2 = var_Item4->Items;
                Extreecubelib_tlb::IItemPtr var_Item5 = var_Items2->Add(TVariant("Radio <b>1"));
                    var_Item5->set_HasRadioButton(TVariant(0),true);
                    var_Item5->set_RadioGroup(TVariant(0),1235);
                Extreecubelib_tlb::IItemPtr var_Item6 = var_Items2->Add(TVariant("Radio <b>2"));
                    var_Item6->set_HasRadioButton(TVariant(0),true);
                    var_Item6->set_RadioGroup(TVariant(0),1235);
                Extreecubelib_tlb::IItemPtr var_Item7 = var_Items2->Add(TVariant("Radio <b>3"));
                    var_Item7->set_HasRadioButton(TVariant(0),true);
                    var_Item7->set_RadioGroup(TVariant(0),1235);
                    var_Item7->set_State(TVariant(0),1);
            var_Item4->Expanded = true;

C#

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void extreecube1_FaceTreeStateChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
    exontrol.EXTREECUBELib.Item var_Item = extreecube1.FrontFace.FaceTree.get_ItemByIndex(Item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.extreecube1.FaceTreeStateChanged += new exontrol.EXTREECUBELib.exg2antt.FaceTreeStateChangedEventHandler(this.extreecube1_FaceTreeStateChanged);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Radio").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Item var_Item = var_Items.Add("Group A");
            exontrol.EXTREECUBELib.Items var_Items1 = var_Item.Items;
                exontrol.EXTREECUBELib.Item var_Item1 = var_Items1.Add("Radio <b>1");
                    var_Item1.set_HasRadioButton(0,true);
                    var_Item1.set_RadioGroup(0,1234);
                exontrol.EXTREECUBELib.Item var_Item2 = var_Items1.Add("Radio <b>2");
                    var_Item2.set_HasRadioButton(0,true);
                    var_Item2.set_RadioGroup(0,1234);
                    var_Item2.set_State(0,1);
                exontrol.EXTREECUBELib.Item var_Item3 = var_Items1.Add("Radio <b>3");
                    var_Item3.set_HasRadioButton(0,true);
                    var_Item3.set_RadioGroup(0,1234);
            var_Item.Expanded = true;
        exontrol.EXTREECUBELib.Item var_Item4 = var_Items.Add("Group B");
            exontrol.EXTREECUBELib.Items var_Items2 = var_Item4.Items;
                exontrol.EXTREECUBELib.Item var_Item5 = var_Items2.Add("Radio <b>1");
                    var_Item5.set_HasRadioButton(0,true);
                    var_Item5.set_RadioGroup(0,1235);
                exontrol.EXTREECUBELib.Item var_Item6 = var_Items2.Add("Radio <b>2");
                    var_Item6.set_HasRadioButton(0,true);
                    var_Item6.set_RadioGroup(0,1235);
                exontrol.EXTREECUBELib.Item var_Item7 = var_Items2.Add("Radio <b>3");
                    var_Item7.set_HasRadioButton(0,true);
                    var_Item7.set_RadioGroup(0,1235);
                    var_Item7.set_State(0,1);
            var_Item4.Expanded = true;

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeStateChanged(Tree,Item,Column)" LANGUAGE="JScript">
    var var_Item = TreeCube1.FrontFace.FaceTree.ItemByIndex(Item);
        alert( "State" );
        alert( var_Item.State(0) );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.ItemPadding = 16;
        var_FaceTree.DrawGridLines = 0;
        var_FaceTree.Columns.Add("Radio").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Item = var_Items.Add("Group A");
                var var_Items1 = var_Item.Items;
                    var var_Item1 = var_Items1.Add("Radio <b>1");
                        var_Item1.HasRadioButton(0) = true;
                        var_Item1.RadioGroup(0) = 1234;
                    var var_Item2 = var_Items1.Add("Radio <b>2");
                        var_Item2.HasRadioButton(0) = true;
                        var_Item2.RadioGroup(0) = 1234;
                        var_Item2.State(0) = 1;
                    var var_Item3 = var_Items1.Add("Radio <b>3");
                        var_Item3.HasRadioButton(0) = true;
                        var_Item3.RadioGroup(0) = 1234;
                var_Item.Expanded = true;
            var var_Item4 = var_Items.Add("Group B");
                var var_Items2 = var_Item4.Items;
                    var var_Item5 = var_Items2.Add("Radio <b>1");
                        var_Item5.HasRadioButton(0) = true;
                        var_Item5.RadioGroup(0) = 1235;
                    var var_Item6 = var_Items2.Add("Radio <b>2");
                        var_Item6.HasRadioButton(0) = true;
                        var_Item6.RadioGroup(0) = 1235;
                    var var_Item7 = var_Items2.Add("Radio <b>3");
                        var_Item7.HasRadioButton(0) = true;
                        var_Item7.RadioGroup(0) = 1235;
                        var_Item7.State(0) = 1;
                var_Item4.Expanded = true;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeStateChanged(Tree,Item,Column)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            alert( "State" )
            alert( .State(0) )
        End With
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .HeaderVisible = False
            .ItemPadding = 16
            .DrawGridLines = 0
            .Columns.Add("Radio").Alignment = 0
            With .Items
                With .Add("Group A")
                    With .Items
                        With .Add("Radio <b>1")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1234
                        End With
                        With .Add("Radio <b>2")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1234
                            .State(0) = 1
                        End With
                        With .Add("Radio <b>3")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1234
                        End With
                    End With
                    .Expanded = True
                End With
                With .Add("Group B")
                    With .Items
                        With .Add("Radio <b>1")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1235
                        End With
                        With .Add("Radio <b>2")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1235
                        End With
                        With .Add("Radio <b>3")
                            .HasRadioButton(0) = True
                            .RadioGroup(0) = 1235
                            .State(0) = 1
                        End With
                    End With
                    .Expanded = True
                End With
            End With
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void axTreeCube1_FaceTreeStateChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent e)
{
    EXTREECUBELib.Item var_Item = axTreeCube1.FrontFace.FaceTree.get_ItemByIndex(e.item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.axTreeCube1.FaceTreeStateChanged += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEventHandler(this.axTreeCube1_FaceTreeStateChanged);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Radio").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Item var_Item = var_Items.Add("Group A");
            EXTREECUBELib.Items var_Items1 = var_Item.Items;
                EXTREECUBELib.Item var_Item1 = var_Items1.Add("Radio <b>1");
                    var_Item1.set_HasRadioButton(0,true);
                    var_Item1.set_RadioGroup(0,1234);
                EXTREECUBELib.Item var_Item2 = var_Items1.Add("Radio <b>2");
                    var_Item2.set_HasRadioButton(0,true);
                    var_Item2.set_RadioGroup(0,1234);
                    var_Item2.set_State(0,1);
                EXTREECUBELib.Item var_Item3 = var_Items1.Add("Radio <b>3");
                    var_Item3.set_HasRadioButton(0,true);
                    var_Item3.set_RadioGroup(0,1234);
            var_Item.Expanded = true;
        EXTREECUBELib.Item var_Item4 = var_Items.Add("Group B");
            EXTREECUBELib.Items var_Items2 = var_Item4.Items;
                EXTREECUBELib.Item var_Item5 = var_Items2.Add("Radio <b>1");
                    var_Item5.set_HasRadioButton(0,true);
                    var_Item5.set_RadioGroup(0,1235);
                EXTREECUBELib.Item var_Item6 = var_Items2.Add("Radio <b>2");
                    var_Item6.set_HasRadioButton(0,true);
                    var_Item6.set_RadioGroup(0,1235);
                EXTREECUBELib.Item var_Item7 = var_Items2.Add("Radio <b>3");
                    var_Item7.set_HasRadioButton(0,true);
                    var_Item7.set_RadioGroup(0,1235);
                    var_Item7.set_State(0,1);
            var_Item4.Expanded = true;

X++ (Dynamics Ax 2009)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void onEvent_FaceTreeStateChanged(COM   _Tree,int   _Item,int   _Column)
{
    COM com_Item;
    anytype var_Item;
    ;
    var_Item = COM::createFromObject(extreecube1.FrontFace().FaceTree()).ItemByIndex(_Item); com_Item = var_Item;
        print( "State" );
        print( com_Item.State(COMVariant::createFromInt(0)) );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Item1,com_Item2,com_Item3,com_Item4,com_Item5,com_Item6,com_Item7,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Item1,var_Item2,var_Item3,var_Item4,var_Item5,var_Item6,var_Item7,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.ItemPadding(16);
        com_FaceTree.DrawGridLines(0/*exNoLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Radio"); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = com_Items.Add("Group A"); com_Item = var_Item;
                var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                    var_Item1 = com_Items1.Add("Radio <b>1"); com_Item1 = var_Item1;
                        com_Item1.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item1.RadioGroup(COMVariant::createFromInt(0),1234);
                    var_Item2 = com_Items1.Add("Radio <b>2"); com_Item2 = var_Item2;
                        com_Item2.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item2.RadioGroup(COMVariant::createFromInt(0),1234);
                        com_Item2.State(COMVariant::createFromInt(0),1);
                    var_Item3 = com_Items1.Add("Radio <b>3"); com_Item3 = var_Item3;
                        com_Item3.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item3.RadioGroup(COMVariant::createFromInt(0),1234);
                com_Item.Expanded(true);
            var_Item4 = com_Items.Add("Group B"); com_Item4 = var_Item4;
                var_Items2 = com_Item4.Items(); com_Items2 = var_Items2;
                    var_Item5 = com_Items2.Add("Radio <b>1"); com_Item5 = var_Item5;
                        com_Item5.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item5.RadioGroup(COMVariant::createFromInt(0),1235);
                    var_Item6 = com_Items2.Add("Radio <b>2"); com_Item6 = var_Item6;
                        com_Item6.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item6.RadioGroup(COMVariant::createFromInt(0),1235);
                    var_Item7 = com_Items2.Add("Radio <b>3"); com_Item7 = var_Item7;
                        com_Item7.HasRadioButton(COMVariant::createFromInt(0),true);
                        com_Item7.RadioGroup(COMVariant::createFromInt(0),1235);
                        com_Item7.State(COMVariant::createFromInt(0),1);
                com_Item4.Expanded(true);
}

Delphi 8 (.NET only)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeStateChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent);
begin
    with AxTreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[e.item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[TObject(0)] );
        end;
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exNoLines;
        Columns.Add('Radio').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Group A') do
            begin
                with Items do
                begin
                    with Add('Radio <b>1') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1234;
                    end;
                    with Add('Radio <b>2') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1234;
                        State[TObject(0)] := 1;
                    end;
                    with Add('Radio <b>3') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1234;
                    end;
                end;
                Expanded := True;
            end;
            with Add('Group B') do
            begin
                with Items do
                begin
                    with Add('Radio <b>1') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1235;
                    end;
                    with Add('Radio <b>2') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1235;
                    end;
                    with Add('Radio <b>3') do
                    begin
                        HasRadioButton[TObject(0)] := True;
                        RadioGroup[TObject(0)] := 1235;
                        State[TObject(0)] := 1;
                    end;
                end;
                Expanded := True;
            end;
        end;
    end;
end

Delphi (standard)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TForm1.TreeCube1FaceTreeStateChanged(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
    with TreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[Item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[OleVariant(0)] );
        end;
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib_TLB.exNoLines;
        Columns.Add('Radio').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Group A') do
            begin
                with Items do
                begin
                    with Add('Radio <b>1') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1234;
                    end;
                    with Add('Radio <b>2') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1234;
                        State[OleVariant(0)] := 1;
                    end;
                    with Add('Radio <b>3') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1234;
                    end;
                end;
                Expanded := True;
            end;
            with Add('Group B') do
            begin
                with Items do
                begin
                    with Add('Radio <b>1') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1235;
                    end;
                    with Add('Radio <b>2') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1235;
                    end;
                    with Add('Radio <b>3') do
                    begin
                        HasRadioButton[OleVariant(0)] := True;
                        RadioGroup[OleVariant(0)] := 1235;
                        State[OleVariant(0)] := 1;
                    end;
                end;
                Expanded := True;
            end;
        end;
    end;
end

VFP

*** FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type. ***
LPARAMETERS Tree,Item,Column
    with thisform.TreeCube1
        with .FrontFace.FaceTree.ItemByIndex(Item)
            DEBUGOUT( "State" )
            DEBUGOUT( .State(0) )
        endwith
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .HeaderVisible = .F.
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Radio").Alignment = 0
        with .Items
            with .Add("Group A")
                with .Items
                    with .Add("Radio <b>1")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1234
                    endwith
                    with .Add("Radio <b>2")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1234
                        .State(0) = 1
                    endwith
                    with .Add("Radio <b>3")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1234
                    endwith
                endwith
                .Expanded = .T.
            endwith
            with .Add("Group B")
                with .Items
                    with .Add("Radio <b>1")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1235
                    endwith
                    with .Add("Radio <b>2")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1235
                    endwith
                    with .Add("Radio <b>3")
                        .HasRadioButton(0) = .T.
                        .RadioGroup(0) = 1235
                        .State(0) = 1
                    endwith
                endwith
                .Expanded = .T.
            endwith
        endwith
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeStateChanged = class::nativeObject_FaceTreeStateChanged
endwith
*/
// Notifies that a cell changes its state into a face of tree type.
function nativeObject_FaceTreeStateChanged(Tree,Item,Column)
    local var_Item
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? Str(var_Item.State(0))
return

local oTreeCube,var_Column,var_FaceTree,var_Item,var_Item1,var_Item2,var_Item3,var_Item4,var_Item5,var_Item6,var_Item7,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    // var_FaceTree.Columns.Add("Radio").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Radio")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Item = var_Items.Add("Group A")
            var_Items1 = var_Item.Items
                var_Item1 = var_Items1.Add("Radio <b>1")
                    // var_Item1.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1]
                        TemplateDef = var_Item1
                        Template = [var_Item1.HasRadioButton(0) = True]
                    endwith
                    // var_Item1.RadioGroup(0) = 1234
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1]
                        TemplateDef = var_Item1
                        Template = [var_Item1.RadioGroup(0) = 1234]
                    endwith
                var_Item2 = var_Items1.Add("Radio <b>2")
                    // var_Item2.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item2]
                        TemplateDef = var_Item2
                        Template = [var_Item2.HasRadioButton(0) = True]
                    endwith
                    // var_Item2.RadioGroup(0) = 1234
                    with (oTreeCube)
                        TemplateDef = [dim var_Item2]
                        TemplateDef = var_Item2
                        Template = [var_Item2.RadioGroup(0) = 1234]
                    endwith
                    // var_Item2.State(0) = 1
                    with (oTreeCube)
                        TemplateDef = [dim var_Item2]
                        TemplateDef = var_Item2
                        Template = [var_Item2.State(0) = 1]
                    endwith
                var_Item3 = var_Items1.Add("Radio <b>3")
                    // var_Item3.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item3]
                        TemplateDef = var_Item3
                        Template = [var_Item3.HasRadioButton(0) = True]
                    endwith
                    // var_Item3.RadioGroup(0) = 1234
                    with (oTreeCube)
                        TemplateDef = [dim var_Item3]
                        TemplateDef = var_Item3
                        Template = [var_Item3.RadioGroup(0) = 1234]
                    endwith
            var_Item.Expanded = true
        var_Item4 = var_Items.Add("Group B")
            var_Items2 = var_Item4.Items
                var_Item5 = var_Items2.Add("Radio <b>1")
                    // var_Item5.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item5]
                        TemplateDef = var_Item5
                        Template = [var_Item5.HasRadioButton(0) = True]
                    endwith
                    // var_Item5.RadioGroup(0) = 1235
                    with (oTreeCube)
                        TemplateDef = [dim var_Item5]
                        TemplateDef = var_Item5
                        Template = [var_Item5.RadioGroup(0) = 1235]
                    endwith
                var_Item6 = var_Items2.Add("Radio <b>2")
                    // var_Item6.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item6]
                        TemplateDef = var_Item6
                        Template = [var_Item6.HasRadioButton(0) = True]
                    endwith
                    // var_Item6.RadioGroup(0) = 1235
                    with (oTreeCube)
                        TemplateDef = [dim var_Item6]
                        TemplateDef = var_Item6
                        Template = [var_Item6.RadioGroup(0) = 1235]
                    endwith
                var_Item7 = var_Items2.Add("Radio <b>3")
                    // var_Item7.HasRadioButton(0) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item7]
                        TemplateDef = var_Item7
                        Template = [var_Item7.HasRadioButton(0) = True]
                    endwith
                    // var_Item7.RadioGroup(0) = 1235
                    with (oTreeCube)
                        TemplateDef = [dim var_Item7]
                        TemplateDef = var_Item7
                        Template = [var_Item7.RadioGroup(0) = 1235]
                    endwith
                    // var_Item7.State(0) = 1
                    with (oTreeCube)
                        TemplateDef = [dim var_Item7]
                        TemplateDef = var_Item7
                        Template = [var_Item7.State(0) = 1]
                    endwith
            var_Item4.Expanded = true

XBasic (Alpha Five)

' Notifies that a cell changes its state into a face of tree type.
function FaceTreeStateChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
    Dim var_Item as P
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? var_Item.State(0)
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Item as P
Dim var_Item1 as P
Dim var_Item2 as P
Dim var_Item3 as P
Dim var_Item4 as P
Dim var_Item5 as P
Dim var_Item6 as P
Dim var_Item7 as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    ' var_FaceTree.Columns.Add("Radio").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Radio")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Item = var_Items.Add("Group A")
            var_Items1 = var_Item.Items
                var_Item1 = var_Items1.Add("Radio <b>1")
                    ' var_Item1.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item1"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.Template = "var_Item1.HasRadioButton(0) = True"

                    ' var_Item1.RadioGroup(0) = 1234
                    oTreeCube.TemplateDef = "dim var_Item1"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.Template = "var_Item1.RadioGroup(0) = 1234"

                var_Item2 = var_Items1.Add("Radio <b>2")
                    ' var_Item2.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item2"
                    oTreeCube.TemplateDef = var_Item2
                    oTreeCube.Template = "var_Item2.HasRadioButton(0) = True"

                    ' var_Item2.RadioGroup(0) = 1234
                    oTreeCube.TemplateDef = "dim var_Item2"
                    oTreeCube.TemplateDef = var_Item2
                    oTreeCube.Template = "var_Item2.RadioGroup(0) = 1234"

                    ' var_Item2.State(0) = 1
                    oTreeCube.TemplateDef = "dim var_Item2"
                    oTreeCube.TemplateDef = var_Item2
                    oTreeCube.Template = "var_Item2.State(0) = 1"

                var_Item3 = var_Items1.Add("Radio <b>3")
                    ' var_Item3.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item3"
                    oTreeCube.TemplateDef = var_Item3
                    oTreeCube.Template = "var_Item3.HasRadioButton(0) = True"

                    ' var_Item3.RadioGroup(0) = 1234
                    oTreeCube.TemplateDef = "dim var_Item3"
                    oTreeCube.TemplateDef = var_Item3
                    oTreeCube.Template = "var_Item3.RadioGroup(0) = 1234"

            var_Item.Expanded = .t.
        var_Item4 = var_Items.Add("Group B")
            var_Items2 = var_Item4.Items
                var_Item5 = var_Items2.Add("Radio <b>1")
                    ' var_Item5.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item5"
                    oTreeCube.TemplateDef = var_Item5
                    oTreeCube.Template = "var_Item5.HasRadioButton(0) = True"

                    ' var_Item5.RadioGroup(0) = 1235
                    oTreeCube.TemplateDef = "dim var_Item5"
                    oTreeCube.TemplateDef = var_Item5
                    oTreeCube.Template = "var_Item5.RadioGroup(0) = 1235"

                var_Item6 = var_Items2.Add("Radio <b>2")
                    ' var_Item6.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item6"
                    oTreeCube.TemplateDef = var_Item6
                    oTreeCube.Template = "var_Item6.HasRadioButton(0) = True"

                    ' var_Item6.RadioGroup(0) = 1235
                    oTreeCube.TemplateDef = "dim var_Item6"
                    oTreeCube.TemplateDef = var_Item6
                    oTreeCube.Template = "var_Item6.RadioGroup(0) = 1235"

                var_Item7 = var_Items2.Add("Radio <b>3")
                    ' var_Item7.HasRadioButton(0) = .t.
                    oTreeCube.TemplateDef = "dim var_Item7"
                    oTreeCube.TemplateDef = var_Item7
                    oTreeCube.Template = "var_Item7.HasRadioButton(0) = True"

                    ' var_Item7.RadioGroup(0) = 1235
                    oTreeCube.TemplateDef = "dim var_Item7"
                    oTreeCube.TemplateDef = var_Item7
                    oTreeCube.Template = "var_Item7.RadioGroup(0) = 1235"

                    ' var_Item7.State(0) = 1
                    oTreeCube.TemplateDef = "dim var_Item7"
                    oTreeCube.TemplateDef = var_Item7
                    oTreeCube.Template = "var_Item7.State(0) = 1"

            var_Item4.Expanded = .t.

Visual Objects

METHOD OCX_Exontrol1FaceTreeStateChanged(Tree,Item,Column) CLASS MainDialog
    // FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
    local var_Item as IItem
    var_Item := oDCOCX_Exontrol1:FrontFace:FaceTree:[ItemByIndex,Item]
        OutputDebugString(String2Psz( "State" ))
        OutputDebugString(String2Psz( AsString(var_Item:[State,0]) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Item,var_Item1,var_Item2,var_Item3,var_Item4,var_Item5,var_Item6,var_Item7 as IItem
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:HeaderVisible := false
    var_FaceTree:ItemPadding := 16
    var_FaceTree:DrawGridLines := exNoLines
    var_FaceTree:Columns:Add("Radio"):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Item := var_Items:Add("Group A")
            var_Items1 := var_Item:Items
                var_Item1 := var_Items1:Add("Radio <b>1")
                    var_Item1:[HasRadioButton,0] := true
                    var_Item1:[RadioGroup,0] := 1234
                var_Item2 := var_Items1:Add("Radio <b>2")
                    var_Item2:[HasRadioButton,0] := true
                    var_Item2:[RadioGroup,0] := 1234
                    var_Item2:[State,0] := 1
                var_Item3 := var_Items1:Add("Radio <b>3")
                    var_Item3:[HasRadioButton,0] := true
                    var_Item3:[RadioGroup,0] := 1234
            var_Item:Expanded := true
        var_Item4 := var_Items:Add("Group B")
            var_Items2 := var_Item4:Items
                var_Item5 := var_Items2:Add("Radio <b>1")
                    var_Item5:[HasRadioButton,0] := true
                    var_Item5:[RadioGroup,0] := 1235
                var_Item6 := var_Items2:Add("Radio <b>2")
                    var_Item6:[HasRadioButton,0] := true
                    var_Item6:[RadioGroup,0] := 1235
                var_Item7 := var_Items2:Add("Radio <b>3")
                    var_Item7:[HasRadioButton,0] := true
                    var_Item7:[RadioGroup,0] := 1235
                    var_Item7:[State,0] := 1
            var_Item4:Expanded := true

PowerBuilder

/*begin event FaceTreeStateChanged(oleobject  Tree,long  Item,long  Column) - Notifies that a cell changes its state into a face of tree type.*/
/*
    OleObject var_Item
    oTreeCube = ole_1.Object
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        MessageBox("Information",string( "State" ))
        MessageBox("Information",string( String(var_Item.State(0)) ))
*/
/*end event FaceTreeStateChanged*/

OleObject oTreeCube,var_FaceTree,var_Item,var_Item1,var_Item2,var_Item3,var_Item4,var_Item5,var_Item6,var_Item7,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Columns.Add("Radio").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Item = var_Items.Add("Group A")
            var_Items1 = var_Item.Items
                var_Item1 = var_Items1.Add("Radio <b>1")
                    var_Item1.HasRadioButton(0,true)
                    var_Item1.RadioGroup(0,1234)
                var_Item2 = var_Items1.Add("Radio <b>2")
                    var_Item2.HasRadioButton(0,true)
                    var_Item2.RadioGroup(0,1234)
                    var_Item2.State(0,1)
                var_Item3 = var_Items1.Add("Radio <b>3")
                    var_Item3.HasRadioButton(0,true)
                    var_Item3.RadioGroup(0,1234)
            var_Item.Expanded = true
        var_Item4 = var_Items.Add("Group B")
            var_Items2 = var_Item4.Items
                var_Item5 = var_Items2.Add("Radio <b>1")
                    var_Item5.HasRadioButton(0,true)
                    var_Item5.RadioGroup(0,1235)
                var_Item6 = var_Items2.Add("Radio <b>2")
                    var_Item6.HasRadioButton(0,true)
                    var_Item6.RadioGroup(0,1235)
                var_Item7 = var_Items2.Add("Radio <b>3")
                    var_Item7.HasRadioButton(0,true)
                    var_Item7.RadioGroup(0,1235)
                    var_Item7.State(0,1)
            var_Item4.Expanded = true

Visual DataFlex

// Notifies that a cell changes its state into a face of tree type.
Procedure OnComFaceTreeStateChanged Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeStateChanged llTree llItem llColumn
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComFaceTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voItem
            Get ComItemByIndex of hoFaceTree llItem to voItem
            Handle hoItem
            Get Create (RefClass(cComItem)) to hoItem
            Set pvComObject of hoItem to voItem
                Showln "State" (ComState(hoItem,0))
            Send Destroy to hoItem
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace1
    Get ComFrontFace to voFace1
    Handle hoFace1
    Get Create (RefClass(cComFace)) to hoFace1
    Set pvComObject of hoFace1 to voFace1
        Variant voFaceTree1
        Get ComCreateTree of hoFace1 to voFaceTree1
        Handle hoFaceTree1
        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
        Set pvComObject of hoFaceTree1 to voFaceTree1
            Set ComHeaderVisible of hoFaceTree1 to False
            Set ComItemPadding of hoFaceTree1 to 16
            Set ComDrawGridLines of hoFaceTree1 to OLEexNoLines
            Variant voColumns
            Get ComColumns of hoFaceTree1 to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Radio" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree1 to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem1
                Get ComAdd of hoItems "Group A" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems1
                    Get ComItems of hoItem1 to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Variant voItem2
                        Get ComAdd of hoItems1 "Radio <b>1" to voItem2
                        Handle hoItem2
                        Get Create (RefClass(cComItem)) to hoItem2
                        Set pvComObject of hoItem2 to voItem2
                            Set ComHasRadioButton of hoItem2 0 to True
                            Set ComRadioGroup of hoItem2 0 to 1234
                        Send Destroy to hoItem2
                        Variant voItem3
                        Get ComAdd of hoItems1 "Radio <b>2" to voItem3
                        Handle hoItem3
                        Get Create (RefClass(cComItem)) to hoItem3
                        Set pvComObject of hoItem3 to voItem3
                            Set ComHasRadioButton of hoItem3 0 to True
                            Set ComRadioGroup of hoItem3 0 to 1234
                            Set ComState of hoItem3 0 to 1
                        Send Destroy to hoItem3
                        Variant voItem4
                        Get ComAdd of hoItems1 "Radio <b>3" to voItem4
                        Handle hoItem4
                        Get Create (RefClass(cComItem)) to hoItem4
                        Set pvComObject of hoItem4 to voItem4
                            Set ComHasRadioButton of hoItem4 0 to True
                            Set ComRadioGroup of hoItem4 0 to 1234
                        Send Destroy to hoItem4
                    Send Destroy to hoItems1
                    Set ComExpanded of hoItem1 to True
                Send Destroy to hoItem1
                Variant voItem5
                Get ComAdd of hoItems "Group B" to voItem5
                Handle hoItem5
                Get Create (RefClass(cComItem)) to hoItem5
                Set pvComObject of hoItem5 to voItem5
                    Variant voItems2
                    Get ComItems of hoItem5 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Variant voItem6
                        Get ComAdd of hoItems2 "Radio <b>1" to voItem6
                        Handle hoItem6
                        Get Create (RefClass(cComItem)) to hoItem6
                        Set pvComObject of hoItem6 to voItem6
                            Set ComHasRadioButton of hoItem6 0 to True
                            Set ComRadioGroup of hoItem6 0 to 1235
                        Send Destroy to hoItem6
                        Variant voItem7
                        Get ComAdd of hoItems2 "Radio <b>2" to voItem7
                        Handle hoItem7
                        Get Create (RefClass(cComItem)) to hoItem7
                        Set pvComObject of hoItem7 to voItem7
                            Set ComHasRadioButton of hoItem7 0 to True
                            Set ComRadioGroup of hoItem7 0 to 1235
                        Send Destroy to hoItem7
                        Variant voItem8
                        Get ComAdd of hoItems2 "Radio <b>3" to voItem8
                        Handle hoItem8
                        Get Create (RefClass(cComItem)) to hoItem8
                        Set pvComObject of hoItem8 to voItem8
                            Set ComHasRadioButton of hoItem8 0 to True
                            Set ComRadioGroup of hoItem8 0 to 1235
                            Set ComState of hoItem8 0 to 1
                        Send Destroy to hoItem8
                    Send Destroy to hoItems2
                    Set ComExpanded of hoItem5 to True
                Send Destroy to hoItem5
            Send Destroy to hoItems
        Send Destroy to hoFaceTree1
    Send Destroy to hoFace1
End_Procedure

XBase++

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
    LOCAL oItem
    oItem := oTreeCube:FrontFace():FaceTree():ItemByIndex(Item)
        DevOut( "State" )
        DevOut( Transform(oItem:State(0),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItem,oItem1,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:HeaderVisible := .F.
            oFaceTree:ItemPadding := 16
            oFaceTree:DrawGridLines := 0/*exNoLines*/
            oFaceTree:Columns():Add("Radio"):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItem := oItems:Add("Group A")
                    oItems1 := oItem:Items()
                        oItem1 := oItems1:Add("Radio <b>1")
                            oItem1:SetProperty("HasRadioButton",0,.T.)
                            oItem1:SetProperty("RadioGroup",0,1234)
                        oItem2 := oItems1:Add("Radio <b>2")
                            oItem2:SetProperty("HasRadioButton",0,.T.)
                            oItem2:SetProperty("RadioGroup",0,1234)
                            oItem2:SetProperty("State",0,1)
                        oItem3 := oItems1:Add("Radio <b>3")
                            oItem3:SetProperty("HasRadioButton",0,.T.)
                            oItem3:SetProperty("RadioGroup",0,1234)
                    oItem:Expanded := .T.
                oItem4 := oItems:Add("Group B")
                    oItems2 := oItem4:Items()
                        oItem5 := oItems2:Add("Radio <b>1")
                            oItem5:SetProperty("HasRadioButton",0,.T.)
                            oItem5:SetProperty("RadioGroup",0,1235)
                        oItem6 := oItems2:Add("Radio <b>2")
                            oItem6:SetProperty("HasRadioButton",0,.T.)
                            oItem6:SetProperty("RadioGroup",0,1235)
                        oItem7 := oItems2:Add("Radio <b>3")
                            oItem7:SetProperty("HasRadioButton",0,.T.)
                            oItem7:SetProperty("RadioGroup",0,1235)
                            oItem7:SetProperty("State",0,1)
                    oItem4:Expanded := .T.

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property Height

property Item.Height as Long
Specifies the item's height.

Type | Description
Long | A Long expression that specifies the height of the current item
By default, the height of the item is based on the height of the control's Font, so the height for all items are automatically updated once the user changes the control's font. The item's height is automatically computed if the SingleLine property is False. The Def(exCellSingleLine) / SingleLine property specifies whether the cell's caption is displayed by single or multiple lines. The ItemPadding property increases / decreases the vertical padding for items, including the control's header bar.


property Index

property Item.Index as Long
Indicates the index of the item.

Type | Description
Long | A long expression that specifies the index of the item within face's items collection.
The Index property specifies the index of the item within face's items collection. The ItemByIndex property retrieves an Item object based on its index. The Item property retrieves the Item object giving its position. The Position property specifies the position of the item relative to its parent. The ItemFromPoint property retrieves the index of the item from the point.


property InnerCell

property Item.InnerCell ([ColIndex as Variant], [Index as Variant]) as Variant
Retrieves the inner cell.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to get the inner cell .
Index as Variant | A long expression that indicates the index of the inner being requested. If the Index parameter is missing or it is zero, the InnerCell property retrieves the master cell.
Variant | A long expression that indicates the handle of the inner cell.
Use the InnerCell property to get the inner cell. Use the CellParent property to get the parent of the inner cell. The SplitCell method splits a cell in two cells ( the newly created cell is called inner cell ). The CellParent property gets 0 if the cell is not an inner cell. The parent cell is always displayed to the left side of the cell. The inner cell ( InnerCell ) is displayed to the right side of the cell. Use the CellWidth property to specify the width of the inner cell. The UnsplitCell method unsplits the cell


property Italic

property Item.Italic as Boolean
Indicates that the item should appear in italics.

Type | Description
Boolean | A Boolean expression that specifies whether the item should appear in italics.
By default, the Italic property is False. The Italic property indicates that the item should appear as italics. You can use the <i> HTML tags in cell's Value property to display portions of the text in italics.

The following properties changes the item's font attribute as:

  • Bold property indicates that the item should appear as bold.
  • Underline property indicates that the item should appear as underlined.
  • Strikeout property indicates that the item should appear as strikeout.


property Items

property Item.Items as Items
Gets the item's child collection.

Type | Description
Items | An Items object that holds child Item objects of the current item
The Items object holds the current item's child collection. The Add / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Add method of the Columns object adds a new column to the list. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button.

How do I add a hierarchy?

VBA (MS Access, Excell...)

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("").Alignment = LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub Extreecube1_FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles Extreecube1.FaceTreeExpandItem
    With Extreecube1
        Debug.Print( Item )
    End With
End Sub

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub AxTreeCube1_FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles AxTreeCube1.FaceTreeExpandItem
    With AxTreeCube1
        Debug.Print( e.item )
    End With
End Sub

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void OnFaceTreeExpandItemTreeCube1(LPDISPATCH   Tree,long   Item)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
    OutputDebugString( L"Item" );
}

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void extreecube1_FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
}
//this.extreecube1.FaceTreeExpandItem += new exontrol.EXTREECUBELib.exg2antt.FaceTreeExpandItemEventHandler(this.extreecube1_FaceTreeExpandItem);

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
    alert( Item );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeExpandItem(Tree,Item)
    With TreeCube1
        alert( Item )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 10
            .HeaderVisible = False
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("").Alignment = 0
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void axTreeCube1_FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
}
//this.axTreeCube1.FaceTreeExpandItem += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEventHandler(this.axTreeCube1_FaceTreeExpandItem);

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
    ;
    print( _Item );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(10);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
    end
end;

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TForm1.TreeCube1FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
    end
end;

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

*** FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type. ***
LPARAMETERS Tree,Item
    with thisform.TreeCube1
        DEBUGOUT( Item )
    endwith

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 10
        .HeaderVisible = .F.
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeExpandItem = class::nativeObject_FaceTreeExpandItem
endwith
*/
// Notifies that an item has been expanded/collapsed into a face of tree type.
function nativeObject_FaceTreeExpandItem(Tree,Item)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
return

local oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

' Notifies that an item has been expanded/collapsed into a face of tree type.
function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

METHOD OCX_Exontrol1FaceTreeExpandItem(Tree,Item) CLASS MainDialog
    // FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
    OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 10
    var_FaceTree:HeaderVisible := false
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

/*begin event FaceTreeExpandItem(oleobject  Tree,long  Item) - Notifies that an item has been expanded/collapsed into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
*/
/*end event FaceTreeExpandItem*/

OleObject oTreeCube,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

// Notifies that an item has been expanded/collapsed into a face of tree type.
Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
    Showln llItem
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 10
            Set ComHeaderVisible of hoFaceTree to False
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
    DevOut( Transform(Item,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 10
            oFaceTree:HeaderVisible := .F.
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property Parent

property Item.Parent as Item
Indicates the item's parent.

Type | Description
Item | A Item object that indicates the parent item.
The Parent property returns nothing, if item has no parent. The Parent property indicates the item's parent. You can use the Parent property to change the parent of the current item. The Add / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The CellParent property gets 0 if the cell is not an inner cell.


property Position

property Item.Position as Long
Specifies the item's position.

Type | Description
Long | A Long expression that specifies the item's position.

The Position property specifies the position of the item relative to its parent. The Position property is 0-based. The ItemFromPoint property retrieves the index of the item from the point. The Index property specifies the index of the item within face's items collection. The ItemByIndex property retrieves an Item object based on its index. The Item property retrieves the Item object giving its position.


property RadioGroup

property Item.RadioGroup(ColIndex as Variant) as Long
Retrieves or sets a value whether the radio button group.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column that hosts the radio-button.
Long | A Long expression that specifies the group of the radio button. When multiple radio-buttons are assigned to the same group, only one can have the state on 1 ( checked ), while others are unchecked.
The RadioGroup property arranges multiple radio-buttons to the same group. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column.


method Remove

method Item.Remove ()
Removes the item.

Type Description
The Remove method removes the current item, and all its child. The Remove method removes a specified child item. The Clear method clears all child items. Also, the ToString property can add/remove items.


property Selectable

property Item.Selectable as Boolean
Specifies whether the item is selectable.

Type | Description
Boolean | A Boolean expression that specifies whether the item is selectable.
By default, the Selectable property is True. The Selectable property specifies whether the item is selectable. An item that's not selectable, can not change it's appearance when user clicks on it. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item. Use the BackColor property to change the item's background color. The ForeColor property specifies the item's foreground color. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected.


property SingleLine

property Item.SingleLine([ColIndex as Variant]) as Boolean
Indicates whether the cell is displayed on a single or multiple lines.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's caption.
Boolean | A Boolean expression that specifies whether the cell's caption is displayed by single or multiple lines.
y default, the SingleLine property is False. The item's height is automatically computed if the SingleLine property is False. The Def(exCellSingleLine) / SingleLine property specifies whether the cell's caption is displayed by single or multiple lines. By default, the height of the item is based on the height of the control's Font, so the height for all items are automatically updated once the user changes the control's font.


property SplitCell

property Item.SplitCell ([ColIndex as Variant]) as Variant
Splits a cell, and returns the inner created cell.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to split it.
Variant | A long expression that indicates the handle of the cell being created.
The SplitCell method splits a cell in two cells ( the newly created cell is called inner cell ). Use the InnerCell property to get the inner cell. Use the CellParent property to get the parent of the inner cell. The CellParent property gets 0 if the cell is not an inner cell. The parent cell is always displayed to the left side of the cell. The inner cell ( InnerCell ) is displayed to the right side of the cell. Use the CellWidth property to specify the width of the inner cell. The UnsplitCell method unsplits the cell.

How can I split a cell?

VBA (MS Access, Excell...)

With TreeCube1
    .BeginUpdate
    .TexturePicturePath = ""
    .HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
    .HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
    .HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
    .HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
    With .FrontFace
        With .CreateTree
            .Columns.Add("Default").Alignment = 0
            With .Items
                With .Add("Choose your quick actions")
                    .SingleLine(0) = False
                    With .Items.Add("")
                        .Height = 48
                        s = 0
                        .Value(s) = "<c><img>P1</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P2</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P3</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P4</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                    End With
                    .Expanded = True
                End With
            End With
        End With
    End With
    .EndUpdate
End With

VB6

With TreeCube1
    .BeginUpdate
    .TexturePicturePath = ""
    .HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
    .HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
    .HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
    .HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
    With .FrontFace
        With .CreateTree
            .Columns.Add("Default").Alignment = LeftAlignment
            With .Items
                With .Add("Choose your quick actions")
                    .SingleLine(0) = False
                    With .Items.Add("")
                        .Height = 48
                        s = 0
                        .Value(s) = "<c><img>P1</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P2</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P3</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P4</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                    End With
                    .Expanded = True
                End With
            End With
        End With
    End With
    .EndUpdate
End With

VB.NET

Dim s
With Extreecube1
    .BeginUpdate()
    .TexturePicturePath = ""
    .set_HTMLPicture("P1","c:\exontrol\images\zipdisk.gif")
    .set_HTMLPicture("P2","c:\exontrol\images\auction.gif")
    .set_HTMLPicture("P3","c:\exontrol\images\colorize.gif")
    .set_HTMLPicture("P4","c:\exontrol\images\auction.gif")
    With .FrontFace
        With .CreateTree()
            .Columns.Add("Default").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
            With .Items
                With .Add("Choose your quick actions")
                    .set_SingleLine(0,False)
                    With .Items.Add("")
                        .Height = 48
                        s = 0
                        .set_Value(s,"<c><img>P1</img>")
                        .set_CellWidth(s,48)
                        .set_HasButton(s,True)
                        s = .get_SplitCell(s)
                        .set_Value(s,"<c><img>P2</img>")
                        .set_CellWidth(s,48)
                        .set_HasButton(s,True)
                        s = .get_SplitCell(s)
                        .set_Value(s,"<c><img>P3</img>")
                        .set_CellWidth(s,48)
                        .set_HasButton(s,True)
                        s = .get_SplitCell(s)
                        .set_Value(s,"<c><img>P4</img>")
                        .set_CellWidth(s,48)
                        .set_HasButton(s,True)
                        s = .get_SplitCell(s)
                    End With
                    .Expanded = True
                End With
            End With
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

Dim s
With AxTreeCube1
    .BeginUpdate()
    .TexturePicturePath = ""
    .set_HTMLPicture("P1","c:\exontrol\images\zipdisk.gif")
    .set_HTMLPicture("P2","c:\exontrol\images\auction.gif")
    .set_HTMLPicture("P3","c:\exontrol\images\colorize.gif")
    .set_HTMLPicture("P4","c:\exontrol\images\auction.gif")
    With .FrontFace
        With .CreateTree()
            .Columns.Add("Default").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
            With .Items
                With .Add("Choose your quick actions")
                    .SingleLine(0) = False
                    With .Items.Add("")
                        .Height = 48
                        s = 0
                        .Value(s) = "<c><img>P1</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P2</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P3</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P4</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = True
                        s = .SplitCell(s)
                    End With
                    .Expanded = True
                End With
            End With
        End With
    End With
    .EndUpdate()
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
spTreeCube1->PutTexturePicturePath(L"");
spTreeCube1->PutHTMLPicture(L"P1","c:\\exontrol\\images\\zipdisk.gif");
spTreeCube1->PutHTMLPicture(L"P2","c:\\exontrol\\images\\auction.gif");
spTreeCube1->PutHTMLPicture(L"P3","c:\\exontrol\\images\\colorize.gif");
spTreeCube1->PutHTMLPicture(L"P4","c:\\exontrol\\images\\auction.gif");
EXTREECUBELib::IFacePtr var_Face = spTreeCube1->GetFrontFace();
    EXTREECUBELib::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->GetColumns()->Add(L"Default")->PutAlignment(EXTREECUBELib::LeftAlignment);
        EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
            EXTREECUBELib::IItemPtr var_Item = var_Items->Add("Choose your quick actions");
                var_Item->PutSingleLine(long(0),VARIANT_FALSE);
                EXTREECUBELib::IItemPtr var_Item1 = var_Item->GetItems()->Add("");
                    var_Item1->PutHeight(48);
                    _bstr_t s = 0;
                    var_Item1->PutValue(s,"<c><img>P1</img>");
                    var_Item1->PutCellWidth(s,48);
                    var_Item1->PutHasButton(s,VARIANT_TRUE);
                    s = var_Item1->GetSplitCell(s);
                    var_Item1->PutValue(s,"<c><img>P2</img>");
                    var_Item1->PutCellWidth(s,48);
                    var_Item1->PutHasButton(s,VARIANT_TRUE);
                    s = var_Item1->GetSplitCell(s);
                    var_Item1->PutValue(s,"<c><img>P3</img>");
                    var_Item1->PutCellWidth(s,48);
                    var_Item1->PutHasButton(s,VARIANT_TRUE);
                    s = var_Item1->GetSplitCell(s);
                    var_Item1->PutValue(s,"<c><img>P4</img>");
                    var_Item1->PutCellWidth(s,48);
                    var_Item1->PutHasButton(s,VARIANT_TRUE);
                    s = var_Item1->GetSplitCell(s);
                var_Item->PutExpanded(VARIANT_TRUE);
spTreeCube1->EndUpdate();

C++ Builder

TreeCube1->BeginUpdate();
TreeCube1->TexturePicturePath = L"";
TreeCube1->HTMLPicture[L"P1"] = TVariant("c:\\exontrol\\images\\zipdisk.gif");
TreeCube1->HTMLPicture[L"P2"] = TVariant("c:\\exontrol\\images\\auction.gif");
TreeCube1->HTMLPicture[L"P3"] = TVariant("c:\\exontrol\\images\\colorize.gif");
TreeCube1->HTMLPicture[L"P4"] = TVariant("c:\\exontrol\\images\\auction.gif");
Extreecubelib_tlb::IFacePtr var_Face = TreeCube1->FrontFace;
    Extreecubelib_tlb::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->Columns->Add(L"Default")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
        Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
            Extreecubelib_tlb::IItemPtr var_Item = var_Items->Add(TVariant("Choose your quick actions"));
                var_Item->set_SingleLine(TVariant(0),false);
                Extreecubelib_tlb::IItemPtr var_Item1 = var_Item->Items->Add(TVariant(""));
                    var_Item1->Height = 48;
                    String s = 0;
                    var_Item1->set_Value(TVariant(s),TVariant("<c><img>P1</img>"));
                    var_Item1->set_CellWidth(TVariant(s),48);
                    var_Item1->set_HasButton(TVariant(s),true);
                    s = TVariant(var_Item1->get_SplitCell(TVariant(s)));
                    var_Item1->set_Value(TVariant(s),TVariant("<c><img>P2</img>"));
                    var_Item1->set_CellWidth(TVariant(s),48);
                    var_Item1->set_HasButton(TVariant(s),true);
                    s = TVariant(var_Item1->get_SplitCell(TVariant(s)));
                    var_Item1->set_Value(TVariant(s),TVariant("<c><img>P3</img>"));
                    var_Item1->set_CellWidth(TVariant(s),48);
                    var_Item1->set_HasButton(TVariant(s),true);
                    s = TVariant(var_Item1->get_SplitCell(TVariant(s)));
                    var_Item1->set_Value(TVariant(s),TVariant("<c><img>P4</img>"));
                    var_Item1->set_CellWidth(TVariant(s),48);
                    var_Item1->set_HasButton(TVariant(s),true);
                    s = TVariant(var_Item1->get_SplitCell(TVariant(s)));
                var_Item->Expanded = true;
TreeCube1->EndUpdate();

C#

extreecube1.BeginUpdate();
extreecube1.TexturePicturePath = "";
extreecube1.set_HTMLPicture("P1","c:\\exontrol\\images\\zipdisk.gif");
extreecube1.set_HTMLPicture("P2","c:\\exontrol\\images\\auction.gif");
extreecube1.set_HTMLPicture("P3","c:\\exontrol\\images\\colorize.gif");
extreecube1.set_HTMLPicture("P4","c:\\exontrol\\images\\auction.gif");
exontrol.EXTREECUBELib.Face var_Face = extreecube1.FrontFace;
    exontrol.EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.Columns.Add("Default").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
        exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
            exontrol.EXTREECUBELib.Item var_Item = var_Items.Add("Choose your quick actions");
                var_Item.set_SingleLine(0,false);
                exontrol.EXTREECUBELib.Item var_Item1 = var_Item.Items.Add("");
                    var_Item1.Height = 48;
                    string s = 0;
                    var_Item1.set_Value(s,"<c><img>P1</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P2</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P3</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P4</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                var_Item.Expanded = true;
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    TreeCube1.TexturePicturePath = "";
    TreeCube1.HTMLPicture("P1") = "c:\\exontrol\\images\\zipdisk.gif";
    TreeCube1.HTMLPicture("P2") = "c:\\exontrol\\images\\auction.gif";
    TreeCube1.HTMLPicture("P3") = "c:\\exontrol\\images\\colorize.gif";
    TreeCube1.HTMLPicture("P4") = "c:\\exontrol\\images\\auction.gif";
    var var_Face = TreeCube1.FrontFace;
        var var_FaceTree = var_Face.CreateTree();
            var_FaceTree.Columns.Add("Default").Alignment = 0;
            var var_Items = var_FaceTree.Items;
                var var_Item = var_Items.Add("Choose your quick actions");
                    var_Item.SingleLine(0) = false;
                    var var_Item1 = var_Item.Items.Add("");
                        var_Item1.Height = 48;
                        var s = 0;
                        var_Item1.Value(s) = "<c><img>P1</img>";
                        var_Item1.CellWidth(s) = 48;
                        var_Item1.HasButton(s) = true;
                        s = var_Item1.SplitCell(s);
                        var_Item1.Value(s) = "<c><img>P2</img>";
                        var_Item1.CellWidth(s) = 48;
                        var_Item1.HasButton(s) = true;
                        s = var_Item1.SplitCell(s);
                        var_Item1.Value(s) = "<c><img>P3</img>";
                        var_Item1.CellWidth(s) = 48;
                        var_Item1.HasButton(s) = true;
                        s = var_Item1.SplitCell(s);
                        var_Item1.Value(s) = "<c><img>P4</img>";
                        var_Item1.CellWidth(s) = 48;
                        var_Item1.HasButton(s) = true;
                        s = var_Item1.SplitCell(s);
                    var_Item.Expanded = true;
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        .TexturePicturePath = ""
        .HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
        .HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
        .HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
        .HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
        With .FrontFace
            With .CreateTree
                .Columns.Add("Default").Alignment = 0
                With .Items
                    With .Add("Choose your quick actions")
                        .SingleLine(0) = False
                        With .Items.Add("")
                            .Height = 48
                            s = 0
                            .Value(s) = "<c><img>P1</img>"
                            .CellWidth(s) = 48
                            .HasButton(s) = True
                            s = .SplitCell(s)
                            .Value(s) = "<c><img>P2</img>"
                            .CellWidth(s) = 48
                            .HasButton(s) = True
                            s = .SplitCell(s)
                            .Value(s) = "<c><img>P3</img>"
                            .CellWidth(s) = 48
                            .HasButton(s) = True
                            s = .SplitCell(s)
                            .Value(s) = "<c><img>P4</img>"
                            .CellWidth(s) = 48
                            .HasButton(s) = True
                            s = .SplitCell(s)
                        End With
                        .Expanded = True
                    End With
                End With
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.BeginUpdate();
axTreeCube1.TexturePicturePath = "";
axTreeCube1.set_HTMLPicture("P1","c:\\exontrol\\images\\zipdisk.gif");
axTreeCube1.set_HTMLPicture("P2","c:\\exontrol\\images\\auction.gif");
axTreeCube1.set_HTMLPicture("P3","c:\\exontrol\\images\\colorize.gif");
axTreeCube1.set_HTMLPicture("P4","c:\\exontrol\\images\\auction.gif");
EXTREECUBELib.Face var_Face = axTreeCube1.FrontFace;
    EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.Columns.Add("Default").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
        EXTREECUBELib.Items var_Items = var_FaceTree.Items;
            EXTREECUBELib.Item var_Item = var_Items.Add("Choose your quick actions");
                var_Item.set_SingleLine(0,false);
                EXTREECUBELib.Item var_Item1 = var_Item.Items.Add("");
                    var_Item1.Height = 48;
                    string s = 0;
                    var_Item1.set_Value(s,"<c><img>P1</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P2</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P3</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                    var_Item1.set_Value(s,"<c><img>P4</img>");
                    var_Item1.set_CellWidth(s,48);
                    var_Item1.set_HasButton(s,true);
                    s = var_Item1.get_SplitCell(s);
                var_Item.Expanded = true;
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_Face,com_FaceTree,com_Item,com_Item1,com_Items,com_Items1;
    anytype var_Column,var_Columns,var_Face,var_FaceTree,var_Item,var_Item1,var_Items,var_Items1;
    str s;
    ;

    super();

    extreecube1.BeginUpdate();
    extreecube1.TexturePicturePath("");
    extreecube1.HTMLPicture("P1","c:\\exontrol\\images\\zipdisk.gif");
    extreecube1.HTMLPicture("P2","c:\\exontrol\\images\\auction.gif");
    extreecube1.HTMLPicture("P3","c:\\exontrol\\images\\colorize.gif");
    extreecube1.HTMLPicture("P4","c:\\exontrol\\images\\auction.gif");
    var_Face = extreecube1.FrontFace(); com_Face = var_Face;
        var_FaceTree = com_Face.CreateTree(); com_FaceTree = var_FaceTree;
            var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
            var_Column = COM::createFromObject(com_Columns).Add("Default"); com_Column = var_Column;
            com_Column.Alignment(0/*LeftAlignment*/);
            var_Items = com_FaceTree.Items(); com_Items = var_Items;
                var_Item = com_Items.Add("Choose your quick actions"); com_Item = var_Item;
                    com_Item.SingleLine(COMVariant::createFromInt(0),false);
                    var_Items1 = COM::createFromObject(com_Item.Items()); com_Items1 = var_Items1;
                    var_Item1 = COM::createFromObject(com_Items1).Add(""); com_Item1 = var_Item1;
                        com_Item1.Height(48);
                        s = 0;
                        com_Item1.Value(s,"<c><img>P1</img>");
                        com_Item1.CellWidth(s,48);
                        com_Item1.HasButton(s,true);
                        s = com_Item1.SplitCell(s);
                        com_Item1.Value(s,"<c><img>P2</img>");
                        com_Item1.CellWidth(s,48);
                        com_Item1.HasButton(s,true);
                        s = com_Item1.SplitCell(s);
                        com_Item1.Value(s,"<c><img>P3</img>");
                        com_Item1.CellWidth(s,48);
                        com_Item1.HasButton(s,true);
                        s = com_Item1.SplitCell(s);
                        com_Item1.Value(s,"<c><img>P4</img>");
                        com_Item1.CellWidth(s,48);
                        com_Item1.HasButton(s,true);
                        s = com_Item1.SplitCell(s);
                    com_Item.Expanded(true);
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    BeginUpdate();
    TexturePicturePath := '';
    set_HTMLPicture('P1','c:\exontrol\images\zipdisk.gif');
    set_HTMLPicture('P2','c:\exontrol\images\auction.gif');
    set_HTMLPicture('P3','c:\exontrol\images\colorize.gif');
    set_HTMLPicture('P4','c:\exontrol\images\auction.gif');
    with FrontFace do
    begin
        with CreateTree() do
        begin
            Columns.Add('Default').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
            with Items do
            begin
                with Add('Choose your quick actions') do
                begin
                    SingleLine[TObject(0)] := False;
                    with Items.Add('') do
                    begin
                        Height := 48;
                        s := 0;
                        Value[TObject(s)] := '<c><img>P1</img>';
                        CellWidth[TObject(s)] := 48;
                        HasButton[TObject(s)] := True;
                        s := SplitCell[TObject(s)];
                        Value[TObject(s)] := '<c><img>P2</img>';
                        CellWidth[TObject(s)] := 48;
                        HasButton[TObject(s)] := True;
                        s := SplitCell[TObject(s)];
                        Value[TObject(s)] := '<c><img>P3</img>';
                        CellWidth[TObject(s)] := 48;
                        HasButton[TObject(s)] := True;
                        s := SplitCell[TObject(s)];
                        Value[TObject(s)] := '<c><img>P4</img>';
                        CellWidth[TObject(s)] := 48;
                        HasButton[TObject(s)] := True;
                        s := SplitCell[TObject(s)];
                    end;
                    Expanded := True;
                end;
            end;
        end;
    end;
    EndUpdate();
end

Delphi (standard)

with TreeCube1 do
begin
    BeginUpdate();
    TexturePicturePath := '';
    HTMLPicture['P1'] := 'c:\exontrol\images\zipdisk.gif';
    HTMLPicture['P2'] := 'c:\exontrol\images\auction.gif';
    HTMLPicture['P3'] := 'c:\exontrol\images\colorize.gif';
    HTMLPicture['P4'] := 'c:\exontrol\images\auction.gif';
    with FrontFace do
    begin
        with CreateTree() do
        begin
            Columns.Add('Default').Alignment := EXTREECUBELib_TLB.LeftAlignment;
            with Items do
            begin
                with Add('Choose your quick actions') do
                begin
                    SingleLine[OleVariant(0)] := False;
                    with Items.Add('') do
                    begin
                        Height := 48;
                        s := 0;
                        Value[OleVariant(s)] := '<c><img>P1</img>';
                        CellWidth[OleVariant(s)] := 48;
                        HasButton[OleVariant(s)] := True;
                        s := SplitCell[OleVariant(s)];
                        Value[OleVariant(s)] := '<c><img>P2</img>';
                        CellWidth[OleVariant(s)] := 48;
                        HasButton[OleVariant(s)] := True;
                        s := SplitCell[OleVariant(s)];
                        Value[OleVariant(s)] := '<c><img>P3</img>';
                        CellWidth[OleVariant(s)] := 48;
                        HasButton[OleVariant(s)] := True;
                        s := SplitCell[OleVariant(s)];
                        Value[OleVariant(s)] := '<c><img>P4</img>';
                        CellWidth[OleVariant(s)] := 48;
                        HasButton[OleVariant(s)] := True;
                        s := SplitCell[OleVariant(s)];
                    end;
                    Expanded := True;
                end;
            end;
        end;
    end;
    EndUpdate();
end

VFP

with thisform.TreeCube1
    .BeginUpdate
    .TexturePicturePath = ""
    .Object.HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
    .Object.HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
    .Object.HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
    .Object.HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
    with .FrontFace
        with .CreateTree
            .Columns.Add("Default").Alignment = 0
            with .Items
                with .Add("Choose your quick actions")
                    .SingleLine(0) = .F.
                    with .Items.Add("")
                        .Height = 48
                        s = 0
                        .Value(s) = "<c><img>P1</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = .T.
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P2</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = .T.
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P3</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = .T.
                        s = .SplitCell(s)
                        .Value(s) = "<c><img>P4</img>"
                        .CellWidth(s) = 48
                        .HasButton(s) = .T.
                        s = .SplitCell(s)
                    endwith
                    .Expanded = .T.
                endwith
            endwith
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

local oTreeCube,s,var_Column,var_Face,var_FaceTree,var_Item,var_Item1,var_Items

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
oTreeCube.TexturePicturePath = ""
oTreeCube.Template = [HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"] // oTreeCube.HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
oTreeCube.Template = [HTMLPicture("P2") = "c:\exontrol\images\auction.gif"] // oTreeCube.HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
oTreeCube.Template = [HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"] // oTreeCube.HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
oTreeCube.Template = [HTMLPicture("P4") = "c:\exontrol\images\auction.gif"] // oTreeCube.HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        // var_FaceTree.Columns.Add("Default").Alignment = 0
        var_Column = var_FaceTree.Columns.Add("Default")
        with (oTreeCube)
            TemplateDef = [dim var_Column]
            TemplateDef = var_Column
            Template = [var_Column.Alignment = 0]
        endwith
        var_Items = var_FaceTree.Items
            var_Item = var_Items.Add("Choose your quick actions")
                // var_Item.SingleLine(0) = false
                with (oTreeCube)
                    TemplateDef = [dim var_Item]
                    TemplateDef = var_Item
                    Template = [var_Item.SingleLine(0) = False]
                endwith
                var_Item1 = var_Item.Items.Add("")
                    var_Item1.Height = 48
                    s = 0
                    // var_Item1.Value(s) = "<c><img>P1</img>"
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.Value(s) = "<c><img>P1</img>"]
                    endwith
                    // var_Item1.CellWidth(s) = 48
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.CellWidth(s) = 48]
                    endwith
                    // var_Item1.HasButton(s) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.HasButton(s) = True]
                    endwith
                    s = var_Item1.SplitCell(s)
                    // var_Item1.Value(s) = "<c><img>P2</img>"
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.Value(s) = "<c><img>P2</img>"]
                    endwith
                    // var_Item1.CellWidth(s) = 48
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.CellWidth(s) = 48]
                    endwith
                    // var_Item1.HasButton(s) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.HasButton(s) = True]
                    endwith
                    s = var_Item1.SplitCell(s)
                    // var_Item1.Value(s) = "<c><img>P3</img>"
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.Value(s) = "<c><img>P3</img>"]
                    endwith
                    // var_Item1.CellWidth(s) = 48
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.CellWidth(s) = 48]
                    endwith
                    // var_Item1.HasButton(s) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.HasButton(s) = True]
                    endwith
                    s = var_Item1.SplitCell(s)
                    // var_Item1.Value(s) = "<c><img>P4</img>"
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.Value(s) = "<c><img>P4</img>"]
                    endwith
                    // var_Item1.CellWidth(s) = 48
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.CellWidth(s) = 48]
                    endwith
                    // var_Item1.HasButton(s) = true
                    with (oTreeCube)
                        TemplateDef = [dim var_Item1,s]
                        TemplateDef = var_Item1
                        TemplateDef = s
                        Template = [var_Item1.HasButton(s) = True]
                    endwith
                    s = var_Item1.SplitCell(s)
                var_Item.Expanded = true
oTreeCube.EndUpdate()

XBasic (Alpha Five)

Dim oTreeCube as P
Dim s as
Dim var_Column as local
Dim var_Face as P
Dim var_FaceTree as P
Dim var_Item as P
Dim var_Item1 as P
Dim var_Items as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
oTreeCube.TexturePicturePath = ""
oTreeCube.Template = "HTMLPicture(`P1`) = `c:\exontrol\images\zipdisk.gif`" // oTreeCube.HTMLPicture("P1") = "c:\exontrol\images\zipdisk.gif"
oTreeCube.Template = "HTMLPicture(`P2`) = `c:\exontrol\images\auction.gif`" // oTreeCube.HTMLPicture("P2") = "c:\exontrol\images\auction.gif"
oTreeCube.Template = "HTMLPicture(`P3`) = `c:\exontrol\images\colorize.gif`" // oTreeCube.HTMLPicture("P3") = "c:\exontrol\images\colorize.gif"
oTreeCube.Template = "HTMLPicture(`P4`) = `c:\exontrol\images\auction.gif`" // oTreeCube.HTMLPicture("P4") = "c:\exontrol\images\auction.gif"
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        ' var_FaceTree.Columns.Add("Default").Alignment = 0
        var_Column = var_FaceTree.Columns.Add("Default")
        oTreeCube.TemplateDef = "dim var_Column"
        oTreeCube.TemplateDef = var_Column
        oTreeCube.Template = "var_Column.Alignment = 0"

        var_Items = var_FaceTree.Items
            var_Item = var_Items.Add("Choose your quick actions")
                ' var_Item.SingleLine(0) = .f.
                oTreeCube.TemplateDef = "dim var_Item"
                oTreeCube.TemplateDef = var_Item
                oTreeCube.Template = "var_Item.SingleLine(0) = False"

                var_Item1 = var_Item.Items.Add("")
                    var_Item1.Height = 48
                    s = 0
                    ' var_Item1.Value(s) = "<c><img>P1</img>"
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.Value(s) = `<c><img>P1</img>`"

                    ' var_Item1.CellWidth(s) = 48
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.CellWidth(s) = 48"

                    ' var_Item1.HasButton(s) = .t.
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.HasButton(s) = True"

                    s = var_Item1.SplitCell(s)
                    ' var_Item1.Value(s) = "<c><img>P2</img>"
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.Value(s) = `<c><img>P2</img>`"

                    ' var_Item1.CellWidth(s) = 48
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.CellWidth(s) = 48"

                    ' var_Item1.HasButton(s) = .t.
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.HasButton(s) = True"

                    s = var_Item1.SplitCell(s)
                    ' var_Item1.Value(s) = "<c><img>P3</img>"
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.Value(s) = `<c><img>P3</img>`"

                    ' var_Item1.CellWidth(s) = 48
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.CellWidth(s) = 48"

                    ' var_Item1.HasButton(s) = .t.
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.HasButton(s) = True"

                    s = var_Item1.SplitCell(s)
                    ' var_Item1.Value(s) = "<c><img>P4</img>"
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.Value(s) = `<c><img>P4</img>`"

                    ' var_Item1.CellWidth(s) = 48
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.CellWidth(s) = 48"

                    ' var_Item1.HasButton(s) = .t.
                    oTreeCube.TemplateDef = "dim var_Item1,s"
                    oTreeCube.TemplateDef = var_Item1
                    oTreeCube.TemplateDef = s
                    oTreeCube.Template = "var_Item1.HasButton(s) = True"

                    s = var_Item1.SplitCell(s)
                var_Item.Expanded = .t.
oTreeCube.EndUpdate()

Visual Objects

local var_Face as IFace
local var_FaceTree as IFaceTree
local var_Item,var_Item1 as IItem
local var_Items as IItems
local s as USUAL

oDCOCX_Exontrol1:BeginUpdate()
oDCOCX_Exontrol1:TexturePicturePath := ""
oDCOCX_Exontrol1:[HTMLPicture,"P1"] := "c:\exontrol\images\zipdisk.gif"
oDCOCX_Exontrol1:[HTMLPicture,"P2"] := "c:\exontrol\images\auction.gif"
oDCOCX_Exontrol1:[HTMLPicture,"P3"] := "c:\exontrol\images\colorize.gif"
oDCOCX_Exontrol1:[HTMLPicture,"P4"] := "c:\exontrol\images\auction.gif"
var_Face := oDCOCX_Exontrol1:FrontFace
    var_FaceTree := var_Face:CreateTree()
        var_FaceTree:Columns:Add("Default"):Alignment := LeftAlignment
        var_Items := var_FaceTree:Items
            var_Item := var_Items:Add("Choose your quick actions")
                var_Item:[SingleLine,0] := false
                var_Item1 := var_Item:Items:Add("")
                    var_Item1:Height := 48
                    s := 0
                    var_Item1:[Value,s] := "<c><img>P1</img>"
                    var_Item1:[CellWidth,s] := 48
                    var_Item1:[HasButton,s] := true
                    s := var_Item1:[SplitCell,s]
                    var_Item1:[Value,s] := "<c><img>P2</img>"
                    var_Item1:[CellWidth,s] := 48
                    var_Item1:[HasButton,s] := true
                    s := var_Item1:[SplitCell,s]
                    var_Item1:[Value,s] := "<c><img>P3</img>"
                    var_Item1:[CellWidth,s] := 48
                    var_Item1:[HasButton,s] := true
                    s := var_Item1:[SplitCell,s]
                    var_Item1:[Value,s] := "<c><img>P4</img>"
                    var_Item1:[CellWidth,s] := 48
                    var_Item1:[HasButton,s] := true
                    s := var_Item1:[SplitCell,s]
                var_Item:Expanded := true
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

OleObject oTreeCube,var_Face,var_FaceTree,var_Item,var_Item1,var_Items
any s

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
oTreeCube.TexturePicturePath = ""
oTreeCube.HTMLPicture("P1","c:\exontrol\images\zipdisk.gif")
oTreeCube.HTMLPicture("P2","c:\exontrol\images\auction.gif")
oTreeCube.HTMLPicture("P3","c:\exontrol\images\colorize.gif")
oTreeCube.HTMLPicture("P4","c:\exontrol\images\auction.gif")
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.Columns.Add("Default").Alignment = 0
        var_Items = var_FaceTree.Items
            var_Item = var_Items.Add("Choose your quick actions")
                var_Item.SingleLine(0,false)
                var_Item1 = var_Item.Items.Add("")
                    var_Item1.Height = 48
                    s = 0
                    var_Item1.Value(s,"<c><img>P1</img>")
                    var_Item1.CellWidth(s,48)
                    var_Item1.HasButton(s,true)
                    s = var_Item1.SplitCell(s)
                    var_Item1.Value(s,"<c><img>P2</img>")
                    var_Item1.CellWidth(s,48)
                    var_Item1.HasButton(s,true)
                    s = var_Item1.SplitCell(s)
                    var_Item1.Value(s,"<c><img>P3</img>")
                    var_Item1.CellWidth(s,48)
                    var_Item1.HasButton(s,true)
                    s = var_Item1.SplitCell(s)
                    var_Item1.Value(s,"<c><img>P4</img>")
                    var_Item1.CellWidth(s,48)
                    var_Item1.HasButton(s,true)
                    s = var_Item1.SplitCell(s)
                var_Item.Expanded = true
oTreeCube.EndUpdate()

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Set ComTexturePicturePath to ""
    Set ComHTMLPicture "P1" to "c:\exontrol\images\zipdisk.gif"
    Set ComHTMLPicture "P2" to "c:\exontrol\images\auction.gif"
    Set ComHTMLPicture "P3" to "c:\exontrol\images\colorize.gif"
    Set ComHTMLPicture "P4" to "c:\exontrol\images\auction.gif"
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Default" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Choose your quick actions" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Set ComSingleLine of hoItem 0 to False
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Variant voItem1
                        Get ComAdd of hoItems1 "" to voItem1
                        Handle hoItem1
                        Get Create (RefClass(cComItem)) to hoItem1
                        Set pvComObject of hoItem1 to voItem1
                            Set ComHeight of hoItem1 to 48
                            Variant s
                            Move 0 to s
                            Set ComValue of hoItem1 s to "<c><img>P1</img>"
                            Set ComCellWidth of hoItem1 s to 48
                            Set ComHasButton of hoItem1 s to True
                            Get ComSplitCell of hoItem1 s to s
                            Set ComValue of hoItem1 s to "<c><img>P2</img>"
                            Set ComCellWidth of hoItem1 s to 48
                            Set ComHasButton of hoItem1 s to True
                            Get ComSplitCell of hoItem1 s to s
                            Set ComValue of hoItem1 s to "<c><img>P3</img>"
                            Set ComCellWidth of hoItem1 s to 48
                            Set ComHasButton of hoItem1 s to True
                            Get ComSplitCell of hoItem1 s to s
                            Set ComValue of hoItem1 s to "<c><img>P4</img>"
                            Set ComCellWidth of hoItem1 s to 48
                            Set ComHasButton of hoItem1 s to True
                            Get ComSplitCell of hoItem1 s to s
                        Send Destroy to hoItem1
                    Send Destroy to hoItems1
                    Set ComExpanded of hoItem to True
                Send Destroy to hoItem
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFace
    LOCAL oFaceTree
    LOCAL oItem,oItem1
    LOCAL oItems
    LOCAL oTreeCube
    LOCAL s

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:BeginUpdate()
        oTreeCube:TexturePicturePath := ""
        oTreeCube:SetProperty("HTMLPicture","P1","c:\exontrol\images\zipdisk.gif")
        oTreeCube:SetProperty("HTMLPicture","P2","c:\exontrol\images\auction.gif")
        oTreeCube:SetProperty("HTMLPicture","P3","c:\exontrol\images\colorize.gif")
        oTreeCube:SetProperty("HTMLPicture","P4","c:\exontrol\images\auction.gif")
        oFace := oTreeCube:FrontFace()
            oFaceTree := oFace:CreateTree()
                oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
                oItems := oFaceTree:Items()
                    oItem := oItems:Add("Choose your quick actions")
                        oItem:SetProperty("SingleLine",0,.F.)
                        oItem1 := oItem:Items():Add("")
                            oItem1:Height := 48
                            s := 0
                            oItem1:SetProperty("Value",s,"<c><img>P1</img>")
                            oItem1:SetProperty("CellWidth",s,48)
                            oItem1:SetProperty("HasButton",s,.T.)
                            s := oItem1:SplitCell(s)
                            oItem1:SetProperty("Value",s,"<c><img>P2</img>")
                            oItem1:SetProperty("CellWidth",s,48)
                            oItem1:SetProperty("HasButton",s,.T.)
                            s := oItem1:SplitCell(s)
                            oItem1:SetProperty("Value",s,"<c><img>P3</img>")
                            oItem1:SetProperty("CellWidth",s,48)
                            oItem1:SetProperty("HasButton",s,.T.)
                            s := oItem1:SplitCell(s)
                            oItem1:SetProperty("Value",s,"<c><img>P4</img>")
                            oItem1:SetProperty("CellWidth",s,48)
                            oItem1:SetProperty("HasButton",s,.T.)
                            s := oItem1:SplitCell(s)
                        oItem:Expanded := .T.
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property State

property Item.State(ColIndex as Variant) as Long
Specifies the cell's state / checked / unchecked.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's state.
Long | A long expression that indicates the cell's state as 0 for unchecked, 1 for checked, and 2 for partial, in case of check-box.

The State property of the Item indicates the state of the check-box. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button.


property StrikeOut

property Item.StrikeOut as Boolean
Indicates that the item should appear as strikeout.

Type | Description
Boolean | A Boolean expression that specifies whether the item should appear as strikeout.
By default, the StrikeOut property is False. The Strikeout property indicates that the item should appear as strikeout. You can use the <s> HTML tags in cell's Value property to display portions of the text as strikeout.

The following properties changes the item's font attribute as:

  • Bold property indicates that the item should appear as bold.
  • Italic property indicates that the item should appear as italics.
  • Underline property indicates that the item should appear as underlined.


property ToString

property Item.ToString as String
Loads or saves the Item object using string representation.

Type | Description
String | A String expression that specifies the comma-separated list of items to be displayed. If the list displayed multiple columns, the cells are separated by ; character. The () characters indicates the child collection.
The ToString property loads or saves the Item object using string representation. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Add method of the Columns object adds a new column to the list. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button.

How can I add a hierarchy (single column), using the Item.ToString method?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .LinesAtRoot = -1
        .Columns.Add("").Alignment = 0
        .Items.Count = 1
        .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
        .Items.ExpandAll
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .LinesAtRoot = exLinesAtRoot
        .Columns.Add("").Alignment = LeftAlignment
        .Items.Count = 1
        .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
        .Items.ExpandAll
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.Count = 1
        .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
        .Items.ExpandAll()
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.Count = 1
        .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
        .Items.ExpandAll()
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exLinesAtRoot);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    var_FaceTree->GetItems()->PutCount(1);
    var_FaceTree->GetItems()->GetItem(long(0))->PutToString(L"Root(Child1(SubChild 1,SubChild 2),Child2)");
    var_FaceTree->GetItems()->ExpandAll();
    OutputDebugStringW( var_FaceTree->GetItems()->GetItem(long(0))->GetToString() );

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exLinesAtRoot;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    var_FaceTree->Items->Count = 1;
    var_FaceTree->Items->get_Item(TVariant(0))->ToString = L"Root(Child1(SubChild 1,SubChild 2),Child2)";
    var_FaceTree->Items->ExpandAll();
    OutputDebugString( var_FaceTree->Items->get_Item(TVariant(0))->ToString );

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.Count = 1;
    var_FaceTree.Items[0].ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)";
    var_FaceTree.Items.ExpandAll();
    System.Diagnostics.Debug.Print( var_FaceTree.Items[0].ToString );

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.LinesAtRoot = -1;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var_FaceTree.Items.Count = 1;
        var_FaceTree.Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)";
        var_FaceTree.Items.ExpandAll();
        alert( var_FaceTree.Items.Item(0).ToString );
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .LinesAtRoot = -1
            .Columns.Add("").Alignment = 0
            .Items.Count = 1
            .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
            .Items.ExpandAll
            alert( .Items.Item(0).ToString )
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.Count = 1;
    var_FaceTree.Items[0].ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)";
    var_FaceTree.Items.ExpandAll();
    System.Diagnostics.Debug.Print( var_FaceTree.Items[0].ToString );

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.LinesAtRoot(-1/*exLinesAtRoot*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.Count(1);
        var_Item = COM::createFromObject(com_FaceTree.Items()).Item(COMVariant::createFromInt(0)); com_Item = var_Item;
        com_Item.ToString("Root(Child1(SubChild 1,SubChild 2),Child2)");
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.ExpandAll();
        print( com_FaceTree.Items().Item(COMVariant::createFromInt(0)).ToString() );
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        Items.Count := 1;
        Items.Item[TObject(0)].ToString := 'Root(Child1(SubChild 1,SubChild 2),Child2)';
        Items.ExpandAll();
        OutputDebugString( Items.Item[TObject(0)].ToString );
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        LinesAtRoot := EXTREECUBELib_TLB.exLinesAtRoot;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        Items.Count := 1;
        Items.Item[OleVariant(0)].ToString := 'Root(Child1(SubChild 1,SubChild 2),Child2)';
        Items.ExpandAll();
        OutputDebugString( Items.Item[OleVariant(0)].ToString );
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .LinesAtRoot = -1
        .Columns.Add("").Alignment = 0
        .Items.Count = 1
        .Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
        .Items.ExpandAll
        DEBUGOUT( .Items.Item(0).ToString )
    endwith
endwith

dBASE Plus

local oTreeCube,var_Column,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_FaceTree.Items.Count = 1
    var_FaceTree.Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
    var_FaceTree.Items.ExpandAll()
    ? var_FaceTree.Items.Item(0).ToString

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_FaceTree.Items.Count = 1
    var_FaceTree.Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
    var_FaceTree.Items.ExpandAll()
    ? var_FaceTree.Items.Item(0).ToString

Visual Objects

local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:LinesAtRoot := exLinesAtRoot
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_FaceTree:Items:Count := 1
    var_FaceTree:Items:[Item,0]:ToString := "Root(Child1(SubChild 1,SubChild 2),Child2)"
    var_FaceTree:Items:ExpandAll()
    OutputDebugString(String2Psz( var_FaceTree:Items:[Item,0]:ToString ))

PowerBuilder

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    var_FaceTree.Columns.Add("").Alignment = 0
    var_FaceTree.Items.Count = 1
    var_FaceTree.Items.Item(0).ToString = "Root(Child1(SubChild 1,SubChild 2),Child2)"
    var_FaceTree.Items.ExpandAll()
    MessageBox("Information",string( var_FaceTree.Items.Item(0).ToString ))

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComLinesAtRoot of hoFaceTree to OLEexLinesAtRoot
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComCount of hoItems to 1
            Send Destroy to hoItems
            Variant voItems1
            Get ComItems of hoFaceTree to voItems1
            Handle hoItems1
            Get Create (RefClass(cComItems)) to hoItems1
            Set pvComObject of hoItems1 to voItems1
                Variant voItem
                Get ComItem of hoItems1 0 to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Set ComToString of hoItem to "Root(Child1(SubChild 1,SubChild 2),Child2)"
                Send Destroy to hoItem
            Send Destroy to hoItems1
            Variant voItems2
            Get ComItems of hoFaceTree to voItems2
            Handle hoItems2
            Get Create (RefClass(cComItems)) to hoItems2
            Set pvComObject of hoItems2 to voItems2
                Send ComExpandAll of hoItems2
            Send Destroy to hoItems2
            Variant v
            Variant voItems3
            Get ComItems of hoFaceTree to voItems3
            Handle hoItems3
            Get Create (RefClass(cComItems)) to hoItems3
            Set pvComObject of hoItems3 to voItems3
                Variant voItem1
                Get ComItem of hoItems3 0 to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Get ComToString of hoItem1 to v
                Send Destroy to hoItem1
            Send Destroy to hoItems3
            Showln v
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:LinesAtRoot := -1/*exLinesAtRoot*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oFaceTree:Items():Count := 1
            oFaceTree:Items:Item(0):ToString := "Root(Child1(SubChild 1,SubChild 2),Child2)"
            oFaceTree:Items():ExpandAll()
            DevOut( oFaceTree:Items:Item(0):ToString() )

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property Underline

property Item.Underline as Boolean
Indicates that the item should appear as underlined.

Type | Description
Boolean | A Boolean expression that specifies whether the item should appear as underlined.
By default, the Underline property is False. The Underline property indicates that the item should appear as underlined. You can use the <u> HTML tags in cell's Value property to display portions of the text as underlined.

The following properties changes the item's font attribute as:

  • Bold property indicates that the item should appear as bold.
  • Italic property indicates that the item should appear as italics.
  • Strikeout property indicates that the item should appear as strikeout.


method UnsplitCell

method Item.UnsplitCell ([ColIndex as Variant])
Unsplits a cell.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to un-split it.
The UnsplitCell method unsplits the cell. The SplitCell method splits a cell in two cells ( the newly created cell is called inner cell ). Use the InnerCell property to get the inner cell. Use the CellParent property to get the parent of the inner cell. The CellParent property gets 0 if the cell is not an inner cell. The parent cell is always displayed to the left side of the cell. The inner cell ( InnerCell ) is displayed to the right side of the cell. Use the CellWidth property to specify the width of the inner cell.


property UserData

property Item.UserData(ColIndex as Variant) as Variant
Specifies the cell's user data.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's caption.
Variant | A VARIANT expression that indicates the item's user data
The UserData associates any-extra data to the item. The Value property specifies the cell's value ( for instance, if the cell display HTML text, the cell's value includes the HTML tags ). The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ).


property Value

property Item.Value(ColIndex as Variant) as Variant
Specifies the cell's value.

Type | Description
ColIndex as Variant | A Long expression that specifies the index of the column, or A String expression that specifies the name of the column to query for cell's caption.
Variant | A VARIANT expression that specifies the cell's value.
The Value property specifies the cell's value ( for instance, if the cell display HTML text, the cell's value includes the HTML tags ). The Caption property specifies the cell's caption ( the text being shown on the cell, including no HTML tags ). The UserData associates any-extra data to the item. The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The Value property indicates the value of the selected cell. The Def(exCellCaptionFormat) property specifies whether the column supports HTML format. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Add method of the Columns object adds a new column to the list. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button.

The Value supports the following built-in HTML tags:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:


Items object
The Items object holds information about items to be displayed on a exFaceTree type. The Type property specifies the type of the face. The exFaceTree type can display one or multiple columns.

The following screen shot shows a FaceTree with multiple items:

The following table shows how you can get a Items object ( the red items indicates properties )

EXTREECUBELib.FaceTree
    "Items" -> EXTREECUBELib.Items
EXTREECUBELib.Item
    "Items" -> EXTREECUBELib.Items

The following table shows how you can get a Items object ( the red items indicates properties )

EXTREECUBELib.Items <- "Items" of EXTREECUBELib.Item

The Items object supports the following properties and methods:

Name | Description
Add | Adds a Item object to the collection and returns a reference to the newly created object.
Clear | Removes all objects in a collection.
CollapseAll | Collapses all items.
Count | Specifies the number of items.
ExpandAll | Expands all items.
Item | Returns a specific Item of the Items collection, by position.
Remove | Removes a specific member from the Items collection.
ToString | Loads or saves the Items collection using string representation.


method Add

method Items.Add (Caption as Variant)
Adds a Item object to the collection and returns a reference to the newly created object.

Type | Description
Caption as Variant | A String expression that defines the HTML format to be displayed on the first cell.
Return | Description
Item | An Item object being added
The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Add method of the Columns object adds a new column to the list. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button.

object holds the current item's child collection.

How do I add a hierarchy?

VBA (MS Access, Excell...)

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("").Alignment = LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub Extreecube1_FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles Extreecube1.FaceTreeExpandItem
    With Extreecube1
        Debug.Print( Item )
    End With
End Sub

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub AxTreeCube1_FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles AxTreeCube1.FaceTreeExpandItem
    With AxTreeCube1
        Debug.Print( e.item )
    End With
End Sub

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void OnFaceTreeExpandItemTreeCube1(LPDISPATCH   Tree,long   Item)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
    OutputDebugString( L"Item" );
}

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void extreecube1_FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
}
//this.extreecube1.FaceTreeExpandItem += new exontrol.EXTREECUBELib.exg2antt.FaceTreeExpandItemEventHandler(this.extreecube1_FaceTreeExpandItem);

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
    alert( Item );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeExpandItem(Tree,Item)
    With TreeCube1
        alert( Item )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 10
            .HeaderVisible = False
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("").Alignment = 0
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void axTreeCube1_FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
}
//this.axTreeCube1.FaceTreeExpandItem += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEventHandler(this.axTreeCube1_FaceTreeExpandItem);

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
    ;
    print( _Item );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(10);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
    end
end;

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TForm1.TreeCube1FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
    end
end;

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

*** FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type. ***
LPARAMETERS Tree,Item
    with thisform.TreeCube1
        DEBUGOUT( Item )
    endwith

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 10
        .HeaderVisible = .F.
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeExpandItem = class::nativeObject_FaceTreeExpandItem
endwith
*/
// Notifies that an item has been expanded/collapsed into a face of tree type.
function nativeObject_FaceTreeExpandItem(Tree,Item)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
return

local oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

' Notifies that an item has been expanded/collapsed into a face of tree type.
function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

METHOD OCX_Exontrol1FaceTreeExpandItem(Tree,Item) CLASS MainDialog
    // FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
    OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 10
    var_FaceTree:HeaderVisible := false
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

/*begin event FaceTreeExpandItem(oleobject  Tree,long  Item) - Notifies that an item has been expanded/collapsed into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
*/
/*end event FaceTreeExpandItem*/

OleObject oTreeCube,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

// Notifies that an item has been expanded/collapsed into a face of tree type.
Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
    Showln llItem
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 10
            Set ComHeaderVisible of hoFaceTree to False
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
    DevOut( Transform(Item,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 10
            oFaceTree:HeaderVisible := .F.
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method Clear

method Items.Clear ()
Removes all objects in a collection.

Type Description
The Clear method clears all child items. The Remove method removes the current item, and all its child. The Remove method removes a specified child item. Also, the ToString property can add/remove items. Also, the Count property on 0, removes all child items.


method CollapseAll

method Items.CollapseAll ()
Collapses all items.

Type Description
The CollapseAll method expands all items in the collection. The ExpandAll method expands all items in the collection. The Expanded property specifies whether the item is expanded or collapsed. The LinesAtRoot property link items at the root of the hierarchy. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element.


property Count

property Items.Count as Long
Specifies the number of items.

Type | Description
Long | A Long expression that specifies the number of items in the collection.
The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Count property gets or sets the number of the items. The VisibleItemsCount property specifies number of items that can be displayed on the face.

How can add items to a list?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = Extreecube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->GetColumns()->Add(L"Pos")->PutFormatColumn(L"1 pos ``");
    var_FaceTree->GetItems()->PutCount(spTreeCube1->GetFrontFace()->GetFaceTree()->GetVisibleItemsCount());

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->Columns->Add(L"Pos")->FormatColumn = L"1 pos ``";
    var_FaceTree->Items->Count = TreeCube1->FrontFace->FaceTree->VisibleItemsCount;

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
    var_FaceTree.Items.Count = extreecube1.FrontFace.FaceTree.VisibleItemsCount;

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
        var_FaceTree.Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .Columns.Add("Pos").FormatColumn = "1 pos ``"
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``";
    var_FaceTree.Items.Count = axTreeCube1.FrontFace.FaceTree.VisibleItemsCount;

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Pos"); com_Column = var_Column;
        com_Column.FormatColumn("1 pos ``");
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.Count(extreecube1.FrontFace().FaceTree().VisibleItemsCount());
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        Columns.Add('Pos').FormatColumn := '1 pos ``';
        Items.Count := AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        Columns.Add('Pos').FormatColumn := '1 pos ``';
        Items.Count := TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .Columns.Add("Pos").FormatColumn = "1 pos ``"
        .Items.Count = thisform.TreeCube1.FrontFace.FaceTree.VisibleItemsCount
    endwith
endwith

dBASE Plus

local oTreeCube,var_Column,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    // var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_Column = var_FaceTree.Columns.Add("Pos")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.FormatColumn = "1 pos ``"]
    endwith
    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    ' var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_Column = var_FaceTree.Columns.Add("Pos")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.FormatColumn = `1 pos `````"

    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

Visual Objects

local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:Columns:Add("Pos"):FormatColumn := "1 pos ``"
    var_FaceTree:Items:Count := oDCOCX_Exontrol1:FrontFace:FaceTree:VisibleItemsCount

PowerBuilder

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.Columns.Add("Pos").FormatColumn = "1 pos ``"
    var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Pos" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComFormatColumn of hoColumn to "1 pos ``"
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant v
                    Variant voFace1
                    Get ComFrontFace to voFace1
                    Handle hoFace1
                    Get Create (RefClass(cComFace)) to hoFace1
                    Set pvComObject of hoFace1 to voFace1
                        Variant voFaceTree1
                        Get ComFaceTree of hoFace1 to voFaceTree1
                        Handle hoFaceTree1
                        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
                        Set pvComObject of hoFaceTree1 to voFaceTree1
                            Get ComVisibleItemsCount of hoFaceTree1 to v
                        Send Destroy to hoFaceTree1
                    Send Destroy to hoFace1
                Set ComCount of hoItems to v
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:Columns():Add("Pos"):FormatColumn := "1 pos ``"
            oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method ExpandAll

method Items.ExpandAll ()
Expands all items.

Type Description

The ExpandAll method expands all items in the collection. The Expanded property specifies whether the item is expanded or collapsed. The CollapseAll method expands all items in the collection. The LinesAtRoot property link items at the root of the hierarchy. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element.


property Item

property Items.Item (Position as Variant) as Item
Returns a specific Item of the Items collection, by position.

Type | Description
Position as Variant | A long expression that specifies the position of the item to be requested.
Item | An Item object being requested.
The Item property retrieves the Item object giving its position. The Count property gets or sets the number of items. The Index property specifies the index of the item within face's items collection. The ItemByIndex property retrieves an Item object based on its index. The Position property specifies the position of the item relative to its parent. The ItemFromPoint property retrieves the index of the item from the point.


method Remove

method Items.Remove (Position as Variant)
Removes a specific member from the Items collection.

Type | Description
Position as Variant | A Long expression that specifies the position of the item to be removed.
The Remove method removes a specified child item, giving its position. The Remove method removes the current item, and all its child. The Clear method clears all child items. Also, the ToString property can add/remove items.


property ToString

property Items.ToString as String
Loads or saves the Items collection using string representation.

Type | Description
String | A String expression that specifies the comma-separated list of items to be displayed. If the list displayed multiple columns, the cells are separated by ; character. The () characters indicates the child collection.
The ToString property loads or saves the Item object using string representation. The Add / Count / Item.ToString / Items.ToString method adds a Item object(s) to the collection and returns a reference to the newly created object. The Value property specifies the cell's value. The HasCheckBox property retrieves or sets a value indicating whether the cell has a checkbox associated or not. The Items property returns the item's child collection. The Add method of the Columns object adds a new column to the list. The HasRadioButton property shows or hides the cell's radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The State property of the Item indicates the state of the radio-button.

How can I add a hierarchy (multiple-columns), using the Item.ToString method?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .LinesAtRoot = -1
        .Columns.Add(1).Alignment = 0
        .Columns.Add(2).Alignment = 0
        .Columns.Add(3).Alignment = 0
        .Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," & _
"Child 1.2;Child 2.2;Child 3.2)"
        .Items.ExpandAll
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .LinesAtRoot = exLinesAtRoot
        .Columns.Add(1).Alignment = LeftAlignment
        .Columns.Add(2).Alignment = LeftAlignment
        .Columns.Add(3).Alignment = LeftAlignment
        .Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," & _
"Child 1.2;Child 2.2;Child 3.2)"
        .Items.ExpandAll
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot
        .Columns.Add(1).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Columns.Add(2).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Columns.Add(3).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," & _
"Child 1.2;Child 2.2;Child 3.2)"
        .Items.ExpandAll()
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot
        .Columns.Add(1).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Columns.Add(2).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Columns.Add(3).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," & _
"Child 1.2;Child 2.2;Child 3.2)"
        .Items.ExpandAll()
        Debug.Print( .Items.Item(0).ToString )
    End With
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exLinesAtRoot);
    var_FaceTree->GetColumns()->Add(L"1")->PutAlignment(EXTREECUBELib::LeftAlignment);
    var_FaceTree->GetColumns()->Add(L"2")->PutAlignment(EXTREECUBELib::LeftAlignment);
    var_FaceTree->GetColumns()->Add(L"3")->PutAlignment(EXTREECUBELib::LeftAlignment);
    var_FaceTree->GetItems()->PutToString(_bstr_t("Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),") +
"Child 1.2;Child 2.2;Child 3.2)");
    var_FaceTree->GetItems()->ExpandAll();
    OutputDebugStringW( var_FaceTree->GetItems()->GetItem(long(0))->GetToString() );

C++ Builder

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exLinesAtRoot;
    var_FaceTree->Columns->Add(L"1")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    var_FaceTree->Columns->Add(L"2")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    var_FaceTree->Columns->Add(L"3")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    var_FaceTree->Items->ToString = TVariant(String("Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),") +
"Child 1.2;Child 2.2;Child 3.2)");
    var_FaceTree->Items->ExpandAll();
    OutputDebugString( var_FaceTree->Items->get_Item(TVariant(0))->ToString );

C#

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
    var_FaceTree.Columns.Add(1.ToString()).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Columns.Add(2.ToString()).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Columns.Add(3.ToString()).Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," +
"Child 1.2;Child 2.2;Child 3.2)";
    var_FaceTree.Items.ExpandAll();
    System.Diagnostics.Debug.Print( var_FaceTree.Items[0].ToString );

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.LinesAtRoot = -1;
        var_FaceTree.Columns.Add(1).Alignment = 0;
        var_FaceTree.Columns.Add(2).Alignment = 0;
        var_FaceTree.Columns.Add(3).Alignment = 0;
        var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," +
    "Child 1.2;Child 2.2;Child 3.2)";
        var_FaceTree.Items.ExpandAll();
        alert( var_FaceTree.Items.Item(0).ToString );
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .LinesAtRoot = -1
            .Columns.Add(1).Alignment = 0
            .Columns.Add(2).Alignment = 0
            .Columns.Add(3).Alignment = 0
            .Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," & _
    "Child 1.2;Child 2.2;Child 3.2)"
            .Items.ExpandAll
            alert( .Items.Item(0).ToString )
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
    var_FaceTree.Columns.Add(1.ToString()).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Columns.Add(2.ToString()).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Columns.Add(3.ToString()).Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3)," +
"Child 1.2;Child 2.2;Child 3.2)";
    var_FaceTree.Items.ExpandAll();
    System.Diagnostics.Debug.Print( var_FaceTree.Items[0].ToString );

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Items;
    str var_s;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.LinesAtRoot(-1/*exLinesAtRoot*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(1); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(2); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(3); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        var_s = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),C";
        var_s = var_s + "hild 1.2;Child 2.2;Child 3.2)";
        com_Items.ToString(var_s);
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.ExpandAll();
        print( com_FaceTree.Items().Item(COMVariant::createFromInt(0)).ToString() );
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exLinesAtRoot;
        Columns.Add(1).Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        Columns.Add(2).Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        Columns.Add(3).Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        Items.ToString := 'Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),C' +
    'hild 1.2;Child 2.2;Child 3.2)';
        Items.ExpandAll();
        OutputDebugString( Items.Item[TObject(0)].ToString );
    end;
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        LinesAtRoot := EXTREECUBELib_TLB.exLinesAtRoot;
        Columns.Add(1).Alignment := EXTREECUBELib_TLB.LeftAlignment;
        Columns.Add(2).Alignment := EXTREECUBELib_TLB.LeftAlignment;
        Columns.Add(3).Alignment := EXTREECUBELib_TLB.LeftAlignment;
        Items.ToString := 'Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),C' +
    'hild 1.2;Child 2.2;Child 3.2)';
        Items.ExpandAll();
        OutputDebugString( Items.Item[OleVariant(0)].ToString );
    end;
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .LinesAtRoot = -1
        .Columns.Add(1).Alignment = 0
        .Columns.Add(2).Alignment = 0
        .Columns.Add(3).Alignment = 0
        var_s = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),C"
        var_s = var_s + "hild 1.2;Child 2.2;Child 3.2)"
        .Items.ToString = var_s
        .Items.ExpandAll
        DEBUGOUT( .Items.Item(0).ToString )
    endwith
endwith

dBASE Plus

local oTreeCube,var_Column,var_Column1,var_Column2,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    // var_FaceTree.Columns.Add(Str(1)).Alignment = 0
    var_Column = var_FaceTree.Columns.Add(Str(1))
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    // var_FaceTree.Columns.Add(Str(2)).Alignment = 0
    var_Column1 = var_FaceTree.Columns.Add(Str(2))
    with (oTreeCube)
        TemplateDef = [dim var_Column1]
        TemplateDef = var_Column1
        Template = [var_Column1.Alignment = 0]
    endwith
    // var_FaceTree.Columns.Add(Str(3)).Alignment = 0
    var_Column2 = var_FaceTree.Columns.Add(Str(3))
    with (oTreeCube)
        TemplateDef = [dim var_Column2]
        TemplateDef = var_Column2
        Template = [var_Column2.Alignment = 0]
    endwith
    var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
    var_FaceTree.Items.ExpandAll()
    ? var_FaceTree.Items.Item(0).ToString

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Column as local
Dim var_Column1 as local
Dim var_Column2 as local
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    ' var_FaceTree.Columns.Add(1).Alignment = 0
    var_Column = var_FaceTree.Columns.Add(1)
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    ' var_FaceTree.Columns.Add(2).Alignment = 0
    var_Column1 = var_FaceTree.Columns.Add(2)
    oTreeCube.TemplateDef = "dim var_Column1"
    oTreeCube.TemplateDef = var_Column1
    oTreeCube.Template = "var_Column1.Alignment = 0"

    ' var_FaceTree.Columns.Add(3).Alignment = 0
    var_Column2 = var_FaceTree.Columns.Add(3)
    oTreeCube.TemplateDef = "dim var_Column2"
    oTreeCube.TemplateDef = var_Column2
    oTreeCube.Template = "var_Column2.Alignment = 0"

    var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
    var_FaceTree.Items.ExpandAll()
    ? var_FaceTree.Items.Item(0).ToString

Visual Objects

local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:LinesAtRoot := exLinesAtRoot
    var_FaceTree:Columns:Add(AsString(1)):Alignment := LeftAlignment
    var_FaceTree:Columns:Add(AsString(2)):Alignment := LeftAlignment
    var_FaceTree:Columns:Add(AsString(3)):Alignment := LeftAlignment
    var_FaceTree:Items:ToString := "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
    var_FaceTree:Items:ExpandAll()
    OutputDebugString(String2Psz( var_FaceTree:Items:[Item,0]:ToString ))

PowerBuilder

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.LinesAtRoot = -1
    var_FaceTree.Columns.Add(String(1)).Alignment = 0
    var_FaceTree.Columns.Add(String(2)).Alignment = 0
    var_FaceTree.Columns.Add(String(3)).Alignment = 0
    var_FaceTree.Items.ToString = "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
    var_FaceTree.Items.ExpandAll()
    MessageBox("Information",string( var_FaceTree.Items.Item(0).ToString ))

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComLinesAtRoot of hoFaceTree to OLEexLinesAtRoot
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns 1 to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voColumns1
            Get ComColumns of hoFaceTree to voColumns1
            Handle hoColumns1
            Get Create (RefClass(cComColumns)) to hoColumns1
            Set pvComObject of hoColumns1 to voColumns1
                Variant voColumn1
                Get ComAdd of hoColumns1 2 to voColumn1
                Handle hoColumn1
                Get Create (RefClass(cComColumn)) to hoColumn1
                Set pvComObject of hoColumn1 to voColumn1
                    Set ComAlignment of hoColumn1 to OLELeftAlignment
                Send Destroy to hoColumn1
            Send Destroy to hoColumns1
            Variant voColumns2
            Get ComColumns of hoFaceTree to voColumns2
            Handle hoColumns2
            Get Create (RefClass(cComColumns)) to hoColumns2
            Set pvComObject of hoColumns2 to voColumns2
                Variant voColumn2
                Get ComAdd of hoColumns2 3 to voColumn2
                Handle hoColumn2
                Get Create (RefClass(cComColumn)) to hoColumn2
                Set pvComObject of hoColumn2 to voColumn2
                    Set ComAlignment of hoColumn2 to OLELeftAlignment
                Send Destroy to hoColumn2
            Send Destroy to hoColumns2
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComToString of hoItems to "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
            Send Destroy to hoItems
            Variant voItems1
            Get ComItems of hoFaceTree to voItems1
            Handle hoItems1
            Get Create (RefClass(cComItems)) to hoItems1
            Set pvComObject of hoItems1 to voItems1
                Send ComExpandAll of hoItems1
            Send Destroy to hoItems1
            Variant v
            Variant voItems2
            Get ComItems of hoFaceTree to voItems2
            Handle hoItems2
            Get Create (RefClass(cComItems)) to hoItems2
            Set pvComObject of hoItems2 to voItems2
                Variant voItem
                Get ComItem of hoItems2 0 to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Get ComToString of hoItem to v
                Send Destroy to hoItem
            Send Destroy to hoItems2
            Showln v
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:LinesAtRoot := -1/*exLinesAtRoot*/
            oFaceTree:Columns():Add(Transform(1,"")):Alignment := 0/*LeftAlignment*/
            oFaceTree:Columns():Add(Transform(2,"")):Alignment := 0/*LeftAlignment*/
            oFaceTree:Columns():Add(Transform(3,"")):Alignment := 0/*LeftAlignment*/
            oFaceTree:Items():ToString := "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
            oFaceTree:Items():ExpandAll()
            DevOut( oFaceTree:Items:Item(0):ToString() )

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


TreeCube object
Tip The /COM object can be placed on a HTML page (with usage of the HTML object tag: <object classid="clsid:...">) using the class identifier: {13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}. The object's program identifier is: "Exontrol.TreeCube". The /COM object module is: "ExTreeCube.dll"
The eXTreeCube library provides fisheye representation / cube map texturing of different components such as calendar, multiple - columns tree view and so on. Fish-eye lenses magnify the center of the field of view, while the scale being reduced towards the edge. Cube map texturing is a form of environment texture mapping that uses a viewing direction (3D vector) to map into a view plane the six 2D textures arranged like the faces of a cube. You have unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on any face of the cube. The eXTreeCube component lets the user changes its visual appearance using skins, each one providing an additional visual experience that enhances viewing pleasure. As usual, there are no dependencies to MFC, VB, VCL, and of course, no Open GL required.

The following table shows how you can create / access different type of objects ( red items indicates the name of the property/method ):

EXTREECUBELib.TreeCube
    "BottomFace" -> EXTREECUBELib.Face
    "DownFace" -> EXTREECUBELib.Face
    "Face(FaceEnum)" -> EXTREECUBELib.Face
    "FrontFace" -> EXTREECUBELib.Face
    "LeftFace" -> EXTREECUBELib.Face
    "RightFace" -> EXTREECUBELib.Face
    "TopFace" -> EXTREECUBELib.Face
    "VisualAppearance" -> EXTREECUBELib.Appearance
EXTREECUBELib.Face
    "CreateCalendar" -> EXTREECUBELib.FaceCalendar
    "CreatePicture" -> EXTREECUBELib.FacePicture
    "CreateTree" -> EXTREECUBELib.FaceTree
    "FaceCalendar" -> EXTREECUBELib.FaceCalendar
    "FacePicture" -> EXTREECUBELib.FacePicture
    "FaceTree" -> EXTREECUBELib.FaceTree
    "Neighbor(RotateEnum)" -> EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FacePicture
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FaceTree
    "Columns" -> EXTREECUBELib.Columns
    "Face" -> EXTREECUBELib.Face
    "ItemByIndex(Long)" -> EXTREECUBELib.Item
    "Items" -> EXTREECUBELib.Items
EXTREECUBELib.Columns
    "Add(String)" -> EXTREECUBELib.Column
    "Item(Variant)" -> EXTREECUBELib.Column
EXTREECUBELib.Item
    "Items" -> EXTREECUBELib.Items
    "Parent" -> EXTREECUBELib.Item
EXTREECUBELib.Items
    "Add(Variant)" -> EXTREECUBELib.Item
    "Item(Variant)" -> EXTREECUBELib.Item

The following table shows how you can create / access different type of objects ( red items indicates the name of the property/method ):

EXTREECUBELib.Appearance <- "VisualAppearance" of EXTREECUBELib.TreeCube
EXTREECUBELib.Column <- "Add(String)" of EXTREECUBELib.Columns
EXTREECUBELib.Column <- "Item(Variant)" of EXTREECUBELib.Columns
EXTREECUBELib.Columns <- "Columns" of EXTREECUBELib.FaceTree
EXTREECUBELib.Face <- "BottomFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "DownFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Face" of EXTREECUBELib.FaceTree
EXTREECUBELib.Face <- "Face(FaceEnum)" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "FrontFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "LeftFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Neighbor(RotateEnum)" of EXTREECUBELib.Face
EXTREECUBELib.Face <- "RightFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "TopFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.FaceCalendar <- "CreateCalendar" of EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar <- "FaceCalendar" of EXTREECUBELib.Face
EXTREECUBELib.FacePicture <- "CreatePicture" of EXTREECUBELib.Face
EXTREECUBELib.FacePicture <- "FacePicture" of EXTREECUBELib.Face
EXTREECUBELib.FaceTree <- "CreateTree" of EXTREECUBELib.Face
EXTREECUBELib.FaceTree <- "FaceTree" of EXTREECUBELib.Face
EXTREECUBELib.Item <- "Add(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "Item(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "ItemByIndex(Long)" of EXTREECUBELib.FaceTree
EXTREECUBELib.Item <- "Parent" of EXTREECUBELib.Item
EXTREECUBELib.Items <- "Items" of EXTREECUBELib.Item

The TreeCube object supports the following properties and methods:

Name | Description
Aliasing | Specifies how the texture is rendered.
AllowEnsureVisibleFaceOnKey | Specifies whether the user can navigate through the faces using the keys.
AllowRotate | Specifies the directions where the user can drag the cube.
AlwaysEnsureVisibleFace | Ensures that always the face fits the control's client area.
AnchorFromPoint | Retrieves the identifier of the anchor from point.
Appearance | Retrieves or sets the control's appearance.
AttachTemplate | Attaches a script to the current object, including the events, from a string, file, a safe array of bytes.
BackColor | Specifies the control's background color.
Background | Returns or sets a value that indicates the background color for parts in the control.
BeginUpdate | Maintains performance when items are added to the control one at a time. This method prevents the control from painting until the EndUpdate method is called.
BottomFace | Returns the bottom face of the cube.
CancelLayoutChanging | Cancels the current layout changing operation.
CheckBoxHeight | Gets or sets a value that indicates the height in pixels to display the check-boxes.
CheckBoxWidth | Gets or sets a value that indicates the width in pixels to display the check-boxes.
DefaultFaceType | Specifies the default type of control to put on all faces.
DownFace | Returns the down face of the cube.
Enabled | Enables or disables the control.
EndUpdate | Resumes painting the control after painting is suspended by the BeginUpdate method.
EnsureVisibleFace | Ensures that giving face fits the control's client area.
EnsureVisibleFaceMargin | Specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it.
EnsureVisibleFaceOnDblClick | Ensures that the face being double clicked fits the cube's client area.
EnsureVisibleFaces | Specifies the comma-separated list of faces that can be visible.
EventParam | Retrieves or sets a value that indicates the current's event parameter.
ExecuteTemplate | Executes a template and returns the result.
Face | Returns the giving face of the cube.
FaceFromPoint | Retrieves the index of the face from the point.
Font | Retrieves or sets the control's font.
ForeColor | Specifies the control's foreground color.
FormatAnchor | Specifies the visual effect for anchor elements in HTML captions.
FrontFace | Returns the front face of the cube.
HasButtons | Adds a button to the left side of each parent item. The user can click the button to expand or collapse the child items as an alternative to double-clicking the parent item.
HTMLPicture | Adds or replaces a picture in HTML captions.
hWnd | Retrieves the control's window handle.
IdentifyFace | Specifies whether each face shows its index/frame.
IdentifyFaceCaption | Specifies the HTML caption to show the index/name of the face.
Images | Sets at runtime the control's image list. The Handle should be a handle to an Images List Control.
ImageSize | Retrieves or sets the size of icons the control displays..
Internals | Specifies internal values.
LeftFace | Returns the left face of the cube.
Margins | Sets or retrieves a value that indicates the margins of the faces within the cube.
OnMouseWheel | Specifies what action the control performs when user rolls the mouse wheel.
Picture | Retrieves or sets a graphic to be displayed in the control.
PictureDisplay | Retrieves or sets a value that indicates the way how the graphic is displayed on the control's background
RadioButtonHeight | Gets or sets a value that indicates the height in pixels to display the radio-buttons.
RadioButtonWidth | Gets or sets a value that indicates the width in pixels to display the radio-buttons.
Refresh | Refreses the control.
ReplaceIcon | Adds a new icon, replaces an icon or clears the control's image list.
RightFace | Returns the right face of the cube.
Rotate | Rotates the cube in a direction.
RotX | Specifies the rotation angle in Radians along Ox axis.
RotY | Specifies the rotation angle in Radians along Oy axis.
ShowAs | Indicates the way the cube is displayed.
ShowImageList | Specifies whether the control's image list window is visible or hidden.
ShowToolTip | Shows the specified tooltip at given position.
Template | Specifies the control's template.
TemplateDef | Defines inside variables for the next Template/ExecuteTemplate call.
TexturePictureExt | Specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
TexturePictureHeight | Specifies the height in pixels, to render the pictures on the faces.
TexturePicturePath | Specifies the path to load the faces/pictures.
TexturePictureWidth | Specifies the width in pixels, to render the pictures on the faces.
ToolTipDelay | Specifies the time in ms that passes before the ToolTip appears.
ToolTipFont | Retrieves or sets the tooltip's font.
ToolTipPopDelay | Specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control.
ToolTipWidth | Specifies a value that indicates the width of the tooltip window, in pixels.
TopFace | Returns the top face of the cube.
Transparent | Gets or sets a value that indicates percent of the transparency to display the pictures on the cube.
TransparentContent | Gets or sets a value that indicates percent of the transparency to display the content of the face within the cube.
UseVisualTheme | Specifies whether the control uses the current visual theme to display certain UI parts.
Version | Retrieves the control's version.
VisibleFace | Indicates the currently visible face.
VisualAppearance | Retrieves the control's appearance.
Zoom | Zooms the view.


property Aliasing

property TreeCube.Aliasing as AliasingEnum
Specifies how the texture is rendered.

Type | Description
AliasingEnum | A AliasingEnum expression that specifies how the texture is rendered.


property AllowEnsureVisibleFaceOnKey

property TreeCube.AllowEnsureVisibleFaceOnKey as AllowEnsureVisibleFaceOnKeyEnum
Specifies whether the user can navigate through the faces using the keys.

Type | Description
AllowEnsureVisibleFaceOnKeyEnum | A AllowEnsureVisibleFaceOnKeyEnum expression that specifies whether the user can navigate through the faces using the keys.


property AllowRotate

property TreeCube.AllowRotate as RotateEnum
Specifies the directions where the user can drag the cube.

Type | Description
RotateEnum | A RotateEnum expression that specifies the direction the user can drag.
By default, the AllowRotate property is exRotateAll, and that means that the user can rotate the cube to any direction. For instance, if the AllowRotate property is exRotateLeft + exRotateRight, the user can rotate the cube to the left or to the right. Use the Rotate method to programmatically rotate the cube. The control fires the Rotate event when the cube is rotated. Use the RotX and RotY properties to specify the rotation angles. The AlwaysEnsureVisibleFace property property indicates whether the control allows fully visible face when the user drags the cube to a different position. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFace method ensures that specified face is fully displayed on the control. The VisibleFace property specifies the visible face.


property AlwaysEnsureVisibleFace

property TreeCube.AlwaysEnsureVisibleFace as EnsureVisibleFaceEnum
Ensures that always the face fits the control's client area.

Type | Description
EnsureVisibleFaceEnum | An EnsureVisibleFaceEnum expression that specifies if the dragging face gets fully visible when user drags the cube.
By default, the AlwaysEnsureVisibleFace property is exFitToEnsureFace. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFace method ensures that specified face is fully displayed on the control. The VisibleFace property specifies the visible face. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it. The EnsureVisibleFaceOnDblClick property ensures that the face being double clicked fits the cube's client area.

The control may fire the following events, when the user drags the cube to a new position, or if the EnsureVisibleFace / VisibleFace method is called:

  • LayoutStartChanging event notifies that the user starts dragging the cube.
  • Rotate / Zoom occurs when any of the following properties RotX, RotY, Zoom are updated
  • Move event occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
  • LayoutEndChanging event notifies that the user ends dragging the cube.


property AnchorFromPoint

property TreeCube.AnchorFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as String
Retrieves the identifier of the anchor from point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
String | A String expression that determines the anchor-identifier from the cursor.
The AnchorFromPoint property retrieves the identifier of the anchor from point. The FaceFromPoint property retrieves the face of the cube from the cursor. The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property Appearance

property TreeCube.Appearance as AppearanceEnum
Retrieves or sets the control's appearance.

Type | Description
AppearanceEnum | An AppearanceEnum expression that indicates the control's appearance, or a color expression whose last 7 bits in the high significant byte of the value indicates the index of the skin in the Appearance collection, being displayed as control's borders. For instance, if the Appearance = 0x1000000, indicates that the first skin object in the Appearance collection defines the control's border. The Client object in the skin, defines the client area of the control. The list/hierarchy, scrollbars are always shown in the control's client area. The skin may contain transparent objects, and so you can define round corners. The shadow.ebn file contains such of objects. Use the eXButton's Skin builder to view or change this file
By default. the Appearance property is None2, so no border is shown. The Appearance property changes the control's border.

The following screen shot shows the control's border using an EBN object:

The following samples shows how you can assign and display an EBN object on the control's border:

VBA (MS Access, Excell...)

With TreeCube1
    .VisualAppearance.Add 1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn"
    .Appearance = 16777216 ' &H1000000
End With

VB6

With TreeCube1
    .VisualAppearance.Add 1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn"
    .Appearance = &H1000000
End With

VB.NET

With Extreecube1
    .VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
    .Appearance = &H1000000
End With

VB.NET for /COM

With AxTreeCube1
    .VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
    .Appearance = &H1000000
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->GetVisualAppearance()->Add(1,"E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn");
spTreeCube1->PutAppearance(EXTREECUBELib::AppearanceEnum(0x1000000));

C++ Builder

TreeCube1->VisualAppearance->Add(1,TVariant("E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn"));
TreeCube1->Appearance = Extreecubelib_tlb::AppearanceEnum(0x1000000);

C#

extreecube1.VisualAppearance.Add(1,"E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn");
extreecube1.Appearance = (exontrol.EXTREECUBELib.AppearanceEnum)0x1000000;

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.VisualAppearance.Add(1,"E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn");
    TreeCube1.Appearance = 16777216;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .VisualAppearance.Add 1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn"
        .Appearance = 16777216 ' &H1000000
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.VisualAppearance.Add(1,"E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn");
axTreeCube1.Appearance = (EXTREECUBELib.AppearanceEnum)0x1000000;

X++ (Dynamics Ax 2009)

public void init()
{
    ;

    super();

    extreecube1.VisualAppearance().Add(1,"E:\\Exontrol\\ExButton\\sample\\EBN\\Assorted\\shadow.ebn");
    extreecube1.Appearance(16777216);
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    VisualAppearance.Add(1,'E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn');
    Appearance := EXTREECUBELib.AppearanceEnum($1000000);
end

Delphi (standard)

with TreeCube1 do
begin
    VisualAppearance.Add(1,'E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn');
    Appearance := EXTREECUBELib_TLB.AppearanceEnum($1000000);
end

VFP

with thisform.TreeCube1
    .VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
    .Appearance = 16777216 && 0x1000000
endwith

dBASE Plus

local oTreeCube

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
oTreeCube.Appearance = 16777216 /*0x1000000 | */

XBasic (Alpha Five)

Dim oTreeCube as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
oTreeCube.Appearance = 16777216 '1000000 +

Visual Objects

oDCOCX_Exontrol1:VisualAppearance:Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
oDCOCX_Exontrol1:Appearance := 0x1000000 |

PowerBuilder

OleObject oTreeCube

oTreeCube = ole_1.Object
oTreeCube.VisualAppearance.Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
oTreeCube.Appearance = 16777216 /*0x1000000 | */

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Variant voAppearance
    Get ComVisualAppearance to voAppearance
    Handle hoAppearance
    Get Create (RefClass(cComAppearance)) to hoAppearance
    Set pvComObject of hoAppearance to voAppearance
        Get ComAdd of hoAppearance 1 "E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn" to Nothing
    Send Destroy to hoAppearance
    Set ComAppearance to |CI$1000000
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:VisualAppearance():Add(1,"E:\Exontrol\ExButton\sample\EBN\Assorted\shadow.ebn")
        oTreeCube:Appearance := 16777216/*0x1000000+*/

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method AttachTemplate

method TreeCube.AttachTemplate (Template as Variant)
Attaches a script to the current object, including the events, from a string, file, a safe array of bytes.

Type | Description
Template as Variant | A string expression that specifies the Template to execute.
The AttachTemplate/x-script code is a simple way of calling control/object's properties, methods/events using strings. The AttachTemplate features allows you to attach a x-script code to the component. The AttachTemplate method executes x-script code ( including events ), from a string, file or a safe array of bytes. This feature allows you to run any x-script code for any configuration of the component /COM, /NET or /WPF. Exontrol owns the x-script implementation in its easiest form and it does not require any VB engine or whatever to get executed. The x-script code can be converted to several programming languages using the eXHelper tool.

The following sample opens the Windows Internet Explorer once the user clicks the control ( /COM version ):

AttachTemplate("handle Click(){ CreateObject(`internetexplorer.application`){ Visible = True; Navigate(`https://www.exontrol.com`) } } ")

This script is equivalent with the following VB code:

Private Sub TreeCube1_Click()
    With CreateObject("internetexplorer.application")
        .Visible = True
        .Navigate ("https://www.exontrol.com")
    End With
End Sub

The AttachTemplate/x-script syntax in BNF notation is defined like follows:

<x-script> := <lines>
<lines> := <line>[<eol> <lines>] | <block>
<block> := <call> [<eol>] { [<eol>] <lines> [<eol>] } [<eol>]
<eol> := ";" | "\r\n"
<line> := <dim> | <createobject> | <call> | <set> | <comment> | <handle>[<eol>]{[<eol>]<lines>[<eol>]}[<eol>]
<dim> := "DIM" <variables>
<variables> := <variable> [, <variables>]
<variable> := "ME" | <identifier>
<createobject> := "CREATEOBJECT(`"<type>"`)"
<call> := <variable> | <property> | <variable>"."<property> | <createobject>"."<property>
<property> := [<property>"."]<identifier>["("<parameters>")"]
<set> := <call> "=" <value>
<property> := <identifier> | <identifier>"("[<parameters>]")"
<parameters> := <value> [","<parameters>]
<value> := <boolean> | <number> | <color> | <date> | <string> | <createobject> | <call>
<boolean> := "TRUE" | "FALSE"
<number> := "0X"<hexa> | ["-"]<integer>["."<integer>]
<digit10> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<digit16> := <digit10> | A | B | C | D | E | F
<integer> := <digit10>[<integer>]
<hexa> := <digit16>[<hexa>]
<color> := "RGB("<integer>","<integer>","<integer>")"
<date> := "#"<integer>"/"<integer>"/"<integer>" "[<integer>":"<integer>":"<integer>"]"#"
<string> := '"'<text>'"' | "`"<text>"`"
<comment> := "'"<text>
<handle> := "handle " <event>
<event> := <identifier>"("[<eparameters>]")"
<eparameters> := <eparameter> [","<eparameters>]
<parameters> := <identifier>

where:

<identifier> indicates an identifier of the variable, property, method or event, and should start with a letter.
<type> indicates the type the CreateObject function creates, as a progID for /COM version or the assembly-qualified name of the type to create for /NET or /WPF version
<text> any string of characters

The Template or x-script is composed by lines of instructions. Instructions are separated by "\n\r" ( newline characters ) or ";" character.

The advantage of the AttachTemplate relative to Template / ExecuteTemplate is that the AttachTemplate can add handlers to the control events.


property BackColor

property TreeCube.BackColor as Color
Specifies the control's background color.

Type | Description
Color | A Color expression that indicates the control's background color.
The BackColor property specifies the control's background color. The ForeColor property specifies the control's foreground color The TexturePicturePath property specifies the path to load the faces/pictures. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.


property Background

property TreeCube.Background(Part as BackgroundPartEnum) as Color
Returns or sets a value that indicates the background color for parts in the control.

Type | Description
Part as BackgroundPartEnum | A BackgroundPartEnum expression that indicates a part in the control.
Color | A Color expression that indicates the background color for a specified part. The last 7 bits in the high significant byte of the color to indicates the identifier of the skin being used. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the background's part.

The Background property specifies a background color or a visual appearance for specific parts in the control. If the Background property is 0, the control draws the part as default. Use the Add method to add new skins to the control. Use the Remove method to remove a specific skin from the control. Use the Clear method to remove all skins in the control. Use the BeginUpdate and EndUpdate methods to maintain performance while init the control. Use the Refresh method to refresh the control.

How can I use the Background property?

VBA (MS Access, Excell...)

With TreeCube1
    .BeginUpdate
    .VisualAppearance.Add 1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn"
    .Background(8) = &H1000000
    .Background(7) = RGB(250,250,250)
    .Background(6) = RGB(250,250,250)
    .Background(9) = &H2000000
    .Background(31) = RGB(255,255,255)
    .TexturePicturePath = ""
    With .FrontFace.CreateCalendar
        .Date = #1/1/2016#
        .AutoSize = 1
        .MaxMonthX = .MinMonthX
        .MaxMonthY = .MinMonthY
    End With
    .EndUpdate
End With

VB6

With TreeCube1
    .BeginUpdate
    .VisualAppearance.Add 1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn"
    .Background(exDateHeader) = &H1000000
    .Background(exWeeksHeader) = RGB(250,250,250)
    .Background(exDaysHeader) = RGB(250,250,250)
    .Background(exDateTodayUp) = &H2000000
    .Background(exDateTodayForeColor) = RGB(255,255,255)
    .TexturePicturePath = ""
    With .FrontFace.CreateCalendar
        .Date = #1/1/2016#
        .AutoSize = exFitClient
        .MaxMonthX = .MinMonthX
        .MaxMonthY = .MinMonthY
    End With
    .EndUpdate
End With

VB.NET

With Extreecube1
    .BeginUpdate()
    .VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
    .set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateHeader,&H1000000)
    .set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exWeeksHeader,Color.FromArgb(250,250,250))
    .set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exDaysHeader,Color.FromArgb(250,250,250))
    .set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateTodayUp,&H2000000)
    .set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateTodayForeColor,Color.FromArgb(255,255,255))
    .TexturePicturePath = ""
    With .FrontFace.CreateCalendar()
        .Date = #1/1/2016#
        .AutoSize = exontrol.EXTREECUBELib.AutoSizeEnum.exFitClient
        .MaxMonthX = .MinMonthX
        .MaxMonthY = .MinMonthY
    End With
    .EndUpdate()
End With

VB.NET for /COM

With AxTreeCube1
    .BeginUpdate()
    .VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exDateHeader,16777216)
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exWeeksHeader,16448250)
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exDaysHeader,16448250)
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayUp,33554432)
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayForeColor,16777215)
    .TexturePicturePath = ""
    With .FrontFace.CreateCalendar()
        .Date = #1/1/2016#
        .AutoSize = EXTREECUBELib.AutoSizeEnum.exFitClient
        .MaxMonthX = .MinMonthX
        .MaxMonthY = .MinMonthY
    End With
    .EndUpdate()
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
spTreeCube1->GetVisualAppearance()->Add(1,"C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn");
spTreeCube1->PutBackground(EXTREECUBELib::exDateHeader,0x1000000);
spTreeCube1->PutBackground(EXTREECUBELib::exWeeksHeader,RGB(250,250,250));
spTreeCube1->PutBackground(EXTREECUBELib::exDaysHeader,RGB(250,250,250));
spTreeCube1->PutBackground(EXTREECUBELib::exDateTodayUp,0x2000000);
spTreeCube1->PutBackground(EXTREECUBELib::exDateTodayForeColor,RGB(255,255,255));
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceCalendarPtr var_FaceCalendar = spTreeCube1->GetFrontFace()->CreateCalendar();
    var_FaceCalendar->PutDate(COleDateTime(2016,1,1,0,00,00).operator DATE());
    var_FaceCalendar->PutAutoSize(EXTREECUBELib::exFitClient);
    var_FaceCalendar->PutMaxMonthX(var_FaceCalendar->GetMinMonthX());
    var_FaceCalendar->PutMaxMonthY(var_FaceCalendar->GetMinMonthY());
spTreeCube1->EndUpdate();

C++ Builder

TreeCube1->BeginUpdate();
TreeCube1->VisualAppearance->Add(1,TVariant("C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn"));
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exDateHeader] = 0x1000000;
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exWeeksHeader] = RGB(250,250,250);
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exDaysHeader] = RGB(250,250,250);
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exDateTodayUp] = 0x2000000;
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exDateTodayForeColor] = RGB(255,255,255);
TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceCalendarPtr var_FaceCalendar = TreeCube1->FrontFace->CreateCalendar();
    var_FaceCalendar->Date = TDateTime(2016,1,1).operator double();
    var_FaceCalendar->AutoSize = Extreecubelib_tlb::AutoSizeEnum::exFitClient;
    var_FaceCalendar->MaxMonthX = var_FaceCalendar->MinMonthX;
    var_FaceCalendar->MaxMonthY = var_FaceCalendar->MinMonthY;
TreeCube1->EndUpdate();

C#

extreecube1.BeginUpdate();
extreecube1.VisualAppearance.Add(1,"C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn");
extreecube1.set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateHeader,0x1000000);
extreecube1.set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exWeeksHeader,Color.FromArgb(250,250,250));
extreecube1.set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exDaysHeader,Color.FromArgb(250,250,250));
extreecube1.set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateTodayUp,0x2000000);
extreecube1.set_Background(exontrol.EXTREECUBELib.BackgroundPartEnum.exDateTodayForeColor,Color.FromArgb(255,255,255));
extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceCalendar var_FaceCalendar = extreecube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Date = Convert.ToDateTime("1/1/2016",System.Globalization.CultureInfo.GetCultureInfo("en-US"));
    var_FaceCalendar.AutoSize = exontrol.EXTREECUBELib.AutoSizeEnum.exFitClient;
    var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX;
    var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY;
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    TreeCube1.VisualAppearance.Add(1,"C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn");
    TreeCube1.Background(8) = 16777216;
    TreeCube1.Background(7) = 16448250;
    TreeCube1.Background(6) = 16448250;
    TreeCube1.Background(9) = 33554432;
    TreeCube1.Background(31) = 16777215;
    TreeCube1.TexturePicturePath = "";
    var var_FaceCalendar = TreeCube1.FrontFace.CreateCalendar();
        var_FaceCalendar.Date = "1/1/2016";
        var_FaceCalendar.AutoSize = 1;
        var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX;
        var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY;
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        .VisualAppearance.Add 1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn"
        .Background(8) = &H1000000
        .Background(7) = RGB(250,250,250)
        .Background(6) = RGB(250,250,250)
        .Background(9) = &H2000000
        .Background(31) = RGB(255,255,255)
        .TexturePicturePath = ""
        With .FrontFace.CreateCalendar
            .Date = #1/1/2016#
            .AutoSize = 1
            .MaxMonthX = .MinMonthX
            .MaxMonthY = .MinMonthY
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.BeginUpdate();
axTreeCube1.VisualAppearance.Add(1,"C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn");
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exDateHeader,0x1000000);
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exWeeksHeader,(uint)ColorTranslator.ToWin32(Color.FromArgb(250,250,250)));
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exDaysHeader,(uint)ColorTranslator.ToWin32(Color.FromArgb(250,250,250)));
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayUp,0x2000000);
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayForeColor,(uint)ColorTranslator.ToWin32(Color.FromArgb(255,255,255)));
axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceCalendar var_FaceCalendar = axTreeCube1.FrontFace.CreateCalendar();
    var_FaceCalendar.Date = Convert.ToDateTime("1/1/2016",System.Globalization.CultureInfo.GetCultureInfo("en-US"));
    var_FaceCalendar.AutoSize = EXTREECUBELib.AutoSizeEnum.exFitClient;
    var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX;
    var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY;
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_FaceCalendar;
    anytype var_FaceCalendar;
    ;

    super();

    extreecube1.BeginUpdate();
    extreecube1.VisualAppearance().Add(1,"C:\\Program Files\\Exontrol\\ExButton\\Sample\\EBN\\Assorted\\calendar_single.ebn");
    extreecube1.Background(8/*exDateHeader*/,0x1000000);
    extreecube1.Background(7/*exWeeksHeader*/,WinApi::RGB2int(250,250,250));
    extreecube1.Background(6/*exDaysHeader*/,WinApi::RGB2int(250,250,250));
    extreecube1.Background(9/*exDateTodayUp*/,0x2000000);
    extreecube1.Background(31/*exDateTodayForeColor*/,WinApi::RGB2int(255,255,255));
    extreecube1.TexturePicturePath("");
    var_FaceCalendar = extreecube1.FrontFace().CreateCalendar(); com_FaceCalendar = var_FaceCalendar;
        com_FaceCalendar.Date(str2Date("1/1/2016",213));
        com_FaceCalendar.AutoSize(1/*exFitClient*/);
        com_FaceCalendar.MaxMonthX(com_FaceCalendar.MinMonthX());
        com_FaceCalendar.MaxMonthY(com_FaceCalendar.MinMonthY());
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    BeginUpdate();
    VisualAppearance.Add(1,'C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn');
    set_Background(EXTREECUBELib.BackgroundPartEnum.exDateHeader,$1000000);
    set_Background(EXTREECUBELib.BackgroundPartEnum.exWeeksHeader,$fafafa);
    set_Background(EXTREECUBELib.BackgroundPartEnum.exDaysHeader,$fafafa);
    set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayUp,$2000000);
    set_Background(EXTREECUBELib.BackgroundPartEnum.exDateTodayForeColor,$ffffff);
    TexturePicturePath := '';
    with FrontFace.CreateCalendar() do
    begin
        Date := '1/1/2016';
        AutoSize := EXTREECUBELib.AutoSizeEnum.exFitClient;
        MaxMonthX := MinMonthX;
        MaxMonthY := MinMonthY;
    end;
    EndUpdate();
end

Delphi (standard)

with TreeCube1 do
begin
    BeginUpdate();
    VisualAppearance.Add(1,'C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn');
    Background[EXTREECUBELib_TLB.exDateHeader] := $1000000;
    Background[EXTREECUBELib_TLB.exWeeksHeader] := $fafafa;
    Background[EXTREECUBELib_TLB.exDaysHeader] := $fafafa;
    Background[EXTREECUBELib_TLB.exDateTodayUp] := $2000000;
    Background[EXTREECUBELib_TLB.exDateTodayForeColor] := $ffffff;
    TexturePicturePath := '';
    with FrontFace.CreateCalendar() do
    begin
        Date := '1/1/2016';
        AutoSize := EXTREECUBELib_TLB.exFitClient;
        MaxMonthX := MinMonthX;
        MaxMonthY := MinMonthY;
    end;
    EndUpdate();
end

VFP

with thisform.TreeCube1
    .BeginUpdate
    .VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
    .Object.Background(8) = 0x1000000
    .Object.Background(7) = RGB(250,250,250)
    .Object.Background(6) = RGB(250,250,250)
    .Object.Background(9) = 0x2000000
    .Object.Background(31) = RGB(255,255,255)
    .TexturePicturePath = ""
    with .FrontFace.CreateCalendar
        .Date = {^2016-1-1}
        .AutoSize = 1
        .MaxMonthX = .MinMonthX
        .MaxMonthY = .MinMonthY
    endwith
    .EndUpdate
endwith

dBASE Plus

local oTreeCube,var_FaceCalendar

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
oTreeCube.VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
oTreeCube.Template = [Background(8) = 16777216] // oTreeCube.Background(8) = 0x1000000
oTreeCube.Template = [Background(7) = 16448250] // oTreeCube.Background(7) = 0xfafafa
oTreeCube.Template = [Background(6) = 16448250] // oTreeCube.Background(6) = 0xfafafa
oTreeCube.Template = [Background(9) = 33554432] // oTreeCube.Background(9) = 0x2000000
oTreeCube.Template = [Background(31) = 16777215] // oTreeCube.Background(31) = 0xffffff
oTreeCube.TexturePicturePath = ""
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = "01/01/2016"
    var_FaceCalendar.AutoSize = 1
    var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX
    var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY
oTreeCube.EndUpdate()

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_FaceCalendar as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
oTreeCube.VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
oTreeCube.Template = "Background(8) = 16777216" // oTreeCube.Background(8) = 16777216
oTreeCube.Template = "Background(7) = 16448250" // oTreeCube.Background(7) = 16448250
oTreeCube.Template = "Background(6) = 16448250" // oTreeCube.Background(6) = 16448250
oTreeCube.Template = "Background(9) = 33554432" // oTreeCube.Background(9) = 33554432
oTreeCube.Template = "Background(31) = 16777215" // oTreeCube.Background(31) = 16777215
oTreeCube.TexturePicturePath = ""
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = {01/01/2016}
    var_FaceCalendar.AutoSize = 1
    var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX
    var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY
oTreeCube.EndUpdate()

Visual Objects

local var_FaceCalendar as IFaceCalendar

oDCOCX_Exontrol1:BeginUpdate()
oDCOCX_Exontrol1:VisualAppearance:Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
oDCOCX_Exontrol1:[Background,exDateHeader] := 0x1000000
oDCOCX_Exontrol1:[Background,exWeeksHeader] := RGB(250,250,250)
oDCOCX_Exontrol1:[Background,exDaysHeader] := RGB(250,250,250)
oDCOCX_Exontrol1:[Background,exDateTodayUp] := 0x2000000
oDCOCX_Exontrol1:[Background,exDateTodayForeColor] := RGB(255,255,255)
oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceCalendar := oDCOCX_Exontrol1:FrontFace:CreateCalendar()
    var_FaceCalendar:Date := SToD("20160101")
    var_FaceCalendar:AutoSize := exFitClient
    var_FaceCalendar:MaxMonthX := var_FaceCalendar:MinMonthX
    var_FaceCalendar:MaxMonthY := var_FaceCalendar:MinMonthY
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

OleObject oTreeCube,var_FaceCalendar

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
oTreeCube.VisualAppearance.Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
oTreeCube.Background(8,16777216 /*0x1000000*/)
oTreeCube.Background(7,RGB(250,250,250))
oTreeCube.Background(6,RGB(250,250,250))
oTreeCube.Background(9,33554432 /*0x2000000*/)
oTreeCube.Background(31,RGB(255,255,255))
oTreeCube.TexturePicturePath = ""
var_FaceCalendar = oTreeCube.FrontFace.CreateCalendar()
    var_FaceCalendar.Date = 2016-01-01
    var_FaceCalendar.AutoSize = 1
    var_FaceCalendar.MaxMonthX = var_FaceCalendar.MinMonthX
    var_FaceCalendar.MaxMonthY = var_FaceCalendar.MinMonthY
oTreeCube.EndUpdate()

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voAppearance
    Get ComVisualAppearance to voAppearance
    Handle hoAppearance
    Get Create (RefClass(cComAppearance)) to hoAppearance
    Set pvComObject of hoAppearance to voAppearance
        Get ComAdd of hoAppearance 1 "C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn" to Nothing
    Send Destroy to hoAppearance
    Set ComBackground OLEexDateHeader to |CI$1000000
    Set ComBackground OLEexWeeksHeader to (RGB(250,250,250))
    Set ComBackground OLEexDaysHeader to (RGB(250,250,250))
    Set ComBackground OLEexDateTodayUp to |CI$2000000
    Set ComBackground OLEexDateTodayForeColor to (RGB(255,255,255))
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceCalendar
        Get ComCreateCalendar of hoFace to voFaceCalendar
        Handle hoFaceCalendar
        Get Create (RefClass(cComFaceCalendar)) to hoFaceCalendar
        Set pvComObject of hoFaceCalendar to voFaceCalendar
            Set ComDate of hoFaceCalendar to "1/1/2016"
            Set ComAutoSize of hoFaceCalendar to OLEexFitClient
            Set ComMaxMonthX of hoFaceCalendar to (ComMinMonthX(hoFaceCalendar))
            Set ComMaxMonthY of hoFaceCalendar to (ComMinMonthY(hoFaceCalendar))
        Send Destroy to hoFaceCalendar
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceCalendar
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:BeginUpdate()
        oTreeCube:VisualAppearance():Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
        oTreeCube:SetProperty("Background",8/*exDateHeader*/,0x1000000)
        oTreeCube:SetProperty("Background",7/*exWeeksHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
        oTreeCube:SetProperty("Background",6/*exDaysHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
        oTreeCube:SetProperty("Background",9/*exDateTodayUp*/,0x2000000)
        oTreeCube:SetProperty("Background",31/*exDateTodayForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
        oTreeCube:TexturePicturePath := ""
        oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
            oFaceCalendar:Date := "01/01/2016"
            oFaceCalendar:AutoSize := 1/*exFitClient*/
            oFaceCalendar:MaxMonthX := oFaceCalendar:MinMonthX()
            oFaceCalendar:MaxMonthY := oFaceCalendar:MinMonthY()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


method BeginUpdate

method TreeCube.BeginUpdate ()
Maintains performance when items are added to the control one at a time.

Type Description
This method prevents the control from painting until the EndUpdate method is called.


property BottomFace

property TreeCube.BottomFace as Face
Returns the bottom face of the cube.

Type | Description
Face | A Face object that indicates the bottom face of the cube.

The Face(exBottomFace) or BottomFace property returns the face on the bottom. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


method CancelLayoutChanging

method TreeCube.CancelLayoutChanging ()
Cancels the current layout changing operation.

Type Description


property CheckBoxHeight

property TreeCube.CheckBoxHeight as Long
Gets or sets a value that indicates the height in pixels to display the check-boxes.

Type | Description
Long | A Long expression that specifies the height in pixels, of the check-box.

By default, the CheckBoxHeight property is 16. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button.


property CheckBoxWidth

property TreeCube.CheckBoxWidth as Long
Gets or sets a value that indicates the width in pixels to display the check-boxes.

Type | Description
Long | A Long expression that specifies the width in pixels, of the check-box.

By default, the CheckBoxWidth property is 16. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button.


property DefaultFaceType

property TreeCube.DefaultFaceType as FaceTypeEnum
Specifies the default type of control to put on all faces.

Type | Description
FaceTypeEnum | A FaceTypeEnum property that specifies the default type of control to put on all faces.
The DefaultFaceType property specifies the default type of control to put on all faces. The Type property specifies the type of the face. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

A face that contains a Picture control may fire any of the following events ( CreatePicture, Type on exFacePicture ):

  • InitFacePicture event ( InitFaceContent event )

The InitFaceContent event notifies your application that the Type property has been changed, or any of the following has been called:

  • CreatePicture method
  • CreateCalendar method
  • CreateTree method


property DownFace

property TreeCube.DownFace as Face
Returns the down face of the cube.

Type | Description
Face | A Face object that indicates the down face of the cube.
The Face(exDownFace) or DownFace property returns down face. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exTopFace) or TopFace property returns the top face.


property Enabled

property TreeCube.Enabled as Boolean
Enables or disables the control.

Type | Description
Boolean | A boolean expression that determines whether an control can respond to user-generated events.
By default, the Enabled property is True. The Enabled property specifies whether the entire control is enabled or disabled. The Enabled property enables or disables the column. The Enabled property specifies whether the item is enabled or disabled. The Enabled property specifies whether a Face is enabled or disabled.


method EndUpdate

method TreeCube.EndUpdate ()
Resumes painting the control after painting is suspended by the BeginUpdate method.

Type Description
The BeginUpdate and EndUpdate methods increases the speed of loading your items, by preventing painting the control when it suffers any change. Once that BeginUpdate method was called, you have to make sure that EndUpdate method will be called too.


method EnsureVisibleFace

method TreeCube.EnsureVisibleFace (Face as FaceEnum, [Animation as Variant])
Ensures that giving face fits the control's client area.

Type | Description
Face as FaceEnum | A FaceEnum expression that specifies the face to get it on front
Animation as Variant | A Boolean expression that specifies whether animation is performed. If missing, the Animation parameter is True.
The EnsureVisibleFace method ensures that specified face is fully displayed on the control. The VisibleFace property specifies the visible face. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it. The EnsureVisibleFaceOnDblClick property ensures that the face being double clicked fits the cube's client area.

The control may fire the following events, when the user drags the cube to a new position, or if the EnsureVisibleFace / VisibleFace method is called:

  • LayoutStartChanging event notifies that the user starts dragging the cube.
  • Rotate / Zoom occurs when any of the following properties RotX, RotY, Zoom are updated
  • Move event occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
  • LayoutEndChanging event notifies that the user ends dragging the cube.


property EnsureVisibleFaceMargin

property TreeCube.EnsureVisibleFaceMargin as Long
Specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it.

Type | Description
Long | A Long expression that specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it.
By default, the EnsureVisibleFaceMargin property is 16. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it. The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFace method ensures that specified face is fully displayed on the control. The VisibleFace property specifies the visible face. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The EnsureVisibleFaceOnDblClick property ensures that the face being double clicked fits the cube's client area. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face.

The control may fire the following events, when the user drags the cube to a new position, or if the EnsureVisibleFace / VisibleFace method is called:

  • LayoutStartChanging event notifies that the user starts dragging the cube.
  • Rotate / Zoom occurs when any of the following properties RotX, RotY, Zoom are updated
  • Move event occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
  • LayoutEndChanging event notifies that the user ends dragging the cube.


property EnsureVisibleFaceOnDblClick

property TreeCube.EnsureVisibleFaceOnDblClick as Boolean
Ensures that the face being double clicked fits the cube's client area.

Type | Description
Boolean | A Boolean expression that ensures that the face being double clicked fits the cube's client area.
By default, the EnsureVisibleFaceOnDblClick property is True. Use the EnsureVisibleFaceOnDblClick property to prevent ensuring visible the face being double-clicked. The ExpandOnDblClick property specifies whether the item being double-clicked gets expanded or collapsed, in a face of tree type. The DblClick event occurs once the user double-clicks any face of the control. By default, the face being double-clicked gets visible. The FaceFromPoint property retrieves the index of the face from the cursor. The AnchorFromPoint proeprty retrieves the key of the hyperlink/anchor from the cursor. Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers. The control fires the Move event once a new face became visible, by moving/rotating from a face to another, into the giving direction. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. The EnsureVisibleFaces property specifies the faces that can be fully visible.


property EnsureVisibleFaces

property TreeCube.EnsureVisibleFaces as String
Specifies the comma-separated list of faces that can be visible.

Type | Description
String | A String expression that specifies the comma-separated list of faces that can be visible.
By default, the EnsureVisibleFaces property is "0,2,1,3,4,5". The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFace method ensures that specified face is fully displayed on the control. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The VisibleFace property specifies the visible face. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it. The EnsureVisibleFaceOnDblClick property ensures that the face being double clicked fits the cube's client area.

The control may fire the following events, when the user drags the cube to a new position, or if the EnsureVisibleFace / VisibleFace method is called:

  • LayoutStartChanging event notifies that the user starts dragging the cube.
  • Rotate / Zoom occurs when any of the following properties RotX, RotY, Zoom are updated
  • Move event occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
  • LayoutEndChanging event notifies that the user ends dragging the cube.


property EventParam

property TreeCube.EventParam(Parameter as Long) as Variant
Retrieves or sets a value that indicates the current's event parameter.

Type | Description
Parameter as Long | A long expression that indicates the index of the parameter being requested ie 0 means the first parameter, 1 means the second, and so on. If -1 is used the EventParam property retrieves the number of parameters. Accessing an not-existing parameter produces an OLE error, such as invalid pointer ( E_POINTER )
Variant | A VARIANT expression that specifies the parameter's value.
The EventParam method is provided to allow changing the event's parameters passed by reference, even if your environment does not support changing it ( uniPaas 1.5 (formerly known as eDeveloper), DBase, and so on ). For instance, Unipaas event-handling logic cannot update ActiveX control variables by updating the received arguments. The EventParam(0) retrieves the value of the first parameter of the event, while the EventParam(1) = 0, changes the value of the second parameter to 0 ( the operation is successfully, only if the parameter is passed by reference ). The EventParam(-1) retrieves the number of the parameters of the current event.

Let's take the event "event KeyDown (KeyCode as Integer, ByVal Shift as Integer)", where the KeyCode parameter is passed by reference. For instance, put the KeyCode parameter on 0, and the arrow keys are disabled while the control has the focus.

In most languages you will type something like:

Private Sub Control1_KeyDown(KeyCode As Integer, Shift As Integer)
    KeyCode = 0
End Sub

In case your environment does not support events with parameters by reference, you can use a code like follows:

Private Sub Control1_KeyDown(KeyCode As Integer, Shift As Integer)
    Control1.EventParam(0) = 0
End Sub

In other words, the EventParam property provides the parameters of the current event for reading or writing access, even if your environment does not allow changing parameters by reference.

Calling the EventParam property outside of an event produces an OLE error, such as pointer invalid, as its scope was designed to be used only during events.


method ExecuteTemplate

method TreeCube.ExecuteTemplate (Template as String)
Executes a template and returns the result.

Type | Description
Template as String | A Template string being executed
Return | Description
Variant | A Variant expression that indicates the result after executing the Template.
Use the ExecuteTemplate property to returns the result of executing a template file. Use the Template property to execute a template without returning any result. Use the ExecuteTemplate property to execute code by passing instructions as a string ( template string ).

For instance, the following sample retrieves the control's background color:

Debug.Print TreeCube1.ExecuteTemplate("BackColor")

Most of our UI components provide a Template page that's accessible in design mode. No matter what programming language you are using, you can have a quick view of the component's features using the WYSWYG Template editor.

  • Place the control to your form or dialog.
  • Locate the Properties item, in the control's context menu, in design mode. If your environment doesn't provide a Properties item in the control's context menu, please try to locate in the Properties browser.
  • Click it, and locate the Template page.
  • Click the Help button. In the left side, you will see the component, in the right side, you will see a x-script code that calls methods and properties of the control.

The control's Template page helps user to initialize the control's look and feel in design mode, using the x-script language that's easy and powerful. The Template page displays the control on the left side of the page. On the right side of the Template page, a simple editor is displayed where user writes the initialization code. The control's look and feel is automatically updated as soon as the user types new instructions. The Template script is saved to the container persistence ( when Apply button is pressed ), and it is executed when the control is initialized at runtime. Any component that provides a WYSWYG Template page, provides a Template property. The Template property executes code from a string ( template string ).

The Template or x-script is composed by lines of instructions. Instructions are separated by "\n\r" ( newline characters ) or ";" character. The ; character may be available only for newer versions of the components.

An x-script instruction/line can be one of the following:

  • Dim list of variables Declares the variables. Multiple variables are separated by commas. ( Sample: Dim h, h1, h2 )
  • variable = property( list of arguments ) Assigns the result of the property to a variable. The "variable" is the name of a declared variable. The "property" is the property name of the object in the context. The "list or arguments" may include variables or values separated by commas. ( Sample: h = InsertItem(0,"New Child") )
  • property( list of arguments ) = value Changes the property. The value can be a variable, a string, a number, a boolean value or a RGB value.
  • method( list of arguments ) Invokes the method. The "list or arguments" may include variables or values separated by commas.
  • { Beginning the object's context. The properties or methods called between { and } are related to the last object returned by the property prior to { declaration.
  • } Ending the object's context
  • object. property( list of arguments ).property( list of arguments ).... The .(dot) character splits the object from its property. For instance, the Columns.Add("Column1").HeaderBackColor = RGB(255,0,0), adds a new column and changes the column's header back color.

The x-script may uses constant expressions as follow:

  • boolean expression with possible values as True or False
  • numeric expression may starts with 0x which indicates a hexa decimal representation, else it should starts with digit, or +/- followed by a digit, and . is the decimal separator. Sample: 13 indicates the integer 13, or 12.45 indicates the double expression 12,45
  • date expression is delimited by # character in the format #mm/dd/yyyy hh:mm:ss#. Sample: #31/12/1971# indicates the December 31, 1971
  • string expression is delimited by " or ` characters. If using the ` character, please make sure that it is different than ' which allows adding comments inline. Sample: "text" indicates the string text.

Also , the template or x-script code may support general functions as follows:

  • Me property indicates the original object.
  • RGB(R,G,B) property retrieves an RGB value, where the R, G, B are byte values that indicates the R G B values for the color being specified. For instance, the following code changes the control's background color to red: BackColor = RGB(255,0,0)
  • LoadPicture(file) property loads a picture from a file or from BASE64 encoded strings, and returns a Picture object required by the picture properties.
  • CreateObject(progID) property creates and retrieves a single uninitialized object of the class associated with a specified program identifier.


property Face

property TreeCube.Face (Index as FaceEnum) as Face
Returns the giving face of the cube.

Type | Description
Index as FaceEnum | A FaceEnum expression that indicates the face being retrieved.
Face | A Face object retrieved
The Face property specifies a 2D picture on the face of the cube. Cube map texturing is a form of texture mapping that uses a 3D direction vector to index into a texture that is six 2D textures arranged like the faces of a cube. Again consider the environment around you now. You can "capture" a 360 degree view of your surroundings by standing in one place and taking six photographs each at an orthogonal 90 degree view from the others. The rendering method of the environment texture is an image ordered method (we scan pixels by final image scanlines) than imply that high resolution textures are rendered nearly as fast as low resolution textures. The rendering speed increase as final image resolution increase. The Index property specifies the index of the face.

Below is a set of six such images that capture an indoor environment ( in our case a car ):

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the front.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


property FaceFromPoint

property TreeCube.FaceFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS) as FaceEnum
Retrieves the index of the face from the point.

Type | Description
X as OLE_XPOS_PIXELS | A single expression that indicates the X position in client coordinate
Y as OLE_YPOS_PIXELS | A single expression that indicates the Y position in client coordinate
FaceEnum | A FaceEnum expression that indicates the index of the face from the cursor. You can use the Face property to access the Face object giving its index.
The FaceFromPoint property retrieves the face of the cube from the cursor. The AnchorFromPoint property retrieves the identifier of the anchor from point. The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.


property Font

property TreeCube.Font as IFontDisp

Retrieves or sets the control's font.

Type | Description
IFontDisp | A Font object used to paint the items.

Use the Font property to change the control's font . Use the Refresh method to refresh the control. Use the BeginUpdate and EndUpdate method to maintain performance while adding new columns or items.

The following VB sample assigns by code a new font to the control:

With TreeCube1
    With .Font
        .Name = "Tahoma"
    End With
    .Refresh
End With

The following C++ sample assigns by code a new font to the control:

COleFont font = m_tree.GetFont();
font.SetName( "Tahoma" );
m_tree.Refresh();

the C++ sample requires definition of COleFont class ( #include "Font.h" )

The following VB.NET sample assigns by code a new font to the control:

With AxTreeCube1
    Dim font As System.Drawing.Font = New System.Drawing.Font("Tahoma", 10, FontStyle.Regular, GraphicsUnit.Point)
    .Font = font
    .CtlRefresh()
End With

The following C# sample assigns by code a new font to the control:

System.Drawing.Font font = new System.Drawing.Font("Tahoma", 10, FontStyle.Regular);
axTreeCube1.Font = font;
axTreeCube1.CtlRefresh();

The following VFP sample assigns by code a new font to the control:

with thisform.TreeCube1.Object
    .Font.Name = "Tahoma"
    .Refresh()
endwith

The following Template sample assigns by code a new font to the control:

Font
{
    Name = "Tahoma"
}


property ForeColor

property TreeCube.ForeColor as Color
Specifies the control's foreground color.

Type | Description
Color | A Color expression that indicates the control's foreground color.
The ForeColor property specifies the control's foreground color. The BackColor property specifies the control's background color. The TexturePicturePath property specifies the path to load the faces/pictures. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.


property FormatAnchor

property TreeCube.FormatAnchor(New as Boolean) as String
Specifies the visual effect for anchor elements in HTML captions.

Type | Description
New as Boolean | A Boolean expression that indicates whether to specify the anchors never clicked or anchors being clicked.
String | A String expression that indicates the HTMLformat to apply to anchor elements.
By default, the FormatAnchor(True) property is "<u><fgcolor=0000FF>#" that indicates that the anchor elements ( that were never clicked ) are underlined and shown in light blue. Also, the FormatAnchor(False) property is "<u><fgcolor=000080>#" that indicates that the anchor elements are underlined and shown in dark blue. The visual effect is applied to the anchor elements, if the FormatAnchor property is not empty. For instance, if you want to do not show with a new effect the clicked anchor elements, you can use the FormatAnchor(False) = "", that means that the clicked or not-clicked anchors are shown with the same effect that's specified by FormatAnchor(True). An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link. The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick event to notify that the user clicks an anchor element. This event is fired only if prior clicking the control it shows the hand cursor. The AnchorClick event carries the identifier of the anchor, as well as application options that you can specify in the anchor element. The hand cursor is shown when the user hovers the mouse on the anchor elements.


property FrontFace

property TreeCube.FrontFace as Face
Returns the front face of the cube.

Type | Description
Face | A Face object that indicates the front face of the cube.
The Face(exFrontFace) or FrontFace property returns the face on the front. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


property HasButtons

property TreeCube.HasButtons as ExpandButtonEnum
Adds a button to the left side of each parent item. The user can click the button to expand or collapse the child items as an alternative to double-clicking the parent item.

Type | Description
ExpandButtonEnum | An ExpandButtonEnum expression that defines the visual appearance of the glyph next to the collapsed/expanded element
By default, the HasButtons property is exPlus. The HasButtons property specifies whether the control displays any glyph next to the collapsed/expanded element. The Background(exTreeGlyphCollapsed) / Background(exTreeGlyphExpanded) property specifies the visual appearance to show the glyph next to the collapsed/expanded element. The Expanded property specifies whether the item is expanded or collapsed. The ExpandAll method expands all items in the collection. The CollapseAll method expands all items in the collection. The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The LinesAtRoot property links items at the root of the hierarchy.

How can I change the +/- expanding/collapsing buttons?

VBA (MS Access, Excell...)

With TreeCube1
    .TexturePicturePath = ""
    .BeginUpdate
    With .VisualAppearance
        .Add 1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" & _
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" & _
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" & _
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC"
        .Add 2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" & _
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" & _
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" & _
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI"
    End With
    .Background(84) = &H1000000
    .Background(85) = &H2000000
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 16
        .HeaderVisible = False
        .HasLines = 2
        .LinesAtRoot = 3
        .DrawGridLines = -2
        .Columns.Add("Def").Alignment = 0
        .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
        .ItemByIndex(3).Expanded = True
    End With
    .EndUpdate
End With

VB6

With TreeCube1
    .TexturePicturePath = ""
    .BeginUpdate
    With .VisualAppearance
        .Add 1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" & _
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" & _
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" & _
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC"
        .Add 2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" & _
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" & _
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" & _
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI"
    End With
    .Background(exTreeGlyphCollapsed) = &H1000000
    .Background(exTreeGlyphExpanded) = &H2000000
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 16
        .HeaderVisible = False
        .HasLines = exThinLine
        .LinesAtRoot = exGroupLinesInside
        .DrawGridLines = exRowLines
        .Columns.Add("Def").Alignment = LeftAlignment
        .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
        .ItemByIndex(3).Expanded = True
    End With
    .EndUpdate
End With

VB.NET

With Extreecube1
    .TexturePicturePath = ""
    .BeginUpdate()
    With .VisualAppearance
        .Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" & _
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" & _
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" & _
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
        .Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" & _
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" & _
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" & _
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
    End With
    .set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exTreeGlyphCollapsed,&H1000000)
    .set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exTreeGlyphExpanded,&H2000000)
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 16
        .HeaderVisible = False
        .HasLines = exontrol.EXTREECUBELib.HierarchyLineEnum.exThinLine
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLinesInside
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("Def").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
        .get_ItemByIndex(3).Expanded = True
    End With
    .EndUpdate()
End With

VB.NET for /COM

With AxTreeCube1
    .TexturePicturePath = ""
    .BeginUpdate()
    With .VisualAppearance
        .Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" & _
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" & _
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" & _
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
        .Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" & _
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" & _
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" & _
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
    End With
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphCollapsed,16777216)
    .set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphExpanded,33554432)
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 16
        .HeaderVisible = False
        .HasLines = EXTREECUBELib.HierarchyLineEnum.exThinLine
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLinesInside
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("Def").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
        .ItemByIndex(3).Expanded = True
    End With
    .EndUpdate()
End With

C++

/*
    Copy and paste the following directives to your header file as
    it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'

    #import <ExTreeCube.dll>
    using namespace EXTREECUBELib;
*/
EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
spTreeCube1->BeginUpdate();
EXTREECUBELib::IAppearancePtr var_Appearance = spTreeCube1->GetVisualAppearance();
    var_Appearance->Add(1,_bstr_t("gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX") +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" +
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" +
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC");
    var_Appearance->Add(2,_bstr_t("gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX") +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" +
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" +
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI");
spTreeCube1->PutBackground(EXTREECUBELib::exTreeGlyphCollapsed,0x1000000);
spTreeCube1->PutBackground(EXTREECUBELib::exTreeGlyphExpanded,0x2000000);
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(16);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutHasLines(EXTREECUBELib::exThinLine);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLinesInside);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"Def")->PutAlignment(EXTREECUBELib::LeftAlignment);
    var_FaceTree->GetItems()->PutToString(L"Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)");
    var_FaceTree->GetItemByIndex(3)->PutExpanded(VARIANT_TRUE);
spTreeCube1->EndUpdate();

C++ Builder

TreeCube1->TexturePicturePath = L"";
TreeCube1->BeginUpdate();
Extreecubelib_tlb::IAppearancePtr var_Appearance = TreeCube1->VisualAppearance;
    var_Appearance->Add(1,TVariant(String("gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX") +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" +
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" +
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC"));
    var_Appearance->Add(2,TVariant(String("gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX") +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" +
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" +
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI"));
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exTreeGlyphCollapsed] = 0x1000000;
TreeCube1->Background[Extreecubelib_tlb::BackgroundPartEnum::exTreeGlyphExpanded] = 0x2000000;
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 16;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->HasLines = Extreecubelib_tlb::HierarchyLineEnum::exThinLine;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLinesInside;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"Def")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    var_FaceTree->Items->ToString = L"Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)";
    var_FaceTree->get_ItemByIndex(3)->Expanded = true;
TreeCube1->EndUpdate();

C#

extreecube1.TexturePicturePath = "";
extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.Appearance var_Appearance = extreecube1.VisualAppearance;
    var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" +
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" +
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC");
    var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" +
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" +
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI");
extreecube1.set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exTreeGlyphCollapsed,0x1000000);
extreecube1.set_Background32(exontrol.EXTREECUBELib.BackgroundPartEnum.exTreeGlyphExpanded,0x2000000);
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.HasLines = exontrol.EXTREECUBELib.HierarchyLineEnum.exThinLine;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLinesInside;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("Def").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)";
    var_FaceTree.get_ItemByIndex(3).Expanded = true;
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    TreeCube1.BeginUpdate();
    var var_Appearance = TreeCube1.VisualAppearance;
        var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
    "IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
    "PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
    "HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +
    "SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" +
    "j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" +
    "gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC");
        var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
    "IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
    "PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
    "HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +
    "FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" +
    "CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" +
    "h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI");
    TreeCube1.Background(84) = 16777216;
    TreeCube1.Background(85) = 33554432;
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 16;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.HasLines = 2;
        var_FaceTree.LinesAtRoot = 3;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("Def").Alignment = 0;
        var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)";
        var_FaceTree.ItemByIndex(3).Expanded = true;
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        .BeginUpdate
        With .VisualAppearance
            .Add 1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
    "IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
    "PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
    "HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" & _
    "SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" & _
    "j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" & _
    "gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC"
            .Add 2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" & _
    "IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" & _
    "PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" & _
    "HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" & _
    "FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" & _
    "CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" & _
    "h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI"
        End With
        .Background(84) = &H1000000
        .Background(85) = &H2000000
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 16
            .HeaderVisible = False
            .HasLines = 2
            .LinesAtRoot = 3
            .DrawGridLines = -2
            .Columns.Add("Def").Alignment = 0
            .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
            .ItemByIndex(3).Expanded = True
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

axTreeCube1.TexturePicturePath = "";
axTreeCube1.BeginUpdate();
EXTREECUBELib.Appearance var_Appearance = axTreeCube1.VisualAppearance;
    var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +
"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQY" +
"j4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" +
"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC");
    var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
"IUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6" +
"PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWTo" +
"HE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +
"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJl" +
"CkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" +
"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI");
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphCollapsed,0x1000000);
axTreeCube1.set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphExpanded,0x2000000);
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.HasLines = EXTREECUBELib.HierarchyLineEnum.exThinLine;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLinesInside;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("Def").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)";
    var_FaceTree.get_ItemByIndex(3).Expanded = true;
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

public void init()
{
    COM com_Appearance,com_Column,com_Columns,com_FaceTree,com_Item,com_Items;
    anytype var_Appearance,var_Column,var_Columns,var_FaceTree,var_Item,var_Items;
    str var_s,var_s1;
    ;

    super();

    extreecube1.TexturePicturePath("");
    extreecube1.BeginUpdate();
    var_Appearance = extreecube1.VisualAppearance(); com_Appearance = var_Appearance;
        var_s = "gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI";
        var_s = var_s + "UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P";
        var_s = var_s + "JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH";
        var_s = var_s + "E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUS";
        var_s = var_s + "ZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj";
        var_s = var_s + "4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUg";
        var_s = var_s + "kgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC";
        com_Appearance.Add(1,COMVariant::createFromStr(var_s));
        var_s1 = "gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI";
        var_s1 = var_s1 + "UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P";
        var_s1 = var_s1 + "JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH";
        var_s1 = var_s1 + "E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIF";
        var_s1 = var_s1 + "YFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlC";
        var_s1 = var_s1 + "kUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh";
        var_s1 = var_s1 + "4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI";
        com_Appearance.Add(2,COMVariant::createFromStr(var_s1));
    extreecube1.Background(84/*exTreeGlyphCollapsed*/,0x1000000);
    extreecube1.Background(85/*exTreeGlyphExpanded*/,0x2000000);
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(16);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.HasLines(2/*exThinLine*/);
        com_FaceTree.LinesAtRoot(3/*exGroupLinesInside*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Def"); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.ToString("Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)");
        var_Item = COM::createFromObject(com_FaceTree.ItemByIndex(3)); com_Item = var_Item;
        com_Item.Expanded(true);
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    BeginUpdate();
    with VisualAppearance do
    begin
        Add(1,'gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI' +
    'UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P' +
    'JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH' +
    'E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUS' +
    'ZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj' +
    '4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUg' +
    'kgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC');
        Add(2,'gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI' +
    'UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P' +
    'JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH' +
    'E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIF' +
    'YFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlC' +
    'kUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh' +
    '4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI');
    end;
    set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphCollapsed,$1000000);
    set_Background(EXTREECUBELib.BackgroundPartEnum.exTreeGlyphExpanded,$2000000);
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 16;
        HeaderVisible := False;
        HasLines := EXTREECUBELib.HierarchyLineEnum.exThinLine;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLinesInside;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('Def').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        Items.ToString := 'Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)';
        ItemByIndex[3].Expanded := True;
    end;
    EndUpdate();
end

Delphi (standard)

with TreeCube1 do
begin
    TexturePicturePath := '';
    BeginUpdate();
    with VisualAppearance do
    begin
        Add(1,'gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI' +
    'UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P' +
    'JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH' +
    'E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUS' +
    'ZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj' +
    '4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUg' +
    'kgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC');
        Add(2,'gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI' +
    'UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P' +
    'JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH' +
    'E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIF' +
    'YFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlC' +
    'kUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh' +
    '4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI');
    end;
    Background[EXTREECUBELib_TLB.exTreeGlyphCollapsed] := $1000000;
    Background[EXTREECUBELib_TLB.exTreeGlyphExpanded] := $2000000;
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 16;
        HeaderVisible := False;
        HasLines := EXTREECUBELib_TLB.exThinLine;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLinesInside;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('Def').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        Items.ToString := 'Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)';
        ItemByIndex[3].Expanded := True;
    end;
    EndUpdate();
end

VFP

with thisform.TreeCube1
    .TexturePicturePath = ""
    .BeginUpdate
    with .VisualAppearance
        var_s = "gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI"
        var_s = var_s + "UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P"
        var_s = var_s + "JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH"
        var_s = var_s + "E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUS"
        var_s = var_s + "ZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj"
        var_s = var_s + "4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUg"
        var_s = var_s + "kgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC"
        .Add(1,var_s)
        var_s1 = "gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI"
        var_s1 = var_s1 + "UBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6P"
        var_s1 = var_s1 + "JeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToH"
        var_s1 = var_s1 + "E+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIF"
        var_s1 = var_s1 + "YFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlC"
        var_s1 = var_s1 + "kUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh"
        var_s1 = var_s1 + "4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI"
        .Add(2,var_s1)
    endwith
    .Object.Background(84) = 0x1000000
    .Object.Background(85) = 0x2000000
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 16
        .HeaderVisible = .F.
        .HasLines = 2
        .LinesAtRoot = 3
        .DrawGridLines = -2
        .Columns.Add("Def").Alignment = 0
        .Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
        .ItemByIndex(3).Expanded = .T.
    endwith
    .EndUpdate
endwith

dBASE Plus

local oTreeCube,var_Appearance,var_Column,var_FaceTree,var_Item

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
oTreeCube.BeginUpdate()
var_Appearance = oTreeCube.VisualAppearance
    var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUSZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiU" ;
 +"gkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
    var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIFYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYG" ;
 +"h4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
oTreeCube.Template = [Background(84) = 16777216] // oTreeCube.Background(84) = 0x1000000
oTreeCube.Template = [Background(85) = 33554432] // oTreeCube.Background(85) = 0x2000000
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 16
    var_FaceTree.HeaderVisible = false
    var_FaceTree.HasLines = 2
    var_FaceTree.LinesAtRoot = 3
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("Def").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Def")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
    // var_FaceTree.ItemByIndex(3).Expanded = true
    var_Item = var_FaceTree.ItemByIndex(3)
    with (oTreeCube)
        TemplateDef = [dim var_Item]
        TemplateDef = var_Item
        Template = [var_Item.Expanded = True]
    endwith
oTreeCube.EndUpdate()

XBasic (Alpha Five)

Dim oTreeCube as P
Dim var_Appearance as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Item as local

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
oTreeCube.BeginUpdate()
var_Appearance = oTreeCube.VisualAppearance
    var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUSZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
    var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIFYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
oTreeCube.Template = "Background(84) = 16777216" // oTreeCube.Background(84) = 16777216
oTreeCube.Template = "Background(85) = 33554432" // oTreeCube.Background(85) = 33554432
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 16
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.HasLines = 2
    var_FaceTree.LinesAtRoot = 3
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("Def").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Def")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
    ' var_FaceTree.ItemByIndex(3).Expanded = .t.
    var_Item = var_FaceTree.ItemByIndex(3)
    oTreeCube.TemplateDef = "dim var_Item"
    oTreeCube.TemplateDef = var_Item
    oTreeCube.Template = "var_Item.Expanded = True"

oTreeCube.EndUpdate()

Visual Objects

local var_Appearance as IAppearance
local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
oDCOCX_Exontrol1:BeginUpdate()
var_Appearance := oDCOCX_Exontrol1:VisualAppearance
    var_Appearance:Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUSZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
    var_Appearance:Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIFYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
oDCOCX_Exontrol1:[Background,exTreeGlyphCollapsed] := 0x1000000
oDCOCX_Exontrol1:[Background,exTreeGlyphExpanded] := 0x2000000
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 16
    var_FaceTree:HeaderVisible := false
    var_FaceTree:HasLines := exThinLine
    var_FaceTree:LinesAtRoot := exGroupLinesInside
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add("Def"):Alignment := LeftAlignment
    var_FaceTree:Items:ToString := "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
    var_FaceTree:[ItemByIndex,3]:Expanded := true
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

OleObject oTreeCube,var_Appearance,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
oTreeCube.BeginUpdate()
var_Appearance = oTreeCube.VisualAppearance
    var_Appearance.Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUSZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
    var_Appearance.Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIFYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
oTreeCube.Background(84,16777216 /*0x1000000*/)
oTreeCube.Background(85,33554432 /*0x2000000*/)
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 16
    var_FaceTree.HeaderVisible = false
    var_FaceTree.HasLines = 2
    var_FaceTree.LinesAtRoot = 3
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("Def").Alignment = 0
    var_FaceTree.Items.ToString = "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
    var_FaceTree.ItemByIndex(3).Expanded = true
oTreeCube.EndUpdate()

Visual DataFlex

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Send ComBeginUpdate
    Variant voAppearance
    Get ComVisualAppearance to voAppearance
    Handle hoAppearance
    Get Create (RefClass(cComAppearance)) to hoAppearance
    Set pvComObject of hoAppearance to voAppearance
        Get ComAdd of hoAppearance 1 "gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgUSZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC" to Nothing
        Get ComAdd of hoAppearance 2 "gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHIFYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI" to Nothing
    Send Destroy to hoAppearance
    Set ComBackground OLEexTreeGlyphCollapsed to |CI$1000000
    Set ComBackground OLEexTreeGlyphExpanded to |CI$2000000
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 16
            Set ComHeaderVisible of hoFaceTree to False
            Set ComHasLines of hoFaceTree to OLEexThinLine
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLinesInside
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Def" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComToString of hoItems to "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
            Send Destroy to hoItems
            Variant voItem
            Get ComItemByIndex of hoFaceTree 3 to voItem
            Handle hoItem
            Get Create (RefClass(cComItem)) to hoItem
            Set pvComObject of hoItem to voItem
                Set ComExpanded of hoItem to True
            Send Destroy to hoItem
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oAppearance
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:TexturePicturePath := ""
        oTreeCube:BeginUpdate()
        oAppearance := oTreeCube:VisualAppearance()
            oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +;
        "SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
            oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +;
        "FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
        oTreeCube:SetProperty("Background",84/*exTreeGlyphCollapsed*/,0x1000000)
        oTreeCube:SetProperty("Background",85/*exTreeGlyphExpanded*/,0x2000000)
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 16
            oFaceTree:HeaderVisible := .F.
            oFaceTree:HasLines := 2/*exThinLine*/
            oFaceTree:LinesAtRoot := 3/*exGroupLinesInside*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add("Def"):Alignment := 0/*LeftAlignment*/
            oFaceTree:Items():ToString := "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
            oFaceTree:ItemByIndex(3):Expanded := .T.
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


property HTMLPicture

property TreeCube.HTMLPicture(Key as String) as Variant
Adds or replaces a picture in HTML captions.

Type | Description
Key as String | A String expression that indicates the key of the picture being added or replaced. If the Key property is Empty string, the entire collection of pictures is cleared.
Variant The HTMLPicture specifies the picture being associated to a key. It can be one of the followings:
  • a string expression that indicates the path to the picture file, being loaded.
  • a string expression that indicates the base64 encoded string that holds a picture object, Use the eximages tool to save your picture as base64 encoded format.
  • A Picture object that indicates the picture being added or replaced. ( A Picture object implements IPicture interface ),

If empty, the picture being associated to a key is removed. If the key already exists the new picture is replaced. If the key is not empty, and it doesn't not exist a new picture is added.
The HTMLPicture property handles a collection of custom size picture being displayed in the HTML captions, using the <img> tags. By default, the HTMLPicture collection is empty. Use the HTMLPicture property to add new pictures to be used in HTML captions. For instance, the HTMLPicture("pic1") = "c:\winnt\zapotec.bmp", loads the zapotec picture and associates the pic1 key to it. Any "<img>pic1</img>" sequence in HTML captions, displays the pic1 picture. On return, the HTMLPicture property retrieves a Picture object ( this implements the IPictureDisp interface ).

The following sample shows how to put a custom size picture in the column's header:

<CONTROL>.HTMLPicture("pic1") = "c:/temp/editors.gif"
<CONTROL>.HTMLPicture("pic2") = "c:/temp/editpaste.gif"

<COLUMN1>.HTMLCaption = "A <img>pic1</img>"
<COLUMN2>.HTMLCaption = "B <img>pic2</img>"
<COLUMN3>.HTMLCaption = "A <img>pic1</img> + B <img>pic2</img>"


property hWnd

property TreeCube.hWnd as Long

Retrieves the control's window handle.

Type | Description
Long | A long expression that indicates the control's window handle.

Use the hWnd property to get the control's main window handle. The Microsoft Windows operating environment identifies each form and control in an application by assigning it a handle, or hWnd. The hWnd property is used with Windows API calls. Many Windows operating environment functions require the hWnd of the active window as an argument.


property IdentifyFace

property TreeCube.IdentifyFace as IdentifyFaceEnum
Specifies whether each face shows its index/frame.

Type | Description
IdentifyFaceEnum | An IdentifyFaceEnum expression that determines whether the index/name/frame of the face are shown on the cube.
By default, the IdentifyFace property is exNoIdentifyFace. The IdentifyFace property specifies whether each face shows its index/frame. The IdentifyFaceCaption property specifies the HTML caption to show the index/name of the face. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The ForeColor property specifies the control's foreground color. The BackColor property specifies the control's background color.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property IdentifyFaceCaption

property TreeCube.IdentifyFaceCaption as String
Specifies the HTML caption to show the index/name of the face.

Type | Description
String | A String expression that specifies how the index/name of each face is being shown.
By default, The IdentifyFaceCaption property is "<font ;18><sha ;;0><fgcolor=000000><%index%></font> <%name%> <off -4><font ;12><%picture%></font></off>". The IdentifyFaceCaption property specifies the HTML caption to show the index/name of the face. The IdentifyFace property specifies whether each face shows its index/frame.

The IdentifyFaceCaption supports the following built-in HTML tags:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:


method Images

method TreeCube.Images (Handle as Variant)

Sets a runtime the control's image tree.

Type Description
Handle as Variant The Handle parameter can be:
  • A string expression that specifies the ICO file to add. 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("c:\temp\copy.ico") method adds the sync.ico file to the control's Images collection (string, loads the icon using its path)
  • A string expression that indicates the BASE64 encoded string that holds the icons list. Use the Exontrol's ExImages tool to save/load your icons as BASE64 encoded format. In this case the string may begin with "gBJJ..." (string, loads icons using base64 encoded string)
  • A reference to a Microsoft ImageList control (mscomctl.ocx, MSComctlLib.ImageList type) that holds the icons to add (object, loads icons from a Microsoft ImageList control)
  • A reference to a Picture (IPictureDisp implementation) that holds the icon to add. For instance, the VB's LoadPicture (Function LoadPicture([FileName], [Size], [ColorDepth], [X], [Y]) As IPictureDisp) or LoadResPicture (Function LoadResPicture(id, restype As Integer) As IPictureDisp) returns a picture object (object, loads icon from a Picture object)
  • A long expression that identifies a handle to an Image List Control ( the Handle should be of HIMAGELIST type ). On 64-bit platforms, the Handle parameter must be a Variant of LongLong / LONG_PTR data type ( signed 64-bit (8-byte) integers ), saved under llVal field, as VT_I8 type. The LONGLONG / LONG_PTR is __int64, a 64-bit integer. For instance, in C++ you can use as Images( COleVariant( (LONG_PTR)hImageList) ) or Images( COleVariant( (LONGLONG)hImageList) ), where hImageList is of HIMAGELIST type. The GetSafeHandle() method of the CImageList gets the HIMAGELIST handle (long, loads icon from HIMAGELIST type)

The user can add images at design time, by drag and drop files to combo's image holder. The ImageSize property defines the size (width/height) of the icons within the control's Images collection. Use the ReplaceIcon method to add, remove or clear icons in the control's images collection.


property ImageSize

property TreeCube.ImageSize as Long
Retrieves or sets the size of icons the control displays..

Type | Description
Long | A long expression that defines the size of icons the control displays
By default, the ImageSize property is 16 (pixels). The ImageSize property specifies the size of icons being loaded using the Images method. 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 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.


property Internals

property TreeCube.Internals as String
Specifies internal values.

Type | Description
String | A String expression that indicates the values of internal-variables.
By default, the Internals property is "zoommin=0.01;zoomdefault=0.1;zoommax=0.126;zoomdivsmall=256;zoomdivlarge=48;fisheyepersp=20". The Internals property can be used to change internal-variables ( for debugging purpose only ). The ShowAs property indicates the way the cube is displayed.


property LeftFace

property TreeCube.LeftFace as Face
Returns the left face of the cube.

Type | Description
Face | A Face object that indicates the left face of the cube.
The Face(exLeftFace) or LeftFace property returns the left face on the cube. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face( exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


property Margins

property TreeCube.Margins as String
Sets or retrieves a value that indicates the margins of the faces within the cube.

Type | Description
String | A String expression that specifies the left,top,right,bottom margins in pixels to show the face's content.
By default, the Margins property is "16,16,16,16". The Margins property indicates that margins to be applied to all faces of the cube. The RelativeMargins property sets or retrieves a value that indicates the relative margins of the faces within the cube. Use the RelativeMargins / Margins property to specify the margins of the face's content relative to its face. The FaceContent property determines the content of the face. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it.


property OnMouseWheel

property TreeCube.OnMouseWheel as OnMouseWheelEnum
Specifies what action the control performs when user rolls the mouse wheel.

Type | Description
OnMouseWheelEnum | An OnMouseWheelEnum expression that specifies the action the control performs when user rolls the mouse wheel.
By default, the OnMouseWheel property is exMouseWheelZoom | exMouseWheelScroll, which indicates that rolling the mouse button, may scroll or zoom the face from the cursor. If the face displays a scrollable control, the scroll is performed, else the zoom is performed. The OnMouseWheel property specifies what action the control performs when user rolls the mouse wheel. Use the OnMouseWheel property to disable / enable scroll / zoom of the face from the cursor. The FaceFromPoint property returns the index of the face from the cursor.


property Picture

property TreeCube.Picture as IPictureDisp

Retrieves or sets a graphic to be displayed in the control.

Type | Description
IPictureDisp | A Picture object that's displayed on the control's background.

By default, the control has no picture associated. The control uses the PictureDisplay property to determine how the picture is displayed on the control's background. Use the BackColor property to specify the control's background color. The ForeColor property specifies the control's foreground color The TexturePicturePath property specifies the path to load the faces/pictures. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.


property PictureDisplay

property TreeCube.PictureDisplay as PictureDisplayEnum

Retrieves or sets a value that indicates the way how the graphic is displayed on the control's background

Type | Description
PictureDisplayEnum | A PictureDisplayEnum expression that indicates the way how the picture is displayed.

By default, the PictureDisplay property is exTile. Use the PictureDisplay property specifies how the Picture is displayed on the control's background. If the control has no picture associated the PictureDisplay property has no effect. Use the BackColor property to specify the control's background color. The ForeColor property specifies the control's foreground color The TexturePicturePath property specifies the path to load the faces/pictures. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.


property RadioButtonHeight

property TreeCube.RadioButtonHeight as Long
Gets or sets a value that indicates the height in pixels to display the radio-buttons.

Type | Description
Long | A Long expression that specifies the height in pixels, of the radio-button.
By default, the RadioButtonHeight property is 16. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box.


property RadioButtonWidth

property TreeCube.RadioButtonWidth as Long
Gets or sets a value that indicates the width in pixels to display the radio-buttons.

Type | Description
Long | A Long expression that specifies the width in pixels, of the radio-button.
By default, the RadioButtonWidth property is 16. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button. The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box.


method Refresh

method TreeCube.Refresh ()
Refreses the control.

Type Description


method ReplaceIcon

method TreeCube.ReplaceIcon ([Icon as Variant], [Index as Variant])

Adds a new icon, replaces an icon or clears the control's image list.

Type | Description
Icon as Variant | A long expression that indicates the icon's handle.
Index as Variant | A long expression that indicates the index where icon is inserted.
Return | Description
Long | A long expression that indicates the index of the icon in the images collection

Use the ReplaceIcon property to add, remove or replace an icon in the control's images collection. Also, the ReplaceIcon property can clear the images collection. Use the Images method to attach a image list to the control.

The following VB sample adds a new icon to control's images list:

i = ExTreeCube1.ReplaceIcon( LoadPicture("d:\icons\help.ico").Handle), i specifies the index where the icon is added

The following VB sample replaces an icon into control's images list::

i = ExTreeCube1.ReplaceIcon( LoadPicture("d:\icons\help.ico").Handle, 0), i is zero, so the first icon is replaced.

The following VB sample removes an icon from control's images list:

ExTreeCube1.ReplaceIcon 0, i, i specifies the index of icon removed.

The following VB clears the control's icons collection:

ExTreeCube1.ReplaceIcon 0, -1


property RightFace

property TreeCube.RightFace as Face
Returns the right face of the cube.

Type | Description
Face | A Face object that indicates the right face of the cube.

The Face(exRightFace) or RightFace property returns the face on the right. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exTopFace) or TopFace property returns the top face.
  • The Face(exDownFace) or DownFace property returns down face.


method Rotate

method TreeCube.Rotate (Dir as RotateEnum)
Rotates the cube in a direction.

Type | Description
Dir as RotateEnum | A RotateEnum expression that indicates the direction to rotate the cube.
Use the Rotate method to programmatically rotate the cube, in a specified direction. The control fires the Rotate event when the cube is rotated. Use the AllowRotate property to specify the directions where the user can rotate the cube, by dragging. Use the RotX and RotY properties to specify the rotation angles. The Neighbor property retrieves the neighbor of the face in giving direction.


property RotX

property TreeCube.RotX as Single
Specifies the rotation angle in Radians along Ox axis.

Type | Description
Single | A real value that specifies the clockwise rotation angle of the viewing direction along Ox axis. The angle is in Radians and negative values can be used for counterclockwise rotation
By default, the RotX is 0. Use the Rotate method to rotate the cube in a direction. The control fires the Rotate event when the cube is rotated. Use the AllowRotate property to specify the directions where the user can rotate the cube, by dragging.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.


property RotY

property TreeCube.RotY as Single
Specifies the rotation angle in Radians along Oy axis.

Type | Description
Single | A real value that specifies the clockwise rotation angle of the viewing direction along Oy axis. The angle is in Radians and negative values can be used for counterclockwise rotation.
By default, the RotY is 0. Use the Rotate method to rotate the cube in a direction. The control fires the Rotate event when the cube is rotated. Use the AllowRotate property to specify the directions where the user can rotate the cube, by dragging.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.


property ShowAs

property TreeCube.ShowAs as ShowAsEnum
Indicates the way the cube is displayed.

Type | Description
ShowAsEnum | A ShowAsEnum expression that defines the way the cube is displayed.
By default, the ShowAs property is exFishEye. The ShowAs property indicates the way the cube is displayed. The Internals property can be used to change internal-variables.

The following screen shot shows the exFishEye view:

The following screen shot shows the exOrthographic view:


property ShowImageList

property TreeCube.ShowImageList as Boolean

Specifies whether the control's image list window is visible or hidden.

Type | Description
Boolean | A boolean expression that specifies whether the control's image list window is visible or hidden.

By default, the ShowImageList property is True. Use the ShowImageList property to hide the control's images list window. The control's images list window is visible only at design time. Use the Images method to associate an images list control to the tree control. Use the RepaceIcon method to add, remove or clear icons in the control's images collection.


method ShowToolTip

method TreeCube.ShowToolTip (ToolTip as String, [Title as Variant], [Alignment as Variant], [X as Variant], [Y as Variant])
Shows the specified tooltip at given position.

Type Description
ToolTip as String The ToolTip parameter can be any of the following:
  • NULL(BSTR) or "<null>"(string) to indicate that the tooltip for the object being hovered is not changed
  • A String expression that indicates the description of the tooltip, that supports built-in HTML format (adds, replaces or changes the object's tooltip)
Title as Variant The Title parameter can be any of the following:
  • missing (VT_EMPTY, VT_ERROR type) or "<null>"(string) the title for the object being hovered is not changed.
  • A String expression that indicates the title of the tooltip (no built-in HTML format) (adds, replaces or changes the object's title)
Alignment as Variant A long expression that indicates the alignment of the tooltip relative to the position of the cursor. If missing (VT_EMPTY, VT_ERROR) the alignment of the tooltip for the object being hovered is not changed.

The Alignment parameter can be one of the following:

  • 0 - exTopLeft
  • 1 - exTopRight
  • 2 - exBottomLeft
  • 3 - exBottomRight
  • 0x10 - exCenter
  • 0x11 - exCenterLeft
  • 0x12 - exCenterRight
  • 0x13 - exCenterTop
  • 0x14 - exCenterBottom

By default, the tooltip is aligned relative to the top-left corner (0 - exTopLeft).

X as Variant Specifies the horizontal position to display the tooltip as one of the following:
  • missing (VT_EMPTY, VT_ERROR type), indicates that the tooltip is shown on its default position / current cursor position (ignored)
  • -1, indicates the current horizontal position of the cursor (current x-position)
  • a numeric expression that indicates the horizontal screen position to show the tooltip (fixed screen x-position)
  • a string expression that indicates the horizontal displacement relative to default position to show the tooltip (moved)
Y as Variant Specifies the vertical position to display the tooltip as one of the following:
  • missing (VT_EMPTY, VT_ERROR type), indicates that the tooltip is shown on its default position / current cursor position (ignored)
  • -1, indicates the current vertical position of the cursor (current y-position)
  • a numeric expression that indicates the vertical screen position to show the tooltip (fixed screen y-position)
  • a string expression that indicates the vertical displacement relative to default position to show the tooltip (displacement)
Use the ShowToolTip method to display a custom tooltip at specified position or to update the object's tooltip, title or position. You can call the ShowToolTip method during the MouseMove event. Use the ToolTipPopDelay property specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control. The ToolTipDelay property specifies the time in ms that passes before the ToolTip appears. Use the ToolTipWidth property to specify the width of the tooltip window. Use the ToolTipFont property to change the tooltip's font. Use the Background(exToolTipAppearance) property indicates the visual appearance of the borders of the tooltips. Use the Background(exToolTipBackColor) property indicates the tooltip's background color. Use the Background(exToolTipForeColor) property indicates the tooltip's foreground color.

For instance:

  • ShowToolTip(`<null>`,`<null>`,,`+8`,`+8`), shows the tooltip of the object moved relative to its default position
  • ShowToolTip(`<null>`,`new title`), adds, changes or replaces the title of the object's tooltip
  • ShowToolTip(`new content`), adds, changes or replaces the object's tooltip
  • ShowToolTip(`new content`,`new title`), shows the tooltip and title at current position
  • ShowToolTip(`new content`,`new title`,,`+8`,`+8`), shows the tooltip and title moved relative to the current position
  • ShowToolTip(`new content`,``,,128,128), displays the tooltip at a fixed position
  • ShowToolTip(``,``), hides the tooltip

The ToolTip parameter supports the built-in HTML format like follows:

  • <b> ... </b> displays the text in bold
  • <i> ... </i> displays the text in italics
  • <u> ... </u> underlines the text
  • <s> ... </s> Strike-through text
  • <a id;options> ... </a> displays an anchor element that can be clicked. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link.The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The control fires the AnchorClick(AnchorID, Options) event when the user clicks the anchor element. The FormatAnchor property customizes the visual effect for anchor elements.
  • <font face;size> ... </font> displays portions of text with a different font and/or different size. For instance, the <font Tahoma;12>bit</font> draws the bit text using the Tahoma font, on size 12 pt. If the name of the font is missing, and instead size is present, the current font is used with a different size. For instance, <font ;12>bit</font> displays the bit text using the current font, but with a different size.
  • <fgcolor rrggbb> ... </fgcolor> or <fgcolor=rrggbb> ... </fgcolor> displays text with a specified foreground color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <bgcolor rrggbb> ... </bgcolor> or <bgcolor=rrggbb> ... </bgcolor> displays text with a specified background color. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <solidline rrggbb> ... </solidline> or <solidline=rrggbb> ... </solidline> draws a solid-line on the bottom side of the current text-line, of specified RGB color. The <solidline> ... </solidline> draws a black solid-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <dotline rrggbb> ... </dotline> or <dotline=rrggbb> ... </dotline> draws a dot-line on the bottom side of the current text-line, of specified RGB color. The <dotline> ... </dotline> draws a black dot-line on the bottom side of the current text-line. The rr/gg/bb represents the red/green/blue values of the color in hexa values.
  • <upline> ... </upline> draws the line on the top side of the current text-line (requires <solidline> or <dotline>).
  • <r> right aligns the text
  • <c> centers the text
  • <br> forces a line-break
  • <img>number[:width]</img> inserts an icon inside the text. The number indicates the index of the icon being inserted. Use the Images method to assign a list of icons to your chart. The last 7 bits in the high significant byte of the number expression indicates the identifier of the skin being used to paint the object. Use the Add method to add new skins to the control. If you need to remove the skin appearance from a part of the control you need to reset the last 7 bits in the high significant byte of the color being applied to the part. The width is optional and indicates the width of the icon being inserted. Using the width option you can overwrite multiple icons getting a nice effect. By default, if the width field is missing, the width is 18 pixels.
  • <img>key[:width]</img> inserts a custom size picture into the text being previously loaded using the HTMLPicture property. The Key parameter indicates the key of the picture being displayed. The Width parameter indicates a custom size, if you require to stretch the picture, else the original size of the picture is used.
  • & glyph characters as &amp; ( & ), &lt; ( < ), &gt; ( > ), &qout; ( " ) and &#number; ( the character with specified code ), For instance, the &#8364; displays the EUR character. The & ampersand is only recognized as markup when it is followed by a known letter or a #character and a digit. For instance if you want to display <b>bold</b> in HTML caption you can use &lt;b&gt;bold&lt;/b&gt;
  • <off offset> ... </off> defines the vertical offset to display the text/element. The offset parameter defines the offset to display the element. This tag is inheritable, so the offset is keep while the associated </off> tag is found. You can use the <off offset> HTML tag in combination with the <font face;size> to define a smaller or a larger font to be displayed. For instance: Text with <font ;7><off 6>subscript displays the text such as: Text with subscript The Text with <font ;7><off -6>superscript displays the text such as: Text with subscript
  • <gra rrggbb;mode;blend> ... </gra> defines a gradient text. The text color or <fgcolor> defines the starting gradient color, while the rr/gg/bb represents the red/green/blue values of the ending color, 808080 if missing as gray. The mode is a value between 0 and 4, 1 if missing, and blend could be 0 or 1, 0 if missing. The <font> HTML tag can be used to define the height of the font. Any of the rrggbb, mode or blend field may not be specified. The <gra> with no fields, shows a vertical gradient color from the current text color to gray (808080). For instance the <font ;18><gra FFFFFF;1;1>gradient-center</gra></font> generates the following picture:
  • <out rrggbb;width> ... </out> shows the text with outlined characters, where rr/gg/bb represents the red/green/blue values of the outline color, 808080 if missing as gray, width indicates the size of the outline, 1 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><out 000000><fgcolor=FFFFFF>outlined</fgcolor></out></font> generates the following picture:
  • <sha rrggbb;width;offset> ... </sha> define a text with a shadow, where rr/gg/bb represents the red/green/blue values of the shadow color, 808080 if missing as gray, width indicates the size of shadow, 4 if missing, and offset indicates the offset from the origin to display the text's shadow, 2 if missing. The text color or <fgcolor> defines the color to show the inside text. The <font> HTML tag can be used to define the height of the font. For instance the <font ;31><sha>shadow</sha></font> generates the following picture:

    or <font ;31><sha 404040;5;0><fgcolor=FFFFFF>outline anti-aliasing</fgcolor></sha></font> gets:


property Template

property TreeCube.Template as String
Specifies the control's template.

Type | Description
String | A string expression that indicates the control's template.
The control's template uses the X-Script language to initialize the control's content. Use the Template property page of the control to update the control's Template property. Use the Template property to execute code by passing instructions as a string ( template string ). Use the ExecuteTemplate property to gets the result after executing a template script.

Most of our UI components provide a Template page that's accessible in design mode. No matter what programming language you are using, you can have a quick view of the component's features using the WYSWYG Template editor.

  • Place the control to your form or dialog.
  • Locate the Properties item, in the control's context menu, in design mode. If your environment doesn't provide a Properties item in the control's context menu, please try to locate in the Properties browser.
  • Click it, and locate the Template page.
  • Click the Help button. In the left side, you will see the component, in the right side, you will see a x-script code that calls methods and properties of the control.

The control's Template page helps user to initialize the control's look and feel in design mode, using the x-script language that's easy and powerful. The Template page displays the control on the left side of the page. On the right side of the Template page, a simple editor is displayed where user writes the initialization code. The control's look and feel is automatically updated as soon as the user types new instructions. The Template script is saved to the container persistence ( when Apply button is pressed ), and it is executed when the control is initialized at runtime. Any component that provides a WYSWYG Template page, provides a Template property. The Template property executes code from a string ( template string ).

The Template or x-script is composed by lines of instructions. Instructions are separated by "\n\r" ( newline characters ) or ";" character. The ; character may be available only for newer versions of the components.

An x-script instruction/line can be one of the following:

  • Dim list of variables Declares the variables. Multiple variables are separated by commas. ( Sample: Dim h, h1, h2 )
  • variable = property( list of arguments ) Assigns the result of the property to a variable. The "variable" is the name of a declared variable. The "property" is the property name of the object in the context. The "list or arguments" may include variables or values separated by commas. ( Sample: h = InsertItem(0,"New Child") )
  • property( list of arguments ) = value Changes the property. The value can be a variable, a string, a number, a boolean value or a RGB value.
  • method( list of arguments ) Invokes the method. The "list or arguments" may include variables or values separated by commas.
  • { Beginning the object's context. The properties or methods called between { and } are related to the last object returned by the property prior to { declaration.
  • } Ending the object's context
  • object. property( list of arguments ).property( list of arguments ).... The .(dot) character splits the object from its property. For instance, the Columns.Add("Column1").HeaderBackColor = RGB(255,0,0), adds a new column and changes the column's header back color.

The x-script may uses constant expressions as follow:

  • boolean expression with possible values as True or False
  • numeric expression may starts with 0x which indicates a hexa decimal representation, else it should starts with digit, or +/- followed by a digit, and . is the decimal separator. Sample: 13 indicates the integer 13, or 12.45 indicates the double expression 12,45
  • date expression is delimited by # character in the format #mm/dd/yyyy hh:mm:ss#. Sample: #31/12/1971# indicates the December 31, 1971
  • string expression is delimited by " or ` characters. If using the ` character, please make sure that it is different than ' which allows adding comments inline. Sample: "text" indicates the string text.

Also , the template or x-script code may support general functions as follows:

  • Me property indicates the original object.
  • RGB(R,G,B) property retrieves an RGB value, where the R, G, B are byte values that indicates the R G B values for the color being specified. For instance, the following code changes the control's background color to red: BackColor = RGB(255,0,0)
  • LoadPicture(file) property loads a picture from a file or from BASE64 encoded strings, and returns a Picture object required by the picture properties.
  • CreateObject(progID) property creates and retrieves a single uninitialized object of the class associated with a specified program identifier.


property TemplateDef

property TreeCube.TemplateDef as Variant
Defines inside variables for the next Template/ExecuteTemplate call.

Type | Description
Variant | A string expression that indicates the Dim declaration, or any Object expression to be assigned to previously declared variables.
The TemplateDef property has been added to allow programming languages such as dBASE Plus to set control's properties with multiple parameters. It is known that programming languages such as dBASE Plus or XBasic from AlphaFive, does not support setting a property with multiple parameters. In other words, these programming languages does not support something like Property(Parameters) = Value, so our controls provide an alternative using the TemplateDef method. The first call of the TemplateDef should be a declaration such as "Dim a,b" which means the next 2 calls of the TemplateDef defines the variables a and b. The next call should be Template or ExecuteTemplate property which can use the variable a and b being defined previously.

So, calling the TemplateDef property should be as follows:

with (Control)
    TemplateDef = [Dim var_Column]
    TemplateDef = var_Column
    Template = [var_Column.Def(4) = 255]
endwith

This sample allocates a variable var_Column, assigns the value to the variable ( the second call of the TemplateDef ), and the Template call uses the var_Column variable ( as an object ), to call its Def property with the parameter 4.

Let's say we need to define the background color for a specified column, so we need to call the Def(exCellBackColor) property of the column, to define the color for all cells in the column.

The following VB6 sample shows setting the Def property such as:

With Control
    .Columns.Add("Column 1").Def(exCellBackColor) = 255
    .Columns.Add "Column 2"
    .Items.AddItem 0
    .Items.AddItem 1
    .Items.AddItem 2
End With

In dBASE Plus, calling the Def(4) has no effect, instead using the TemplateDef helps you to use properly the Def property as follows:

local Control,var_Column

Control = form.Activex1.nativeObject
// Control.Columns.Add("Column 1").Def(4) = 255
var_Column = Control.Columns.Add("Column 1")
with (Control)
    TemplateDef = [Dim var_Column]
    TemplateDef = var_Column
    Template = [var_Column.Def(4) = 255]
endwith
Control.Columns.Add("Column 2")
Control.Items.AddItem(0)
Control.Items.AddItem(1)
Control.Items.AddItem(2)

The equivalent sample for XBasic in A5, is as follows:

Dim Control as P
Dim var_Column as P

Control = topparent:CONTROL_ACTIVEX1.activex
' Control.Columns.Add("Column 1").Def(4) = 255
var_Column = Control.Columns.Add("Column 1")
Control.TemplateDef = "Dim var_Column"
Control.TemplateDef = var_Column
Control.Template = "var_Column.Def(4) = 255"

Control.Columns.Add("Column 2")
Control.Items.AddItem(0)
Control.Items.AddItem(1)
Control.Items.AddItem(2)

The samples just call the Column.Def(4) = Value, using the TemplateDef. The first call of TemplateDef property is "Dim var_Column", which indicates that the next call of the TemplateDef will defines the value of the variable var_Column, in other words, it defines the object var_Column. The last call of the Template property uses the var_Column member to use the x-script and so to set the Def property so a new color is being assigned to the column.

The TemplateDef, Template and ExecuteTemplate support x-script language ( Template script of the Exontrols ), like explained bellow:

The Template or x-script is composed by lines of instructions. Instructions are separated by "\n\r" ( newline characters ) or ";" character. The ; character may be available only for newer versions of the components.

An x-script instruction/line can be one of the following:

  • Dim list of variables Declares the variables. Multiple variables are separated by commas. ( Sample: Dim h, h1, h2 )
  • variable = property( list of arguments ) Assigns the result of the property to a variable. The "variable" is the name of a declared variable. The "property" is the property name of the object in the context. The "list or arguments" may include variables or values separated by commas. ( Sample: h = InsertItem(0,"New Child") )
  • property( list of arguments ) = value Changes the property. The value can be a variable, a string, a number, a boolean value or a RGB value.
  • method( list of arguments ) Invokes the method. The "list or arguments" may include variables or values separated by commas.
  • { Beginning the object's context. The properties or methods called between { and } are related to the last object returned by the property prior to { declaration.
  • } Ending the object's context
  • object. property( list of arguments ).property( list of arguments ).... The .(dot) character splits the object from its property. For instance, the Columns.Add("Column1").HeaderBackColor = RGB(255,0,0), adds a new column and changes the column's header back color.

The x-script may uses constant expressions as follow:

  • boolean expression with possible values as True or False
  • numeric expression may starts with 0x which indicates a hexa decimal representation, else it should starts with digit, or +/- followed by a digit, and . is the decimal separator. Sample: 13 indicates the integer 13, or 12.45 indicates the double expression 12,45
  • date expression is delimited by # character in the format #mm/dd/yyyy hh:mm:ss#. Sample: #31/12/1971# indicates the December 31, 1971
  • string expression is delimited by " or ` characters. If using the ` character, please make sure that it is different than ' which allows adding comments inline. Sample: "text" indicates the string text.

Also , the template or x-script code may support general functions as follows:

  • Me property indicates the original object.
  • RGB(R,G,B) property retrieves an RGB value, where the R, G, B are byte values that indicates the R G B values for the color being specified. For instance, the following code changes the control's background color to red: BackColor = RGB(255,0,0)
  • LoadPicture(file) property loads a picture from a file or from BASE64 encoded strings, and returns a Picture object required by the picture properties.
  • CreateObject(progID) property creates and retrieves a single uninitialized object of the class associated with a specified program identifier.


property TexturePictureExt

property TreeCube.TexturePictureExt as String
Specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.

Type Description
String A String expression that defines the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.

For instance, if the TexturePictureName property is "tTexture,posy/90", the control is looking for the following files:

  1. fTexture.bmp, fTexture.png, ... , fTexture.tiff, if any of this is not found go to next
  2. posy.bmp, pos.png, ... , pos.tiff, and if any of this is found, loads and rotates by 90-degree clockwise.
By default the TexturePictureExt property is "bmp,png,jpg,jpeg,gif,tiff". The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.


property TexturePictureHeight

property TreeCube.TexturePictureHeight as Long
Specifies the height in pixels, to render the pictures on the faces.

Type | Description
Long | A Long expression that specifies the height in pixels, to render the pictures on the faces.

The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces. The Picture property retrieves or sets a graphic to be displayed on the face's background. The Picture property can get the current graphic being shown on the face, or can change the graphic being shown on the face. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.


property TexturePicturePath

property TreeCube.TexturePicturePath as String
Specifies the path to load the faces/pictures.

Type | Description
String | A String expression that specifies the path to load the faces/pictures.
By default, the TexturePicturePath property is "<default>" which loads a default texture. The TexturePicturePath property specifies the path to load the faces/pictures. The TexturePicturePath property on "" removes the current texture from the cube. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the texture on each face of the cube:

  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.

The following screen shot shows the "<default>" texture ( C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Interstelar ):

The following screen shot shows the "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Earth" texture:

The following screen shot shows the "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Chapel" texture:

The following screen shot shows the "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\JapanGarden" texture:


property TexturePictureWidth

property TreeCube.TexturePictureWidth as Long
Specifies the width in pixels, to render the pictures on the faces.

Type | Description
Long | A Long expression that specifies the width in pixels, to render the pictures on the faces.
The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces. The Picture property retrieves or sets a graphic to be displayed on the face's background. The Picture property can get the current graphic being shown on the face, or can change the graphic being shown on the face. The Title / ExtraTitle property grant unlimited options to show any HTML text, images, colors, EBNs, patterns, frames anywhere on the face's background. The IdentifyFace property specifies whether each face shows its index/name/frame.

The following properties change the size of the texture on all faces of the cube:

  • The TexturePictureWidth property specifies the width in pixels, to render the textures/ pictures on all faces.
  • The TexturePictureHeight property specifies the height in pixels, to render the textures/ pictures on all faces.

The size of the textures/ pictures is automatically set on the control's size, as soon as it gets resized.

The following properties change the texture on each face of the cube:

  • The TexturePicturePath property specifies the path to load the faces/pictures.
  • The TexturePictureName property specifies the comma-separated list of picture file name to be tried to load by the TexturePicturePath property.
  • The TexturePictureExt property specifies the comma-separated list of graphics format/extension to be tried to load by the TexturePicturePath property.
  • The Picture property retrieves or sets a graphic to be displayed on the face's background.


property ToolTipDelay

property TreeCube.ToolTipDelay as Long
Specifies the time in ms that passes before the ToolTip appears.

Type | Description
Long | A long expression that specifies the time in ms that passes before the ToolTip appears.

If the ToolTipDelay or ToolTipPopDelay property is 0, the control displays no tooltips. The ToolTipPopDelay property specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control. Use the ToolTipWidth property to specify the width of the tooltip window. Use the Background(exToolTipAppearance) property indicates the visual appearance of the borders of the tooltips. Use the Background(exToolTipBackColor) property indicates the tooltip's background color. Use the Background(exToolTipForeColor) property indicates the tooltip's foreground color. Use the ShowToolTip method to display a custom tooltip.


property ToolTipFont

property TreeCube.ToolTipFont as IFontDisp
Retrieves or sets the tooltip's font.

Type | Description
IFontDisp | A Font object being used to display the tooltip.
Use the ToolTipFont property to assign a font for the control's tooltip. The ToolTipPopDelay property specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control. Use the ToolTipWidth property to specify the width of the tooltip window. Use the ShowToolTip method to display a custom tooltip.


property ToolTipPopDelay

property TreeCube.ToolTipPopDelay as Long
Specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control.

Type | Description
Long | A long expression that specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control.

If the ToolTipDelay or ToolTipPopDelay property is 0, the control displays no tooltips. The ToolTipDelay property specifies the time in ms that passes before the ToolTip appears. Use the ToolTipWidth property to specify the width of the tooltip window. Use the ToolTipFont property to assign a font for the control's tooltip. Use the Background(exToolTipAppearance) property indicates the visual appearance of the borders of the tooltips. Use the Background(exToolTipBackColor) property indicates the tooltip's background color. Use the Background(exToolTipForeColor) property indicates the tooltip's foreground color. Use the ShowToolTip method to display a custom tooltip.


property ToolTipWidth

property TreeCube.ToolTipWidth as Long
Specifies a value that indicates the width of the tooltip window, in pixels.

Type | Description
Long | A long expression that indicates the width of the tooltip window.

Use the ToolTipWidth property to change the tooltip window width. The height of the tooltip window is automatically computed based on tooltip's description. The ToolTipPopDelay property specifies the period in ms of time the ToolTip remains visible if the mouse pointer is stationary within a control. The ToolTipDelay property specifies the time in ms that passes before the ToolTip appears. Use the ToolTipFont property to assign a font for the control's tooltip. Use the Background(exToolTipAppearance) property indicates the visual appearance of the borders of the tooltips. Use the Background(exToolTipBackColor) property indicates the tooltip's background color. Use the Background(exToolTipForeColor) property indicates the tooltip's foreground color. Use the ShowToolTip method to display a custom tooltip.


property TopFace

property TreeCube.TopFace as Face
Returns the top face of the cube.

Type | Description
Face | A Face object that indicates the top face of the cube.
The Face(exTopFace) or TopFace property returns the top face. The Index property specifies the index of the face. The Face property returns the giving face.

The following properties can be used to access any face of the cube:

  • The Face(exFrontFace) or FrontFace property returns the face on the front.
  • The Face(exBottomFace) or BottomFace property returns the face on the bottom.
  • The Face(exRightFace) or RightFace property returns the face on the right.
  • The Face(exLeftFace) or LeftFace property returns the face on the left.
  • The Face(exDownFace) or DownFace property returns down face.


property Transparent

property TreeCube.Transparent as Long
Gets or sets a value that indicates percent of the transparency to display the pictures on the cube.

Type | Description
Long | A Long expression that indicates percent of the transparency to display the textures/pictures on the cube. 0 means opaque, 50 means semi-transparent, 100 - fully transparent

By default, the Transparent property is 0 ( opaque ). The Transparent property gets or sets a value that indicates percent of the transparency to display the texture / pictures on the cube. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content of the face within the cube. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content on all faces of the cube. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

The following screen shot shows the cube's texture opaque:

The following screen shot shows the cube's texture semi-transparent:


property TransparentContent

property TreeCube.TransparentContent as Long
Gets or sets a value that indicates percent of the transparency to display the content of the face within the cube.

Type | Description
Long | A Long expression that indicates percent of the transparency to display the content of the face within the cube. 0 means opaque, 50 means semi-transparent, 100 - fully transparent

By default, the TransparentContent property is 0 ( opaque ). The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content on all faces of the cube. The TransparentContent property gets or sets a value that indicates percent of the transparency to display the content of the face within the cube. The Transparent property gets or sets a value that indicates percent of the transparency to display the texture / pictures on the cube. The Visible property specifies whether the face's content is visible or hidden. The Enabled property enables or disables the face.

The following screen shot shows the face's content opaque:

The following screen shot shows the face's content semi-transparent:

.


property UseVisualTheme

property TreeCube.UseVisualTheme as UIVisualThemeEnum
Specifies whether the control uses the current visual theme to display certain UI parts.

Type | Description
UIVisualThemeEnum | An UIVisualThemeEnum expression that specifies which UI parts of the control are shown using the current visual theme.
By default, the UseVisualTheme property is exDefaultVisualTheme, which means that all known UI parts are shown as in the current theme. The UseVisualTheme property may specify the UI parts that you need to enable or disable the current visual theme. The UI Parts are like header, filterbar, check-boxes, buttons and so on. The UseVisualTheme property has effect only a current theme is selected for your desktop. The UseVisualTheme property. Use the Appearance property of the control to provide your own visual appearance using the EBN files.


property Version

property TreeCube.Version as String
Retrieves the control's version.

Type | Description
String | A string expression that indicates the control's version.

The version property specifies the control's version.


property VisibleFace

property TreeCube.VisibleFace as FaceEnum
Indicates the currently visible face.

Type | Description
FaceEnum | A FaceEnum expression that specifies the face to get it on front
By default, the VisibleFace property is exFrontFace. The VisibleFace property specifies the visible face. The EnsureVisibleFace method ensures that specified face is fully displayed on the control. Use the AllowEnsureVisibleFaceOnKey property to disable navigating through the faces when user presses SPACE or arrow keys. The AlwaysEnsureVisibleFace property indicates whether the control allows fully visible face when the user drags the cube to a different position. The EnsureVisibleFaces property specifies the faces that can be fully visible. The EnsureVisibleFaceMargin property specifies the size of the margin ( left / right ) of the cube's client area to ensure that a face fits it. The EnsureVisibleFaceOnDblClick property ensures that the face being double clicked fits the cube's client area.

The control may fire the following events, when the user drags the cube to a new position, or if the EnsureVisibleFace / VisibleFace method is called:

  • LayoutStartChanging event notifies that the user starts dragging the cube.
  • Rotate / Zoom occurs when any of the following properties RotX, RotY, Zoom are updated
  • Move event occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
  • LayoutEndChanging event notifies that the user ends dragging the cube.


property VisualAppearance

property TreeCube.VisualAppearance as Appearance
Retrieves the control's appearance.

Type | Description
Appearance | An Appearance object that holds a collection of skins.
Use the Add method to add or replace skins to the control. The skin method, in it's simplest form, uses a single graphic file (*.ebn) assigned to a part of the control. By using a collection of objects laid over the graphic, it is possible to define which sections of the graphic will be used as borders, corners and other possible elements, fixing them to their proper position regardless of the size of the part.


property Zoom

property TreeCube.Zoom as Single
Zooms the view.

Type | Description
Single | A Single expression that indicates the zoom factor.
By default, the Zoom factor is 0.14 The Zoom factor should be between 0.01 and 0.21. Any other value is reduced to this range. The Zoom event is fired when the user calls in the code the Zoom method or whether the user rotates the mouse wheel. Use the OnMouseWheel property to disable zooming the view when the user rotates the mouse wheel.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.


ExTreeCube events
Tip The /COM object can be placed on a HTML page (with usage of the HTML object tag: <object classid="clsid:...">) using the class identifier: {13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}. The object's program identifier is: "Exontrol.TreeCube". The /COM object module is: "ExTreeCube.dll"
The eXTreeCube library provides fisheye representation / cube map texturing of different components such as calendar, multiple - columns tree view and so on. Fish-eye lenses magnify the center of the field of view, while the scale being reduced towards the edge. Cube map texturing is a form of environment texture mapping that uses a viewing direction (3D vector) to map into a view plane the six 2D textures arranged like the faces of a cube.

The following table shows how you can create / access different type of objects ( red items indicates the name of the property/method ):

EXTREECUBELib.TreeCube
    "BottomFace" -> EXTREECUBELib.Face
    "DownFace" -> EXTREECUBELib.Face
    "Face(FaceEnum)" -> EXTREECUBELib.Face
    "FrontFace" -> EXTREECUBELib.Face
    "LeftFace" -> EXTREECUBELib.Face
    "RightFace" -> EXTREECUBELib.Face
    "TopFace" -> EXTREECUBELib.Face
    "VisualAppearance" -> EXTREECUBELib.Appearance
EXTREECUBELib.Face
    "CreateCalendar" -> EXTREECUBELib.FaceCalendar
    "CreatePicture" -> EXTREECUBELib.FacePicture
    "CreateTree" -> EXTREECUBELib.FaceTree
    "FaceCalendar" -> EXTREECUBELib.FaceCalendar
    "FacePicture" -> EXTREECUBELib.FacePicture
    "FaceTree" -> EXTREECUBELib.FaceTree
    "Neighbor(RotateEnum)" -> EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FacePicture
    "Face" -> EXTREECUBELib.Face
EXTREECUBELib.FaceTree
    "Columns" -> EXTREECUBELib.Columns
    "Face" -> EXTREECUBELib.Face
    "ItemByIndex(Long)" -> EXTREECUBELib.Item
    "Items" -> EXTREECUBELib.Items
EXTREECUBELib.Columns
    "Add(String)" -> EXTREECUBELib.Column
    "Item(Variant)" -> EXTREECUBELib.Column
EXTREECUBELib.Item
    "Items" -> EXTREECUBELib.Items
    "Parent" -> EXTREECUBELib.Item
EXTREECUBELib.Items
    "Add(Variant)" -> EXTREECUBELib.Item
    "Item(Variant)" -> EXTREECUBELib.Item

The following table shows how you can create / access different type of objects ( red items indicates the name of the property/method ):

EXTREECUBELib.Appearance <- "VisualAppearance" of EXTREECUBELib.TreeCube
EXTREECUBELib.Column <- "Add(String)" of EXTREECUBELib.Columns
EXTREECUBELib.Column <- "Item(Variant)" of EXTREECUBELib.Columns
EXTREECUBELib.Columns <- "Columns" of EXTREECUBELib.FaceTree
EXTREECUBELib.Face <- "BottomFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "DownFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Face" of EXTREECUBELib.FaceTree
EXTREECUBELib.Face <- "Face(FaceEnum)" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "FrontFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "LeftFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "Neighbor(RotateEnum)" of EXTREECUBELib.Face
EXTREECUBELib.Face <- "RightFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.Face <- "TopFace" of EXTREECUBELib.TreeCube
EXTREECUBELib.FaceCalendar <- "CreateCalendar" of EXTREECUBELib.Face
EXTREECUBELib.FaceCalendar <- "FaceCalendar" of EXTREECUBELib.Face
EXTREECUBELib.FacePicture <- "CreatePicture" of EXTREECUBELib.Face
EXTREECUBELib.FacePicture <- "FacePicture" of EXTREECUBELib.Face
EXTREECUBELib.FaceTree <- "CreateTree" of EXTREECUBELib.Face
EXTREECUBELib.FaceTree <- "FaceTree" of EXTREECUBELib.Face
EXTREECUBELib.Item <- "Add(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "Item(Variant)" of EXTREECUBELib.Items
EXTREECUBELib.Item <- "ItemByIndex(Long)" of EXTREECUBELib.FaceTree
EXTREECUBELib.Item <- "Parent" of EXTREECUBELib.Item
EXTREECUBELib.Items <- "Items" of EXTREECUBELib.Item

The ExTreeCube component supports the following events:

Name | Description
AnchorClick | Occurs when an anchor element is clicked.
Click | Occurs when the user presses and then releases the left mouse button over the control.
DblClick | Occurs when the user dblclk the left mouse button over an object.
Event | Notifies the application once the control fires an event.
FaceCalendarDateChanged | Notifies that the user browses for a new date into a face of calendar type.
FaceCalendarSelectionChanged | Notifies that the user selects a new date into a face of calendar type.
FaceCalendarValueChanged | Notifies that the user selects a new date/value into a face of the calendar type.
FaceTreeButtonClick | Notifies that a cell of button's type has been clicked.
FaceTreeExpandItem | Notifies that an item has been expanded/collapsed into a face of tree type.
FaceTreeSelectionChanged | Notifies that the user selects a new item/column into a face of tree type.
FaceTreeStateChanged | Notifies that a cell changes its state into a face of tree type.
FaceTreeValueChanged | Notifies that the user selects a new item/column/value into a face of the tree type.
InitFaceCalendar | Notifies your application that a face changes its type to exFaceCalendar.
InitFaceContent | Notifies your application that a face changes its type, so you can initialize its content.
InitFacePicture | Notifies your application that a face changes its type to exFacePicture.
InitFaceTree | Notifies your application that a face changes its type to exFaceTree.
KeyDown | Occurs when the user presses a key while an object has the focus.
KeyPress | Occurs when the user presses and releases an ANSI key.
KeyUp | Occurs when the user releases a key while an object has the focus.
LayoutEndChanging | Notifies your application once the control's layout has been changed.
LayoutStartChanging | Occurs when the control's layout is about to be changed.
MouseDown | Occurs when the user presses a mouse button.
MouseMove | Occurs when the user moves the mouse.
MouseUp | Occurs when the user releases a mouse button.
Move | Occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.
RClick | Occurs once the user right clicks the control.
Rotate | Fired when the cube is rotated.
Zoom | Occurs when the view is magnified.


event AnchorClick

event AnchorClick (Face as FaceEnum, AnchorID as String, Options as String)
Occurs when an anchor element is clicked.

Type | Description
Face as FaceEnum | The Face where the user clicks an anchor element.
AnchorID as String | A string expression that indicates the identifier of the anchor
Options as String | A string expression that specifies options of the anchor element.
The control fires the AnchorClick event to notify that the user clicks an anchor element. An anchor is a piece of text or some other object (for example an image) which marks the beginning and/or the end of a hypertext link. The <a> element is used to mark that piece of text (or inline image), and to give its hypertextual relationship to other documents. The AnchorClick event is fired only if prior clicking the control it shows the hand cursor. For instance, if the cell is disabled, the hand cursor is not shown when hovers the anchor element, and so the AnchorClick event is not fired. Use the FormatAnchor property to specify the visual effect for anchor elements. For instance, if the user clicks the anchor <a1>anchor</a>, the control fires the AnchorClick event, where the AnchorID parameter is 1, and the Options parameter is empty. Also, if the user clicks the anchor <a 1;yourextradata>anchor</a>, the AnchorID parameter of the AnchorClick event is 1, and the Options parameter is "yourextradata". Use the AnchorFromPoint property to retrieve the identifier of the anchor element from the cursor.

Syntax for AnchorClick event, /NET version, on:

private void AnchorClick(object sender,exontrol.EXTREECUBELib.FaceEnum   Face,string   AnchorID,string   Options)
{
}

Private Sub AnchorClick(ByVal sender As System.Object,ByVal Face As exontrol.EXTREECUBELib.FaceEnum,ByVal AnchorID As String,ByVal Options As String) Handles AnchorClick
End Sub

Syntax for AnchorClick event, /COM version, on:

private void AnchorClick(object sender, AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent e)
{
}

void OnAnchorClick(long   Face,LPCTSTR   AnchorID,LPCTSTR   Options)
{
}

void __fastcall AnchorClick(TObject *Sender,Extreecubelib_tlb::FaceEnum   Face,BSTR   AnchorID,BSTR   Options)
{
}

procedure AnchorClick(ASender: TObject; Face : FaceEnum;AnchorID : WideString;Options : WideString);
begin
end;

procedure AnchorClick(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent);
begin
end;

begin event AnchorClick(long  Face,string  AnchorID,string  Options)

end event AnchorClick

Private Sub AnchorClick(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent) Handles AnchorClick
End Sub

Private Sub AnchorClick(ByVal Face As EXTREECUBELibCtl.FaceEnum,ByVal AnchorID As String,ByVal Options As String)
End Sub

Private Sub AnchorClick(ByVal Face As Long,ByVal AnchorID As String,ByVal Options As String)
End Sub

LPARAMETERS Face,AnchorID,Options

PROCEDURE OnAnchorClick(oTreeCube,Face,AnchorID,Options)

RETURN

Syntax for AnchorClick event, /COM version (others), on:

<SCRIPT EVENT="AnchorClick(Face,AnchorID,Options)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function AnchorClick(Face,AnchorID,Options)
End Function
</SCRIPT>

Procedure OnComAnchorClick OLEFaceEnum   llFace String   llAnchorID String   llOptions
    Forward Send OnComAnchorClick llFace llAnchorID llOptions
End_Procedure

METHOD OCX_AnchorClick(Face,AnchorID,Options) CLASS MainDialog
RETURN NIL

void onEvent_AnchorClick(int   _Face,str   _AnchorID,str   _Options)
{
}

function AnchorClick as v (Face  as  OLE::Exontrol.TreeCube.1::FaceEnum,AnchorID  as  C,Options  as  C)
end function

function nativeObject_AnchorClick(Face,AnchorID,Options)
return

How can I display a hyperlink element?

VBA (MS Access, Excell...)

' AnchorClick event - Occurs when an anchor element is clicked.
Private Sub TreeCube1_AnchorClick(ByVal Face As Long,ByVal AnchorID As String,ByVal Options As String)
    With TreeCube1
        Debug.Print( Face )
        Debug.Print( AnchorID )
        Debug.Print( Options )
    End With
End Sub

With TreeCube1
    With .FrontFace.CreateTree
        .ShowSelection = False
        .HeaderVisible = False
        .DrawGridLines = 0
        .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
    End With
End With

VB6

' AnchorClick event - Occurs when an anchor element is clicked.
Private Sub TreeCube1_AnchorClick(ByVal Face As EXTREECUBELibCtl.FaceEnum,ByVal AnchorID As String,ByVal Options As String)
    With TreeCube1
        Debug.Print( Face )
        Debug.Print( AnchorID )
        Debug.Print( Options )
    End With
End Sub

With TreeCube1
    With .FrontFace.CreateTree
        .ShowSelection = False
        .HeaderVisible = False
        .DrawGridLines = exNoLines
        .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
    End With
End With

VB.NET

' AnchorClick event - Occurs when an anchor element is clicked.
Private Sub Extreecube1_AnchorClick(ByVal sender As System.Object,ByVal Face As exontrol.EXTREECUBELib.FaceEnum,ByVal AnchorID As String,ByVal Options As String) Handles Extreecube1.AnchorClick
    With Extreecube1
        Debug.Print( Face )
        Debug.Print( AnchorID )
        Debug.Print( Options )
    End With
End Sub

With Extreecube1
    With .FrontFace.CreateTree()
        .ShowSelection = False
        .HeaderVisible = False
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines
        .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
    End With
End With

VB.NET for /COM

' AnchorClick event - Occurs when an anchor element is clicked.
Private Sub AxTreeCube1_AnchorClick(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent) Handles AxTreeCube1.AnchorClick
    With AxTreeCube1
        Debug.Print( e.face )
        Debug.Print( e.anchorID )
        Debug.Print( e.options )
    End With
End Sub

With AxTreeCube1
    With .FrontFace.CreateTree()
        .ShowSelection = False
        .HeaderVisible = False
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines
        .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
    End With
End With

C++

// AnchorClick event - Occurs when an anchor element is clicked.
void OnAnchorClickTreeCube1(long   Face,LPCTSTR   AnchorID,LPCTSTR   Options)
{
    OutputDebugStringW( L"Face" );
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"AnchorID" );
    OutputDebugStringW( L"Options" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutShowSelection(VARIANT_FALSE);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exNoLines);
    var_FaceTree->GetItems()->PutToString(L"<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>");

C++ Builder

// AnchorClick event - Occurs when an anchor element is clicked.
void __fastcall TForm1::TreeCube1AnchorClick(TObject *Sender,Extreecubelib_tlb::FaceEnum   Face,BSTR   AnchorID,BSTR   Options)
{
    OutputDebugString( L"Face" );
    OutputDebugString( L"AnchorID" );
    OutputDebugString( L"Options" );
}

Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ShowSelection = false;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exNoLines;
    var_FaceTree->Items->ToString = L"<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>";

C#

// AnchorClick event - Occurs when an anchor element is clicked.
private void extreecube1_AnchorClick(object sender,exontrol.EXTREECUBELib.FaceEnum   Face,string   AnchorID,string   Options)
{
    System.Diagnostics.Debug.Print( Face.ToString() );
    System.Diagnostics.Debug.Print( AnchorID.ToString() );
    System.Diagnostics.Debug.Print( Options.ToString() );
}
//this.extreecube1.AnchorClick += new exontrol.EXTREECUBELib.exg2antt.AnchorClickEventHandler(this.extreecube1_AnchorClick);

exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ShowSelection = false;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Items.ToString = "<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>";

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="AnchorClick(Face,AnchorID,Options)" LANGUAGE="JScript">
    alert( Face );
    alert( AnchorID );
    alert( Options );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ShowSelection = false;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.DrawGridLines = 0;
        var_FaceTree.Items.ToString = "<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>";
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_AnchorClick(Face,AnchorID,Options)
    With TreeCube1
        alert( Face )
        alert( AnchorID )
        alert( Options )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        With .FrontFace.CreateTree
            .ShowSelection = False
            .HeaderVisible = False
            .DrawGridLines = 0
            .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// AnchorClick event - Occurs when an anchor element is clicked.
private void axTreeCube1_AnchorClick(object sender, AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent e)
{
    System.Diagnostics.Debug.Print( e.face.ToString() );
    System.Diagnostics.Debug.Print( e.anchorID.ToString() );
    System.Diagnostics.Debug.Print( e.options.ToString() );
}
//this.axTreeCube1.AnchorClick += new AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEventHandler(this.axTreeCube1_AnchorClick);

EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ShowSelection = false;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Items.ToString = "<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>";

X++ (Dynamics Ax 2009)

// AnchorClick event - Occurs when an anchor element is clicked.
void onEvent_AnchorClick(int   _Face,str   _AnchorID,str   _Options)
{
    ;
    print( _Face );
    print( _AnchorID );
    print( _Options );
}

public void init()
{
    COM com_FaceTree,com_Items;
    anytype var_FaceTree,var_Items;
    ;

    super();

    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ShowSelection(false);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.DrawGridLines(0/*exNoLines*/);
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.ToString("<a A1\\;options1>Item 1</a>,<a A2\\;options2>Item 2</a>");
}

Delphi 8 (.NET only)

// AnchorClick event - Occurs when an anchor element is clicked.
procedure TWinForm1.AxTreeCube1_AnchorClick(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_AnchorClickEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.face );
        OutputDebugString( e.anchorID );
        OutputDebugString( e.options );
    end
end;

with AxTreeCube1 do
begin
    with FrontFace.CreateTree() do
    begin
        ShowSelection := False;
        HeaderVisible := False;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exNoLines;
        Items.ToString := '<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>';
    end;
end

Delphi (standard)

// AnchorClick event - Occurs when an anchor element is clicked.
procedure TForm1.TreeCube1AnchorClick(ASender: TObject; Face : FaceEnum;AnchorID : WideString;Options : WideString);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Face );
        OutputDebugString( AnchorID );
        OutputDebugString( Options );
    end
end;

with TreeCube1 do
begin
    with FrontFace.CreateTree() do
    begin
        ShowSelection := False;
        HeaderVisible := False;
        DrawGridLines := EXTREECUBELib_TLB.exNoLines;
        Items.ToString := '<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>';
    end;
end

VFP

*** AnchorClick event - Occurs when an anchor element is clicked. ***
LPARAMETERS Face,AnchorID,Options
    with thisform.TreeCube1
        DEBUGOUT( Face )
        DEBUGOUT( AnchorID )
        DEBUGOUT( Options )
    endwith

with thisform.TreeCube1
    with .FrontFace.CreateTree
        .ShowSelection = .F.
        .HeaderVisible = .F.
        .DrawGridLines = 0
        .Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    AnchorClick = class::nativeObject_AnchorClick
endwith
*/
// Occurs when an anchor element is clicked.
function nativeObject_AnchorClick(Face,AnchorID,Options)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Face)
    ? Str(AnchorID)
    ? Str(Options)
return

local oTreeCube,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ShowSelection = false
    var_FaceTree.HeaderVisible = false
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

XBasic (Alpha Five)

' Occurs when an anchor element is clicked.
function AnchorClick as v (Face  as  OLE::Exontrol.TreeCube.1::FaceEnum,AnchorID  as  C,Options  as  C)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Face
    ? AnchorID
    ? Options
end function

Dim oTreeCube as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ShowSelection = .f.
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

Visual Objects

METHOD OCX_Exontrol1AnchorClick(Face,AnchorID,Options) CLASS MainDialog
    // AnchorClick event - Occurs when an anchor element is clicked.
    OutputDebugString(String2Psz( AsString(Face) ))
    OutputDebugString(String2Psz( AsString(AnchorID) ))
    OutputDebugString(String2Psz( AsString(Options) ))
RETURN NIL

local var_FaceTree as IFaceTree

var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ShowSelection := false
    var_FaceTree:HeaderVisible := false
    var_FaceTree:DrawGridLines := exNoLines
    var_FaceTree:Items:ToString := "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

PowerBuilder

/*begin event AnchorClick(long  Face,string  AnchorID,string  Options) - Occurs when an anchor element is clicked.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Face) ))
    MessageBox("Information",string( String(AnchorID) ))
    MessageBox("Information",string( String(Options) ))
*/
/*end event AnchorClick*/

OleObject oTreeCube,var_FaceTree

oTreeCube = ole_1.Object
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ShowSelection = false
    var_FaceTree.HeaderVisible = false
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Items.ToString = "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

Visual DataFlex

// Occurs when an anchor element is clicked.
Procedure OnComAnchorClick OLEFaceEnum   llFace String   llAnchorID String   llOptions
    Forward Send OnComAnchorClick llFace llAnchorID llOptions
    Showln llFace llAnchorID llOptions
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComShowSelection of hoFaceTree to False
            Set ComHeaderVisible of hoFaceTree to False
            Set ComDrawGridLines of hoFaceTree to OLEexNoLines
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComToString of hoItems to "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

PROCEDURE OnAnchorClick(oTreeCube,Face,AnchorID,Options)
    DevOut( Transform(Face,"") )
    DevOut( Transform(AnchorID,"") )
    DevOut( Transform(Options,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:AnchorClick := {|Face,AnchorID,Options| OnAnchorClick(oTreeCube,Face,AnchorID,Options)} /*Occurs when an anchor element is clicked.*/

        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ShowSelection := .F.
            oFaceTree:HeaderVisible := .F.
            oFaceTree:DrawGridLines := 0/*exNoLines*/
            oFaceTree:Items():ToString := "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event Click ()
Occurs when the user presses and then releases the left mouse button over the control.

Type Description
The Click event occurs once the user clicks any face of the control. The FaceFromPoint property retrieves the index of the face from the cursor. The AnchorFromPoint proeprty retrieves the key of the hyperlink/anchor from the cursor. Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers.

Syntax for Click event, /NET version, on:

private void Click(object sender)
{
}

Private Sub Click(ByVal sender As System.Object) Handles Click
End Sub

Syntax for Click event, /COM version, on:

private void ClickEvent(object sender, EventArgs e)
{
}

void OnClick()
{
}

void __fastcall Click(TObject *Sender)
{
}

procedure Click(ASender: TObject; );
begin
end;

procedure ClickEvent(sender: System.Object; e: System.EventArgs);
begin
end;

begin event Click()

end event Click

Private Sub ClickEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClickEvent
End Sub

Private Sub Click()
End Sub

Private Sub Click()
End Sub

LPARAMETERS nop

PROCEDURE OnClick(oTreeCube)

RETURN

Syntax for Click event, /COM version (others), on:

<SCRIPT EVENT="Click()" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function Click()
End Function
</SCRIPT>

Procedure OnComClick
    Forward Send OnComClick
End_Procedure

METHOD OCX_Click() CLASS MainDialog
RETURN NIL

void onEvent_Click()
{
}

function Click as v ()
end function

function nativeObject_Click()
return


event DblClick

event DblClick (Shift as Integer, X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS)
Occurs when the user dblclk the left mouse button over an object.

Type | Description
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys.
X as OLE_XPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in container coordinates.
Y as OLE_YPOS_PIXELS | A single that specifies the current Y location of the mouse pointer. The y values is always expressed in container coordinates
The DblClick event occurs once the user double-clicks any face of the control. By default, the face being double-clicked gets visible. Use the EnsureVisibleFaceOnDblClick property to prevent ensuring visible the face being double-clicked. The ExpandOnDblClick property specifies whether the item being double-clicked gets expanded or collapsed, in a face of tree type. The FaceFromPoint property retrieves the index of the face from the cursor. The AnchorFromPoint proeprty retrieves the key of the hyperlink/anchor from the cursor. Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers.

Syntax for DblClick event, /NET version, on:

private void DblClick(object sender,short   Shift,int   X,int   Y)
{
}

Private Sub DblClick(ByVal sender As System.Object,ByVal Shift As Short,ByVal X As Integer,ByVal Y As Integer) Handles DblClick
End Sub

Syntax for DblClick event, /COM version, on:

private void DblClick(object sender, AxEXTREECUBELib._ITreeCubeEvents_DblClickEvent e)
{
}

void OnDblClick(short   Shift,long   X,long   Y)
{
}

void __fastcall DblClick(TObject *Sender,short   Shift,int   X,int   Y)
{
}

procedure DblClick(ASender: TObject; Shift : Smallint;X : Integer;Y : Integer);
begin
end;

procedure DblClick(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_DblClickEvent);
begin
end;

begin event DblClick(integer  Shift,long  X,long  Y)

end event DblClick

Private Sub DblClick(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_DblClickEvent) Handles DblClick
End Sub

Private Sub DblClick(Shift As Integer,X As Single,Y As Single)
End Sub

Private Sub DblClick(ByVal Shift As Integer,ByVal X As Long,ByVal Y As Long)
End Sub

LPARAMETERS Shift,X,Y

PROCEDURE OnDblClick(oTreeCube,Shift,X,Y)

RETURN

Syntax for DblClick event, /COM version (others), on:

<SCRIPT EVENT="DblClick(Shift,X,Y)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function DblClick(Shift,X,Y)
End Function
</SCRIPT>

Procedure OnComDblClick Short   llShift OLE_XPOS_PIXELS   llX OLE_YPOS_PIXELS   llY
    Forward Send OnComDblClick llShift llX llY
End_Procedure

METHOD OCX_DblClick(Shift,X,Y) CLASS MainDialog
RETURN NIL

void onEvent_DblClick(int   _Shift,int   _X,int   _Y)
{
}

function DblClick as v (Shift  as  N,X  as  OLE::Exontrol.TreeCube.1::OLE_XPOS_PIXELS,Y  as  OLE::Exontrol.TreeCube.1::OLE_YPOS_PIXELS)
end function

function nativeObject_DblClick(Shift,X,Y)
return


event Event

event Event (EventID as Long)
Notifies the application once the control fires an event.

Type | Description
EventID as Long | A Long expression that specifies the identifier of the event. Use the EventParam(-2) to display entire information about fired event ( such as name, identifier, and properties ).
The Event notification occurs ANY time the control fires an event, and it is available for the /COM version only

This is useful for X++ language, which does not support event with parameters passed by reference.

In X++ the "Error executing code: FormActiveXControl (data source), method ... called with invalid parameters" occurs when handling events that have parameters passed by reference. Passed by reference, means that in the event handler, you can change the value for that parameter, and so the control will takes the new value, and use it. The X++ is NOT able to handle properly events with parameters by reference, so we have the solution.

The solution is using and handling the Event notification and EventParam method., instead handling the event that gives the "invalid parameters" error executing code.

Let's presume that we need to handle the BarParentChange event to change the _Cancel parameter from false to true, which fires the "Error executing code: FormActiveXControl (data source), method onEvent_BarParentChange called with invalid parameters." We need to know the identifier of the BarParentChange event ( each event has an unique identifier and it is static, defined in the control's type library ). If you are not familiar with what a type library means just handle the Event of the control as follows:

// Notifies the application once the control fires an event.
void onEvent_Event(int _EventID)
{
    print extreecube1.EventParam(-2).toString();
}

This code allows you to display the information for each event of the control being fired as in the list bellow:

InitFaceContent/12( [Object] )
InitFaceTree/15( [Object] )
MouseMove/-606( 0 , 0 , 2 , 168 )
MouseMove/-606( 0 , 0 , 16 , 168 )

Each line indicates an event, and the following information is provided: the name of the event, its identifier, and the list of parameters being passed to the event. The parameters that starts with = character, indicates a parameter by reference, in other words one that can changed during the event handler.

Now, we can see that the identifier for the BarParentChange event is 125, so we need to handle the Event event as:

// Notifies the application once the control fires an event.
void onEvent_Event(int _EventID)
{
    ;
    if ( _EventID == 125 ) /*event BarParentChange (Item as HITEM, Key as Variant, NewItem as HITEM, Cancel as Boolean) */
        extreecube1.EventParam( 3 /*Cancel*/, COMVariant::createFromBoolean(true) );
}

The code checks if the BarParentChange ( _EventID == 125) event is fired, and changes the third parameter of the event to true. The definition for BarParentChange event can be consulted in the control's documentation or in the ActiveX explorer. So, anytime you need to access the original parameters for the event you should use the EventParam method that allows you to get or set a parameter. If the parameter is not passed by reference, you can not change the parameter's value.

Now, let's add some code to see a complex sample, so let's say that we need to prevent moving the bar from an item to any disabled item. So, we need to specify the Cancel parameter as not Items.EnableItem(NewItem), in other words cancels if the new parent is disabled. Shortly the code will be:

// Notifies the application once the control fires an event.
void onEvent_Event(int _EventID)
{
    ;
    if ( _EventID == 125 ) /*event BarParentChange (Item as HITEM, Key as Variant, NewItem as HITEM, Cancel as Boolean) */
        if ( !extreecube1.Items().EnableItem( extreecube1.EventParam( 2 /*NewItem*/ ) ) )
            extreecube1.EventParam( 3 /*Cancel*/, COMVariant::createFromBoolean(true) );
}

In conclusion, anytime the X++ fires the "invalid parameters." while handling an event, you can use and handle the Event notification and EventParam methods of the control

Syntax for Event event, /COM version, on:

private void Event(object sender, AxEXTREECUBELib._ITreeCubeEvents_EventEvent e)
{
}

void OnEvent(long   EventID)
{
}

void __fastcall Event(TObject *Sender,long   EventID)
{
}

procedure Event(ASender: TObject; EventID : Integer);
begin
end;

procedure Event(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_EventEvent);
begin
end;

begin event Event(long  EventID)

end event Event

Private Sub Event(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_EventEvent) Handles Event
End Sub

Private Sub Event(ByVal EventID As Long)
End Sub

Private Sub Event(ByVal EventID As Long)
End Sub

LPARAMETERS EventID

PROCEDURE OnEvent(oTreeCube,EventID)

RETURN

Syntax for Event event, /COM version (others), on:

<SCRIPT EVENT="Event(EventID)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function Event(EventID)
End Function
</SCRIPT>

Procedure OnComEvent Integer   llEventID
    Forward Send OnComEvent llEventID
End_Procedure

METHOD OCX_Event(EventID) CLASS MainDialog
RETURN NIL

void onEvent_Event(int   _EventID)
{
}

function Event as v (EventID  as  N)
end function

function nativeObject_Event(EventID)
return


event FaceCalendarDateChanged

event FaceCalendarDateChanged (Calendar as FaceCalendar)
Notifies that the user browses for a new date into a face of calendar type.

Type | Description
Calendar as FaceCalendar | A FaceCalendar object that indicates the calendar whose Date property has been changed.
The FaceCalendarDateChanged event notifies your application once the calendar's Date property is changed. The Date property indicates the date that the calendar displays. The FaceCalendarSelectionChanged / FaceCalendarValueChanged event notifies your application once the user changes the selected date in the calendar control.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

Syntax for FaceCalendarDateChanged event, /NET version, on:

private void FaceCalendarDateChanged(object sender,exontrol.EXTREECUBELib.FaceCalendar   Calendar)
{
}

Private Sub FaceCalendarDateChanged(ByVal sender As System.Object,ByVal Calendar As exontrol.EXTREECUBELib.FaceCalendar) Handles FaceCalendarDateChanged
End Sub

Syntax for FaceCalendarDateChanged event, /COM version, on:

private void FaceCalendarDateChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarDateChangedEvent e)
{
}

void OnFaceCalendarDateChanged(LPDISPATCH   Calendar)
{
}

void __fastcall FaceCalendarDateChanged(TObject *Sender,Extreecubelib_tlb::IFaceCalendar   *Calendar)
{
}

procedure FaceCalendarDateChanged(ASender: TObject; Calendar : IFaceCalendar);
begin
end;

procedure FaceCalendarDateChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarDateChangedEvent);
begin
end;

begin event FaceCalendarDateChanged(oleobject  Calendar)

end event FaceCalendarDateChanged

Private Sub FaceCalendarDateChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarDateChangedEvent) Handles FaceCalendarDateChanged
End Sub

Private Sub FaceCalendarDateChanged(ByVal Calendar As EXTREECUBELibCtl.IFaceCalendar)
End Sub

Private Sub FaceCalendarDateChanged(ByVal Calendar As Object)
End Sub

LPARAMETERS Calendar

PROCEDURE OnFaceCalendarDateChanged(oTreeCube,Calendar)

RETURN

Syntax for FaceCalendarDateChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceCalendarDateChanged(Calendar)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceCalendarDateChanged(Calendar)
End Function
</SCRIPT>

Procedure OnComFaceCalendarDateChanged Variant   llCalendar
    Forward Send OnComFaceCalendarDateChanged llCalendar
End_Procedure

METHOD OCX_FaceCalendarDateChanged(Calendar) CLASS MainDialog
RETURN NIL

void onEvent_FaceCalendarDateChanged(COM   _Calendar)
{
}

function FaceCalendarDateChanged as v (Calendar  as  OLE::Exontrol.TreeCube.1::IFaceCalendar)
end function

function nativeObject_FaceCalendarDateChanged(Calendar)
return


event FaceCalendarSelectionChanged

event FaceCalendarSelectionChanged (Calendar as FaceCalendar)
Notifies that the user selects a new date into a face of calendar type.

Type | Description
Calendar as FaceCalendar | A FaceCalendar object that indicates the calendar whose SelDate property has been changed.
The FaceCalendarSelectionChanged / FaceCalendarValueChanged event notifies your application once the user changes the selected date in the calendar control. The SelDate / Value property indicates the date that the calendar displays. The FaceCalendarDateChanged event notifies your application once the calendar's Date property is changed.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

Syntax for FaceCalendarSelectionChanged event, /NET version, on:

private void FaceCalendarSelectionChanged(object sender,exontrol.EXTREECUBELib.FaceCalendar   Calendar)
{
}

Private Sub FaceCalendarSelectionChanged(ByVal sender As System.Object,ByVal Calendar As exontrol.EXTREECUBELib.FaceCalendar) Handles FaceCalendarSelectionChanged
End Sub

Syntax for FaceCalendarSelectionChanged event, /COM version, on:

private void FaceCalendarSelectionChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarSelectionChangedEvent e)
{
}

void OnFaceCalendarSelectionChanged(LPDISPATCH   Calendar)
{
}

void __fastcall FaceCalendarSelectionChanged(TObject *Sender,Extreecubelib_tlb::IFaceCalendar   *Calendar)
{
}

procedure FaceCalendarSelectionChanged(ASender: TObject; Calendar : IFaceCalendar);
begin
end;

procedure FaceCalendarSelectionChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarSelectionChangedEvent);
begin
end;

begin event FaceCalendarSelectionChanged(oleobject  Calendar)

end event FaceCalendarSelectionChanged

Private Sub FaceCalendarSelectionChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarSelectionChangedEvent) Handles FaceCalendarSelectionChanged
End Sub

Private Sub FaceCalendarSelectionChanged(ByVal Calendar As EXTREECUBELibCtl.IFaceCalendar)
End Sub

Private Sub FaceCalendarSelectionChanged(ByVal Calendar As Object)
End Sub

LPARAMETERS Calendar

PROCEDURE OnFaceCalendarSelectionChanged(oTreeCube,Calendar)

RETURN

Syntax for FaceCalendarSelectionChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceCalendarSelectionChanged(Calendar)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceCalendarSelectionChanged(Calendar)
End Function
</SCRIPT>

Procedure OnComFaceCalendarSelectionChanged Variant   llCalendar
    Forward Send OnComFaceCalendarSelectionChanged llCalendar
End_Procedure

METHOD OCX_FaceCalendarSelectionChanged(Calendar) CLASS MainDialog
RETURN NIL

void onEvent_FaceCalendarSelectionChanged(COM   _Calendar)
{
}

function FaceCalendarSelectionChanged as v (Calendar  as  OLE::Exontrol.TreeCube.1::IFaceCalendar)
end function

function nativeObject_FaceCalendarSelectionChanged(Calendar)
return


event FaceCalendarValueChanged

event FaceCalendarValueChanged (Calendar as FaceCalendar)
Notifies that the user selects a new date/value into a face of the calendar type.

Type | Description
Calendar as FaceCalendar | A FaceCalendar object that indicates the calendar whose Value property has been changed.
The FaceCalendarSelectionChanged / FaceCalendarValueChanged event notifies your application once the user changes the selected date in the calendar control. The SelDate / Value property indicates the date that the calendar displays. The FaceCalendarDateChanged event notifies your application once the calendar's Date property is changed.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

Syntax for FaceCalendarValueChanged event, /NET version, on:

private void FaceCalendarValueChanged(object sender,exontrol.EXTREECUBELib.FaceCalendar   Calendar)
{
}

Private Sub FaceCalendarValueChanged(ByVal sender As System.Object,ByVal Calendar As exontrol.EXTREECUBELib.FaceCalendar) Handles FaceCalendarValueChanged
End Sub

Syntax for FaceCalendarValueChanged event, /COM version, on:

private void FaceCalendarValueChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarValueChangedEvent e)
{
}

void OnFaceCalendarValueChanged(LPDISPATCH   Calendar)
{
}

void __fastcall FaceCalendarValueChanged(TObject *Sender,Extreecubelib_tlb::IFaceCalendar   *Calendar)
{
}

procedure FaceCalendarValueChanged(ASender: TObject; Calendar : IFaceCalendar);
begin
end;

procedure FaceCalendarValueChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarValueChangedEvent);
begin
end;

begin event FaceCalendarValueChanged(oleobject  Calendar)

end event FaceCalendarValueChanged

Private Sub FaceCalendarValueChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceCalendarValueChangedEvent) Handles FaceCalendarValueChanged
End Sub

Private Sub FaceCalendarValueChanged(ByVal Calendar As EXTREECUBELibCtl.IFaceCalendar)
End Sub

Private Sub FaceCalendarValueChanged(ByVal Calendar As Object)
End Sub

LPARAMETERS Calendar

PROCEDURE OnFaceCalendarValueChanged(oTreeCube,Calendar)

RETURN

Syntax for FaceCalendarValueChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceCalendarValueChanged(Calendar)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceCalendarValueChanged(Calendar)
End Function
</SCRIPT>

Procedure OnComFaceCalendarValueChanged Variant   llCalendar
    Forward Send OnComFaceCalendarValueChanged llCalendar
End_Procedure

METHOD OCX_FaceCalendarValueChanged(Calendar) CLASS MainDialog
RETURN NIL

void onEvent_FaceCalendarValueChanged(COM   _Calendar)
{
}

function FaceCalendarValueChanged as v (Calendar  as  OLE::Exontrol.TreeCube.1::IFaceCalendar)
end function

function nativeObject_FaceCalendarValueChanged(Calendar)
return


event FaceTreeButtonClick

event FaceTreeButtonClick (Tree as FaceTree, Item as Long, Column as Long)
Notifies that a cell of button's type has been clicked.

Type | Description
Tree as FaceTree | A FaceTree object where the user clicks a button
Item as Long | A Long expression that indicates the index of the item that hosts the button being clicked.
Column as Long | A Long expression that indicates the index of the column that hosts the button being clicked.
The FaceTreeButtonClick event occurs once the user clicks the cell's button. The Def(exCellHasButton) property of the Column, assign buttons to all cells in the column. The HasButton property shows or hides the cell's button.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

Syntax for FaceTreeButtonClick event, /NET version, on:

private void FaceTreeButtonClick(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
}

Private Sub FaceTreeButtonClick(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles FaceTreeButtonClick
End Sub

Syntax for FaceTreeButtonClick event, /COM version, on:

private void FaceTreeButtonClick(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent e)
{
}

void OnFaceTreeButtonClick(LPDISPATCH   Tree,long   Item,long   Column)
{
}

void __fastcall FaceTreeButtonClick(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
}

procedure FaceTreeButtonClick(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
end;

procedure FaceTreeButtonClick(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent);
begin
end;

begin event FaceTreeButtonClick(oleobject  Tree,long  Item,long  Column)

end event FaceTreeButtonClick

Private Sub FaceTreeButtonClick(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent) Handles FaceTreeButtonClick
End Sub

Private Sub FaceTreeButtonClick(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
End Sub

Private Sub FaceTreeButtonClick(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
End Sub

LPARAMETERS Tree,Item,Column

PROCEDURE OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)

RETURN

Syntax for FaceTreeButtonClick event, /COM version (others), on:

<SCRIPT EVENT="FaceTreeButtonClick(Tree,Item,Column)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceTreeButtonClick(Tree,Item,Column)
End Function
</SCRIPT>

Procedure OnComFaceTreeButtonClick Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeButtonClick llTree llItem llColumn
End_Procedure

METHOD OCX_FaceTreeButtonClick(Tree,Item,Column) CLASS MainDialog
RETURN NIL

void onEvent_FaceTreeButtonClick(COM   _Tree,int   _Item,int   _Column)
{
}

function FaceTreeButtonClick as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
end function

function nativeObject_FaceTreeButtonClick(Tree,Item,Column)
return

How can I add buttons on the face?

VBA (MS Access, Excell...)

' FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
Private Sub TreeCube1_FaceTreeButtonClick(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        Debug.Print( Item )
        Debug.Print( Column )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .DrawGridLines = 0
        .ItemPadding = 16
        With .Columns.Add("Buttons")
            .FormatColumn = "1 index `A-Z`"
            .Def(2) = True
        End With
        .Items.Count = 4
    End With
End With

VB6

' FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
Private Sub TreeCube1_FaceTreeButtonClick(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        Debug.Print( Item )
        Debug.Print( Column )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .DrawGridLines = exNoLines
        .ItemPadding = 16
        With .Columns.Add("Buttons")
            .FormatColumn = "1 index `A-Z`"
            .Def(exCellHasButton) = True
        End With
        .Items.Count = 4
    End With
End With

VB.NET

' FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
Private Sub Extreecube1_FaceTreeButtonClick(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles Extreecube1.FaceTreeButtonClick
    With Extreecube1
        Debug.Print( Item )
        Debug.Print( Column )
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines
        .ItemPadding = 16
        With .Columns.Add("Buttons")
            .FormatColumn = "1 index `A-Z`"
            .set_Def(exontrol.EXTREECUBELib.DefColumnEnum.exCellHasButton,True)
        End With
        .Items.Count = 4
    End With
End With

VB.NET for /COM

' FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
Private Sub AxTreeCube1_FaceTreeButtonClick(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent) Handles AxTreeCube1.FaceTreeButtonClick
    With AxTreeCube1
        Debug.Print( e.item )
        Debug.Print( e.column )
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines
        .ItemPadding = 16
        With .Columns.Add("Buttons")
            .FormatColumn = "1 index `A-Z`"
            .Def(EXTREECUBELib.DefColumnEnum.exCellHasButton) = True
        End With
        .Items.Count = 4
    End With
End With

C++

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
void OnFaceTreeButtonClickTreeCube1(LPDISPATCH   Tree,long   Item,long   Column)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
    OutputDebugStringW( L"Column" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exNoLines);
    var_FaceTree->PutItemPadding(16);
    EXTREECUBELib::IColumnPtr var_Column = var_FaceTree->GetColumns()->Add(L"Buttons");
        var_Column->PutFormatColumn(L"1 index `A-Z`");
        var_Column->PutDef(EXTREECUBELib::exCellHasButton,VARIANT_TRUE);
    var_FaceTree->GetItems()->PutCount(4);

C++ Builder

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
void __fastcall TForm1::TreeCube1FaceTreeButtonClick(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
    OutputDebugString( L"Item" );
    OutputDebugString( L"Column" );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exNoLines;
    var_FaceTree->ItemPadding = 16;
    Extreecubelib_tlb::IColumnPtr var_Column = var_FaceTree->Columns->Add(L"Buttons");
        var_Column->FormatColumn = L"1 index `A-Z`";
        var_Column->set_Def(Extreecubelib_tlb::DefColumnEnum::exCellHasButton,TVariant(true));
    var_FaceTree->Items->Count = 4;

C#

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
private void extreecube1_FaceTreeButtonClick(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
    System.Diagnostics.Debug.Print( Column.ToString() );
}
//this.extreecube1.FaceTreeButtonClick += new exontrol.EXTREECUBELib.exg2antt.FaceTreeButtonClickEventHandler(this.extreecube1_FaceTreeButtonClick);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.ItemPadding = 16;
    exontrol.EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Buttons");
        var_Column.FormatColumn = "1 index `A-Z`";
        var_Column.set_Def(exontrol.EXTREECUBELib.DefColumnEnum.exCellHasButton,true);
    var_FaceTree.Items.Count = 4;

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeButtonClick(Tree,Item,Column)" LANGUAGE="JScript">
    alert( Item );
    alert( Column );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.DrawGridLines = 0;
        var_FaceTree.ItemPadding = 16;
        var var_Column = var_FaceTree.Columns.Add("Buttons");
            var_Column.FormatColumn = "1 index `A-Z`";
            var_Column.Def(2) = true;
        var_FaceTree.Items.Count = 4;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeButtonClick(Tree,Item,Column)
    With TreeCube1
        alert( Item )
        alert( Column )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .DrawGridLines = 0
            .ItemPadding = 16
            With .Columns.Add("Buttons")
                .FormatColumn = "1 index `A-Z`"
                .Def(2) = True
            End With
            .Items.Count = 4
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
private void axTreeCube1_FaceTreeButtonClick(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
    System.Diagnostics.Debug.Print( e.column.ToString() );
}
//this.axTreeCube1.FaceTreeButtonClick += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEventHandler(this.axTreeCube1_FaceTreeButtonClick);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.ItemPadding = 16;
    EXTREECUBELib.Column var_Column = var_FaceTree.Columns.Add("Buttons");
        var_Column.FormatColumn = "1 index `A-Z`";
        var_Column.set_Def(EXTREECUBELib.DefColumnEnum.exCellHasButton,true);
    var_FaceTree.Items.Count = 4;

X++ (Dynamics Ax 2009)

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
void onEvent_FaceTreeButtonClick(COM   _Tree,int   _Item,int   _Column)
{
    ;
    print( _Item );
    print( _Column );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.DrawGridLines(0/*exNoLines*/);
        com_FaceTree.ItemPadding(16);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Buttons"); com_Column = var_Column;
            com_Column.FormatColumn("1 index `A-Z`");
            com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
        var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
        com_Items.Count(4);
}

Delphi 8 (.NET only)

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
procedure TWinForm1.AxTreeCube1_FaceTreeButtonClick(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeButtonClickEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
        OutputDebugString( e.column );
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exNoLines;
        ItemPadding := 16;
        with Columns.Add('Buttons') do
        begin
            FormatColumn := '1 index `A-Z`';
            Def[EXTREECUBELib.DefColumnEnum.exCellHasButton] := TObject(True);
        end;
        Items.Count := 4;
    end;
end

Delphi (standard)

// FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
procedure TForm1.TreeCube1FaceTreeButtonClick(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
        OutputDebugString( Column );
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        DrawGridLines := EXTREECUBELib_TLB.exNoLines;
        ItemPadding := 16;
        with Columns.Add('Buttons') do
        begin
            FormatColumn := '1 index `A-Z`';
            Def[EXTREECUBELib_TLB.exCellHasButton] := OleVariant(True);
        end;
        Items.Count := 4;
    end;
end

VFP

*** FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked. ***
LPARAMETERS Tree,Item,Column
    with thisform.TreeCube1
        DEBUGOUT( Item )
        DEBUGOUT( Column )
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .DrawGridLines = 0
        .ItemPadding = 16
        with .Columns.Add("Buttons")
            .FormatColumn = "1 index `A-Z`"
            .Def(2) = .T.
        endwith
        .Items.Count = 4
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeButtonClick = class::nativeObject_FaceTreeButtonClick
endwith
*/
// Notifies that a cell of button's type has been clicked.
function nativeObject_FaceTreeButtonClick(Tree,Item,Column)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
    ? Str(Column)
return

local oTreeCube,var_Column,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.ItemPadding = 16
    var_Column = var_FaceTree.Columns.Add("Buttons")
        var_Column.FormatColumn = "1 index `A-Z`"
        // var_Column.Def(2) = true
        with (oTreeCube)
            TemplateDef = [dim var_Column]
            TemplateDef = var_Column
            Template = [var_Column.Def(2) = True]
        endwith
    var_FaceTree.Items.Count = 4

XBasic (Alpha Five)

' Notifies that a cell of button's type has been clicked.
function FaceTreeButtonClick as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
    ? Column
end function

Dim oTreeCube as P
Dim var_Column as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.ItemPadding = 16
    var_Column = var_FaceTree.Columns.Add("Buttons")
        var_Column.FormatColumn = "1 index `A-Z`"
        ' var_Column.Def(2) = .t.
        oTreeCube.TemplateDef = "dim var_Column"
        oTreeCube.TemplateDef = var_Column
        oTreeCube.Template = "var_Column.Def(2) = True"

    var_FaceTree.Items.Count = 4

Visual Objects

METHOD OCX_Exontrol1FaceTreeButtonClick(Tree,Item,Column) CLASS MainDialog
    // FaceTreeButtonClick event - Notifies that a cell of button's type has been clicked.
    OutputDebugString(String2Psz( AsString(Item) ))
    OutputDebugString(String2Psz( AsString(Column) ))
RETURN NIL

local var_Column as IColumn
local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:DrawGridLines := exNoLines
    var_FaceTree:ItemPadding := 16
    var_Column := var_FaceTree:Columns:Add("Buttons")
        var_Column:FormatColumn := "1 index `A-Z`"
        var_Column:[Def,exCellHasButton] := true
    var_FaceTree:Items:Count := 4

PowerBuilder

/*begin event FaceTreeButtonClick(oleobject  Tree,long  Item,long  Column) - Notifies that a cell of button's type has been clicked.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
    MessageBox("Information",string( String(Column) ))
*/
/*end event FaceTreeButtonClick*/

OleObject oTreeCube,var_Column,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.ItemPadding = 16
    var_Column = var_FaceTree.Columns.Add("Buttons")
        var_Column.FormatColumn = "1 index `A-Z`"
        var_Column.Def(2,true)
    var_FaceTree.Items.Count = 4

Visual DataFlex

// Notifies that a cell of button's type has been clicked.
Procedure OnComFaceTreeButtonClick Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeButtonClick llTree llItem llColumn
    Showln llItem llColumn
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComDrawGridLines of hoFaceTree to OLEexNoLines
            Set ComItemPadding of hoFaceTree to 16
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Buttons" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComFormatColumn of hoColumn to "1 index `A-Z`"
                    Set ComDef of hoColumn OLEexCellHasButton to True
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Set ComCount of hoItems to 4
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

XBase++

PROCEDURE OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)
    DevOut( Transform(Item,"") )
    DevOut( Transform(Column,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oColumn
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeButtonClick := {|Tree,Item,Column| OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)} /*Notifies that a cell of button's type has been clicked.*/

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:DrawGridLines := 0/*exNoLines*/
            oFaceTree:ItemPadding := 16
            oColumn := oFaceTree:Columns():Add("Buttons")
                oColumn:FormatColumn := "1 index `A-Z`"
                oColumn:SetProperty("Def",2/*exCellHasButton*/,.T.)
            oFaceTree:Items():Count := 4

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event FaceTreeExpandItem

event FaceTreeExpandItem (Tree as FaceTree, Item as Long)
Notifies that an item has been expanded/collapsed into a face of tree type.

Type | Description
Tree as FaceTree | A FaceTree object where the user expands or collapses an item
Item as Long | A Long expression that indicates the index of the item being expanded or collapsed.
The FaceTreeExpandItem event notifies once the item is expanded or collapsed. The Expanded property specifies whether the item is expanded or collapsed. The ExpandAll method expands all items in the collection. The CollapseAll method expands all items in the collection. The LinesAtRoot property link items at the root of the hierarchy.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

Syntax for FaceTreeExpandItem event, /NET version, on:

private void FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
}

Private Sub FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles FaceTreeExpandItem
End Sub

Syntax for FaceTreeExpandItem event, /COM version, on:

private void FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
}

void OnFaceTreeExpandItem(LPDISPATCH   Tree,long   Item)
{
}

void __fastcall FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
}

procedure FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
end;

procedure FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
end;

begin event FaceTreeExpandItem(oleobject  Tree,long  Item)

end event FaceTreeExpandItem

Private Sub FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles FaceTreeExpandItem
End Sub

Private Sub FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
End Sub

Private Sub FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
End Sub

LPARAMETERS Tree,Item

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)

RETURN

Syntax for FaceTreeExpandItem event, /COM version (others), on:

<SCRIPT EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceTreeExpandItem(Tree,Item)
End Function
</SCRIPT>

Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
End_Procedure

METHOD OCX_FaceTreeExpandItem(Tree,Item) CLASS MainDialog
RETURN NIL

void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
}

function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
end function

function nativeObject_FaceTreeExpandItem(Tree,Item)
return

How do I add a hierarchy?

VBA (MS Access, Excell...)

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As Object,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB6

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub TreeCube1_FaceTreeExpandItem(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long)
    With TreeCube1
        Debug.Print( Item )
    End With
End Sub

With TreeCube1
    .BeginUpdate
    With .FrontFace.CreateTree
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exGroupLines
        .DrawGridLines = exRowLines
        .Columns.Add("").Alignment = LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            With .Add("Root 2").Items
                .Add "Child 1"
                .Add "Child 2"
                .Add "Child 3"
            End With
            .ExpandAll
        End With
    End With
    .EndUpdate
End With

VB.NET

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub Extreecube1_FaceTreeExpandItem(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer) Handles Extreecube1.FaceTreeExpandItem
    With Extreecube1
        Debug.Print( Item )
    End With
End Sub

With Extreecube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

VB.NET for /COM

' FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
Private Sub AxTreeCube1_FaceTreeExpandItem(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent) Handles AxTreeCube1.FaceTreeExpandItem
    With AxTreeCube1
        Debug.Print( e.item )
    End With
End Sub

With AxTreeCube1
    .BeginUpdate()
    With .FrontFace.CreateTree()
        .ExpandOnDblClick = True
        .ItemPadding = 10
        .HeaderVisible = False
        .LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines
        .Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            With .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            With .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            End With
            .ExpandAll()
        End With
    End With
    .EndUpdate()
End With

C++

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void OnFaceTreeExpandItemTreeCube1(LPDISPATCH   Tree,long   Item)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Item" );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->BeginUpdate();
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutExpandOnDblClick(VARIANT_TRUE);
    var_FaceTree->PutItemPadding(10);
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutLinesAtRoot(EXTREECUBELib::exGroupLines);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exRowLines);
    var_FaceTree->GetColumns()->Add(L"")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        EXTREECUBELib::IItemsPtr var_Items1 = var_Items->Add("Root 1")->GetItems();
            var_Items1->Add("Child 1");
            var_Items1->Add("Child 2");
            var_Items1->Add("Child 3");
        EXTREECUBELib::IItemsPtr var_Items2 = var_Items->Add("Root 2")->GetItems();
            var_Items2->Add("Child 1");
            var_Items2->Add("Child 2");
            var_Items2->Add("Child 3");
        var_Items->ExpandAll();
spTreeCube1->EndUpdate();

C++ Builder

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeExpandItem(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item)
{
    OutputDebugString( L"Item" );
}

TreeCube1->BeginUpdate();
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->ExpandOnDblClick = true;
    var_FaceTree->ItemPadding = 10;
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->LinesAtRoot = Extreecubelib_tlb::LinesAtRootEnum::exGroupLines;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exRowLines;
    var_FaceTree->Columns->Add(L"")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        Extreecubelib_tlb::IItemsPtr var_Items1 = var_Items->Add(TVariant("Root 1"))->Items;
            var_Items1->Add(TVariant("Child 1"));
            var_Items1->Add(TVariant("Child 2"));
            var_Items1->Add(TVariant("Child 3"));
        Extreecubelib_tlb::IItemsPtr var_Items2 = var_Items->Add(TVariant("Root 2"))->Items;
            var_Items2->Add(TVariant("Child 1"));
            var_Items2->Add(TVariant("Child 2"));
            var_Items2->Add(TVariant("Child 3"));
        var_Items->ExpandAll();
TreeCube1->EndUpdate();

C#

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void extreecube1_FaceTreeExpandItem(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item)
{
    System.Diagnostics.Debug.Print( Item.ToString() );
}
//this.extreecube1.FaceTreeExpandItem += new exontrol.EXTREECUBELib.exg2antt.FaceTreeExpandItemEventHandler(this.extreecube1_FaceTreeExpandItem);

extreecube1.BeginUpdate();
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = exontrol.EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        exontrol.EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        exontrol.EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
extreecube1.EndUpdate();

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeExpandItem(Tree,Item)" LANGUAGE="JScript">
    alert( Item );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.BeginUpdate();
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.ExpandOnDblClick = true;
        var_FaceTree.ItemPadding = 10;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.LinesAtRoot = 2;
        var_FaceTree.DrawGridLines = -2;
        var_FaceTree.Columns.Add("").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var var_Items1 = var_Items.Add("Root 1").Items;
                var_Items1.Add("Child 1");
                var_Items1.Add("Child 2");
                var_Items1.Add("Child 3");
            var var_Items2 = var_Items.Add("Root 2").Items;
                var_Items2.Add("Child 1");
                var_Items2.Add("Child 2");
                var_Items2.Add("Child 3");
            var_Items.ExpandAll();
    TreeCube1.EndUpdate();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeExpandItem(Tree,Item)
    With TreeCube1
        alert( Item )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .BeginUpdate
        With .FrontFace.CreateTree
            .ExpandOnDblClick = True
            .ItemPadding = 10
            .HeaderVisible = False
            .LinesAtRoot = 2
            .DrawGridLines = -2
            .Columns.Add("").Alignment = 0
            With .Items
                With .Add("Root 1").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                With .Add("Root 2").Items
                    .Add "Child 1"
                    .Add "Child 2"
                    .Add "Child 3"
                End With
                .ExpandAll
            End With
        End With
        .EndUpdate
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
private void axTreeCube1_FaceTreeExpandItem(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent e)
{
    System.Diagnostics.Debug.Print( e.item.ToString() );
}
//this.axTreeCube1.FaceTreeExpandItem += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEventHandler(this.axTreeCube1_FaceTreeExpandItem);

axTreeCube1.BeginUpdate();
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.ExpandOnDblClick = true;
    var_FaceTree.ItemPadding = 10;
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.LinesAtRoot = EXTREECUBELib.LinesAtRootEnum.exGroupLines;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exRowLines;
    var_FaceTree.Columns.Add("").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        EXTREECUBELib.Items var_Items1 = var_Items.Add("Root 1").Items;
            var_Items1.Add("Child 1");
            var_Items1.Add("Child 2");
            var_Items1.Add("Child 3");
        EXTREECUBELib.Items var_Items2 = var_Items.Add("Root 2").Items;
            var_Items2.Add("Child 1");
            var_Items2.Add("Child 2");
            var_Items2.Add("Child 3");
        var_Items.ExpandAll();
axTreeCube1.EndUpdate();

X++ (Dynamics Ax 2009)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
void onEvent_FaceTreeExpandItem(COM   _Tree,int   _Item)
{
    ;
    print( _Item );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Items,com_Items1,com_Items2;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Items,var_Items1,var_Items2;
    ;

    super();

    extreecube1.BeginUpdate();
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.ExpandOnDblClick(true);
        com_FaceTree.ItemPadding(10);
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.LinesAtRoot(2/*exGroupLines*/);
        com_FaceTree.DrawGridLines(-2/*exRowLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add(""); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Root 1")); com_Item = var_Item;
            var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
                com_Items1.Add("Child 1");
                com_Items1.Add("Child 2");
                com_Items1.Add("Child 3");
            var_Item = COM::createFromObject(com_Items.Add("Root 2")); com_Item = var_Item;
            var_Items2 = com_Item.Items(); com_Items2 = var_Items2;
                com_Items2.Add("Child 1");
                com_Items2.Add("Child 2");
                com_Items2.Add("Child 3");
            com_Items.ExpandAll();
    extreecube1.EndUpdate();
}

Delphi 8 (.NET only)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeExpandItem(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeExpandItemEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( e.item );
    end
end;

with AxTreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib.LinesAtRootEnum.exGroupLines;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

Delphi (standard)

// FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
procedure TForm1.TreeCube1FaceTreeExpandItem(ASender: TObject; Tree : IFaceTree;Item : Integer);
begin
    with TreeCube1 do
    begin
        OutputDebugString( Item );
    end
end;

with TreeCube1 do
begin
    BeginUpdate();
    with FrontFace.CreateTree() do
    begin
        ExpandOnDblClick := True;
        ItemPadding := 10;
        HeaderVisible := False;
        LinesAtRoot := EXTREECUBELib_TLB.exGroupLines;
        DrawGridLines := EXTREECUBELib_TLB.exRowLines;
        Columns.Add('').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            with Add('Root 1').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            with Add('Root 2').Items do
            begin
                Add('Child 1');
                Add('Child 2');
                Add('Child 3');
            end;
            ExpandAll();
        end;
    end;
    EndUpdate();
end

VFP

*** FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type. ***
LPARAMETERS Tree,Item
    with thisform.TreeCube1
        DEBUGOUT( Item )
    endwith

with thisform.TreeCube1
    .BeginUpdate
    with .FrontFace.CreateTree
        .ExpandOnDblClick = .T.
        .ItemPadding = 10
        .HeaderVisible = .F.
        .LinesAtRoot = 2
        .DrawGridLines = -2
        .Columns.Add("").Alignment = 0
        with .Items
            with .Add("Root 1").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            with .Add("Root 2").Items
                .Add("Child 1")
                .Add("Child 2")
                .Add("Child 3")
            endwith
            .ExpandAll
        endwith
    endwith
    .EndUpdate
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeExpandItem = class::nativeObject_FaceTreeExpandItem
endwith
*/
// Notifies that an item has been expanded/collapsed into a face of tree type.
function nativeObject_FaceTreeExpandItem(Tree,Item)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? Str(Item)
return

local oTreeCube,var_Column,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    // var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

XBasic (Alpha Five)

' Notifies that an item has been expanded/collapsed into a face of tree type.
function FaceTreeExpandItem as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? Item
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Items as P
Dim var_Items1 as P
Dim var_Items2 as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = .t.
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    ' var_FaceTree.Columns.Add("").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual Objects

METHOD OCX_Exontrol1FaceTreeExpandItem(Tree,Item) CLASS MainDialog
    // FaceTreeExpandItem event - Notifies that an item has been expanded/collapsed into a face of tree type.
    OutputDebugString(String2Psz( AsString(Item) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Items,var_Items1,var_Items2 as IItems

oDCOCX_Exontrol1:BeginUpdate()
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:ExpandOnDblClick := true
    var_FaceTree:ItemPadding := 10
    var_FaceTree:HeaderVisible := false
    var_FaceTree:LinesAtRoot := exGroupLines
    var_FaceTree:DrawGridLines := exRowLines
    var_FaceTree:Columns:Add(""):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items1 := var_Items:Add("Root 1"):Items
            var_Items1:Add("Child 1")
            var_Items1:Add("Child 2")
            var_Items1:Add("Child 3")
        var_Items2 := var_Items:Add("Root 2"):Items
            var_Items2:Add("Child 1")
            var_Items2:Add("Child 2")
            var_Items2:Add("Child 3")
        var_Items:ExpandAll()
oDCOCX_Exontrol1:EndUpdate()

PowerBuilder

/*begin event FaceTreeExpandItem(oleobject  Tree,long  Item) - Notifies that an item has been expanded/collapsed into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( String(Item) ))
*/
/*end event FaceTreeExpandItem*/

OleObject oTreeCube,var_FaceTree,var_Items,var_Items1,var_Items2

oTreeCube = ole_1.Object
oTreeCube.BeginUpdate()
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.ExpandOnDblClick = true
    var_FaceTree.ItemPadding = 10
    var_FaceTree.HeaderVisible = false
    var_FaceTree.LinesAtRoot = 2
    var_FaceTree.DrawGridLines = -2
    var_FaceTree.Columns.Add("").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items1 = var_Items.Add("Root 1").Items
            var_Items1.Add("Child 1")
            var_Items1.Add("Child 2")
            var_Items1.Add("Child 3")
        var_Items2 = var_Items.Add("Root 2").Items
            var_Items2.Add("Child 1")
            var_Items2.Add("Child 2")
            var_Items2.Add("Child 3")
        var_Items.ExpandAll()
oTreeCube.EndUpdate()

Visual DataFlex

// Notifies that an item has been expanded/collapsed into a face of tree type.
Procedure OnComFaceTreeExpandItem Variant   llTree Integer   llItem
    Forward Send OnComFaceTreeExpandItem llTree llItem
    Showln llItem
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Send ComBeginUpdate
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComCreateTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Set ComExpandOnDblClick of hoFaceTree to True
            Set ComItemPadding of hoFaceTree to 10
            Set ComHeaderVisible of hoFaceTree to False
            Set ComLinesAtRoot of hoFaceTree to OLEexGroupLines
            Set ComDrawGridLines of hoFaceTree to OLEexRowLines
            Variant voColumns
            Get ComColumns of hoFaceTree to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem
                Get ComAdd of hoItems "Root 1" to voItem
                Handle hoItem
                Get Create (RefClass(cComItem)) to hoItem
                Set pvComObject of hoItem to voItem
                    Variant voItems1
                    Get ComItems of hoItem to voItems1
                    Handle hoItems1
                    Get Create (RefClass(cComItems)) to hoItems1
                    Set pvComObject of hoItems1 to voItems1
                        Get ComAdd of hoItems1 "Child 1" to Nothing
                        Get ComAdd of hoItems1 "Child 2" to Nothing
                        Get ComAdd of hoItems1 "Child 3" to Nothing
                    Send Destroy to hoItems1
                Send Destroy to hoItem
                Variant voItem1
                Get ComAdd of hoItems "Root 2" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Variant voItems2
                    Get ComItems of hoItem1 to voItems2
                    Handle hoItems2
                    Get Create (RefClass(cComItems)) to hoItems2
                    Set pvComObject of hoItems2 to voItems2
                        Get ComAdd of hoItems2 "Child 1" to Nothing
                        Get ComAdd of hoItems2 "Child 2" to Nothing
                        Get ComAdd of hoItems2 "Child 3" to Nothing
                    Send Destroy to hoItems2
                Send Destroy to hoItem1
                Send ComExpandAll of hoItems
            Send Destroy to hoItems
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Send ComEndUpdate
End_Procedure

XBase++

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
    DevOut( Transform(Item,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItems,oItems1,oItems2
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

        oTreeCube:BeginUpdate()
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:ExpandOnDblClick := .T.
            oFaceTree:ItemPadding := 10
            oFaceTree:HeaderVisible := .F.
            oFaceTree:LinesAtRoot := 2/*exGroupLines*/
            oFaceTree:DrawGridLines := -2/*exRowLines*/
            oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems1 := oItems:Add("Root 1"):Items()
                    oItems1:Add("Child 1")
                    oItems1:Add("Child 2")
                    oItems1:Add("Child 3")
                oItems2 := oItems:Add("Root 2"):Items()
                    oItems2:Add("Child 1")
                    oItems2:Add("Child 2")
                    oItems2:Add("Child 3")
                oItems:ExpandAll()
        oTreeCube:EndUpdate()

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event FaceTreeSelectionChanged

event FaceTreeSelectionChanged (Tree as FaceTree)
Notifies that the user selects a new item/column into a face of tree type.

Type | Description
Tree as FaceTree | A FaceTree object where the selection has been changed.
The FaceTreeSelectionChanged / FaceTreeValueChanged event notifies your application once the user selects a new item. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event
Syntax for FaceTreeSelectionChanged event, /NET version, on:

private void FaceTreeSelectionChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree)
{
}

Private Sub FaceTreeSelectionChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree) Handles FaceTreeSelectionChanged
End Sub

Syntax for FaceTreeSelectionChanged event, /COM version, on:

private void FaceTreeSelectionChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent e)
{
}

void OnFaceTreeSelectionChanged(LPDISPATCH   Tree)
{
}

void __fastcall FaceTreeSelectionChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree)
{
}

procedure FaceTreeSelectionChanged(ASender: TObject; Tree : IFaceTree);
begin
end;

procedure FaceTreeSelectionChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent);
begin
end;

begin event FaceTreeSelectionChanged(oleobject  Tree)

end event FaceTreeSelectionChanged

Private Sub FaceTreeSelectionChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent) Handles FaceTreeSelectionChanged
End Sub

Private Sub FaceTreeSelectionChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree)
End Sub

Private Sub FaceTreeSelectionChanged(ByVal Tree As Object)
End Sub

LPARAMETERS Tree

PROCEDURE OnFaceTreeSelectionChanged(oTreeCube,Tree)

RETURN

Syntax for FaceTreeSelectionChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceTreeSelectionChanged(Tree)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceTreeSelectionChanged(Tree)
End Function
</SCRIPT>

Procedure OnComFaceTreeSelectionChanged Variant   llTree
    Forward Send OnComFaceTreeSelectionChanged llTree
End_Procedure

METHOD OCX_FaceTreeSelectionChanged(Tree) CLASS MainDialog
RETURN NIL

void onEvent_FaceTreeSelectionChanged(COM   _Tree)
{
}

function FaceTreeSelectionChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree)
end function

function nativeObject_FaceTreeSelectionChanged(Tree)
return

How do I get the selected value?

VBA (MS Access, Excell...)

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub TreeCube1_FaceTreeSelectionChanged(ByVal Tree As Object)
    With TreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB6

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub TreeCube1_FaceTreeSelectionChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree)
    With TreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB.NET

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub Extreecube1_FaceTreeSelectionChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree) Handles Extreecube1.FaceTreeSelectionChanged
    With Extreecube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree()
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = Extreecube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB.NET for /COM

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub AxTreeCube1_FaceTreeSelectionChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent) Handles AxTreeCube1.FaceTreeSelectionChanged
    With AxTreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree()
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

C++

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void OnFaceTreeSelectionChangedTreeCube1(LPDISPATCH   Tree)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Value" );
    OutputDebugStringW( _bstr_t(spTreeCube1->GetFrontFace()->GetFaceTree()->GetValue()) );
    OutputDebugStringW( L"Caption" );
    OutputDebugStringW( spTreeCube1->GetFrontFace()->GetFaceTree()->GetCaption() );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFacePtr var_Face = spTreeCube1->GetFrontFace();
    EXTREECUBELib::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->PutItemPadding(20);
        var_FaceTree->GetColumns()->PutCount(5);
        var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
        var_FaceTree->GetItems()->PutCount(spTreeCube1->GetFrontFace()->GetFaceTree()->GetVisibleItemsCount());
        var_FaceTree->GetColumns()->GetItem(long(0))->PutFormatColumn(L"(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(1))->PutFormatColumn(L"(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(2))->PutFormatColumn(L"(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(3))->PutFormatColumn(L"(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(4))->PutFormatColumn(L"(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");

C++ Builder

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeSelectionChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree)
{
    OutputDebugString( L"Value" );
    OutputDebugString( PChar(TreeCube1->FrontFace->FaceTree->get_Value()) );
    OutputDebugString( L"Caption" );
    OutputDebugString( TreeCube1->FrontFace->FaceTree->Caption );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFacePtr var_Face = TreeCube1->FrontFace;
    Extreecubelib_tlb::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->ItemPadding = 20;
        var_FaceTree->Columns->Count = 5;
        var_FaceTree->HeaderVisible = false;
        var_FaceTree->Items->Count = TreeCube1->FrontFace->FaceTree->VisibleItemsCount;
        var_FaceTree->Columns->get_Item(TVariant(0))->FormatColumn = L"(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(1))->FormatColumn = L"(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(2))->FormatColumn = L"(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(3))->FormatColumn = L"(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(4))->FormatColumn = L"(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

C#

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
private void extreecube1_FaceTreeSelectionChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree)
{
    System.Diagnostics.Debug.Print( "Value" );
    System.Diagnostics.Debug.Print( extreecube1.FrontFace.FaceTree.Value.ToString() );
    System.Diagnostics.Debug.Print( "Caption" );
    System.Diagnostics.Debug.Print( extreecube1.FrontFace.FaceTree.Caption );
}
//this.extreecube1.FaceTreeSelectionChanged += new exontrol.EXTREECUBELib.exg2antt.FaceTreeSelectionChangedEventHandler(this.extreecube1_FaceTreeSelectionChanged);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.Face var_Face = extreecube1.FrontFace;
    exontrol.EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.ItemPadding = 20;
        var_FaceTree.Columns.Count = 5;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.Items.Count = extreecube1.FrontFace.FaceTree.VisibleItemsCount;
        var_FaceTree.Columns[0].FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[1].FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[2].FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[3].FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[4].FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeSelectionChanged(Tree)" LANGUAGE="JScript">
    alert( "Value" );
    alert( TreeCube1.FrontFace.FaceTree.Value );
    alert( "Caption" );
    alert( TreeCube1.FrontFace.FaceTree.Caption );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_Face = TreeCube1.FrontFace;
        var var_FaceTree = var_Face.CreateTree();
            var_FaceTree.ItemPadding = 20;
            var_FaceTree.Columns.Count = 5;
            var_FaceTree.HeaderVisible = false;
            var_FaceTree.Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeSelectionChanged(Tree)
    With TreeCube1
        alert( "Value" )
        alert( .FrontFace.FaceTree.Value )
        alert( "Caption" )
        alert( .FrontFace.FaceTree.Caption )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace
            With .CreateTree
                .ItemPadding = 20
                .Columns.Count = 5
                .HeaderVisible = False
                .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
                .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            End With
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
private void axTreeCube1_FaceTreeSelectionChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent e)
{
    System.Diagnostics.Debug.Print( "Value" );
    System.Diagnostics.Debug.Print( axTreeCube1.FrontFace.FaceTree.Value.ToString() );
    System.Diagnostics.Debug.Print( "Caption" );
    System.Diagnostics.Debug.Print( axTreeCube1.FrontFace.FaceTree.Caption );
}
//this.axTreeCube1.FaceTreeSelectionChanged += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEventHandler(this.axTreeCube1_FaceTreeSelectionChanged);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.Face var_Face = axTreeCube1.FrontFace;
    EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.ItemPadding = 20;
        var_FaceTree.Columns.Count = 5;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.Items.Count = axTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
        var_FaceTree.Columns[0].FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[1].FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[2].FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[3].FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[4].FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

X++ (Dynamics Ax 2009)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void onEvent_FaceTreeSelectionChanged(COM   _Tree)
{
    ;
    print( "Value" );
    print( extreecube1.FrontFace().FaceTree().Value() );
    print( "Caption" );
    print( extreecube1.FrontFace().FaceTree().Caption() );
}

public void init()
{
    COM com_Column,com_Columns,com_Face,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_Face,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_Face = extreecube1.FrontFace(); com_Face = var_Face;
        var_FaceTree = com_Face.CreateTree(); com_FaceTree = var_FaceTree;
            com_FaceTree.ItemPadding(20);
            var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
            com_Columns.Count(5);
            com_FaceTree.HeaderVisible(false);
            var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
            com_Items.Count(extreecube1.FrontFace().FaceTree().VisibleItemsCount());
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(0)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(2)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(3)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(4)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
}

Delphi 8 (.NET only)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeSelectionChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( 'Value' );
        OutputDebugString( FrontFace.FaceTree.Value );
        OutputDebugString( 'Caption' );
        OutputDebugString( FrontFace.FaceTree.Caption );
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace do
    begin
        with CreateTree() do
        begin
            ItemPadding := 20;
            Columns.Count := 5;
            HeaderVisible := False;
            Items.Count := AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            Columns.Item[TObject(0)].FormatColumn := '(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(1)].FormatColumn := '(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(2)].FormatColumn := '(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(3)].FormatColumn := '(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(4)].FormatColumn := '(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
        end;
    end;
end

Delphi (standard)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
procedure TForm1.TreeCube1FaceTreeSelectionChanged(ASender: TObject; Tree : IFaceTree);
begin
    with TreeCube1 do
    begin
        OutputDebugString( 'Value' );
        OutputDebugString( FrontFace.FaceTree.Value );
        OutputDebugString( 'Caption' );
        OutputDebugString( FrontFace.FaceTree.Caption );
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace do
    begin
        with CreateTree() do
        begin
            ItemPadding := 20;
            Columns.Count := 5;
            HeaderVisible := False;
            Items.Count := TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            Columns.Item[OleVariant(0)].FormatColumn := '(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(1)].FormatColumn := '(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(2)].FormatColumn := '(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(3)].FormatColumn := '(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(4)].FormatColumn := '(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
        end;
    end;
end

VFP

*** FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type. ***
LPARAMETERS Tree
    with thisform.TreeCube1
        DEBUGOUT( "Value" )
        DEBUGOUT( .FrontFace.FaceTree.Value )
        DEBUGOUT( "Caption" )
        DEBUGOUT( .FrontFace.FaceTree.Caption )
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace
        with .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = .F.
            .Items.Count = thisform.TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        endwith
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeSelectionChanged = class::nativeObject_FaceTreeSelectionChanged
endwith
*/
// Notifies that the user selects a new item/column into a face of tree type.
function nativeObject_FaceTreeSelectionChanged(Tree)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? "Value"
    ? Str(oTreeCube.FrontFace.FaceTree.Value)
    ? "Caption"
    ? oTreeCube.FrontFace.FaceTree.Caption
return

local oTreeCube,var_Face,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = false
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

XBasic (Alpha Five)

' Notifies that the user selects a new item/column into a face of tree type.
function FaceTreeSelectionChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? "Value"
    ? oTreeCube.FrontFace.FaceTree.Value
    ? "Caption"
    ? oTreeCube.FrontFace.FaceTree.Caption
end function

Dim oTreeCube as P
Dim var_Face as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = .f.
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

Visual Objects

METHOD OCX_Exontrol1FaceTreeSelectionChanged(Tree) CLASS MainDialog
    // FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
    OutputDebugString(String2Psz( "Value" ))
    OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:FrontFace:FaceTree:Value) ))
    OutputDebugString(String2Psz( "Caption" ))
    OutputDebugString(String2Psz( oDCOCX_Exontrol1:FrontFace:FaceTree:Caption ))
RETURN NIL

local var_Face as IFace
local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_Face := oDCOCX_Exontrol1:FrontFace
    var_FaceTree := var_Face:CreateTree()
        var_FaceTree:ItemPadding := 20
        var_FaceTree:Columns:Count := 5
        var_FaceTree:HeaderVisible := false
        var_FaceTree:Items:Count := oDCOCX_Exontrol1:FrontFace:FaceTree:VisibleItemsCount
        var_FaceTree:Columns:[Item,0]:FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,1]:FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,2]:FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,3]:FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,4]:FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

PowerBuilder

/*begin event FaceTreeSelectionChanged(oleobject  Tree) - Notifies that the user selects a new item/column into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( "Value" ))
    MessageBox("Information",string( String(oTreeCube.FrontFace.FaceTree.Value) ))
    MessageBox("Information",string( "Caption" ))
    MessageBox("Information",string( oTreeCube.FrontFace.FaceTree.Caption ))
*/
/*end event FaceTreeSelectionChanged*/

OleObject oTreeCube,var_Face,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = false
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

Visual DataFlex

// Notifies that the user selects a new item/column into a face of tree type.
Procedure OnComFaceTreeSelectionChanged Variant   llTree
    Forward Send OnComFaceTreeSelectionChanged llTree
    Variant v
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComFaceTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Get ComValue of hoFaceTree to v
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Showln "Value" v
    Variant v1
    Variant voFace1
    Get ComFrontFace to voFace1
    Handle hoFace1
    Get Create (RefClass(cComFace)) to hoFace1
    Set pvComObject of hoFace1 to voFace1
        Variant voFaceTree1
        Get ComFaceTree of hoFace1 to voFaceTree1
        Handle hoFaceTree1
        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
        Set pvComObject of hoFaceTree1 to voFaceTree1
            Get ComCaption of hoFaceTree1 to v1
        Send Destroy to hoFaceTree1
    Send Destroy to hoFace1
    Showln "Caption" v1
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace2
    Get ComFrontFace to voFace2
    Handle hoFace2
    Get Create (RefClass(cComFace)) to hoFace2
    Set pvComObject of hoFace2 to voFace2
        Variant voFaceTree2
        Get ComCreateTree of hoFace2 to voFaceTree2
        Handle hoFaceTree2
        Get Create (RefClass(cComFaceTree)) to hoFaceTree2
        Set pvComObject of hoFaceTree2 to voFaceTree2
            Set ComItemPadding of hoFaceTree2 to 20
            Variant voColumns
            Get ComColumns of hoFaceTree2 to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Set ComCount of hoColumns to 5
            Send Destroy to hoColumns
            Set ComHeaderVisible of hoFaceTree2 to False
            Variant voItems
            Get ComItems of hoFaceTree2 to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant v2
                    Variant voFace3
                    Get ComFrontFace to voFace3
                    Handle hoFace3
                    Get Create (RefClass(cComFace)) to hoFace3
                    Set pvComObject of hoFace3 to voFace3
                        Variant voFaceTree3
                        Get ComFaceTree of hoFace3 to voFaceTree3
                        Handle hoFaceTree3
                        Get Create (RefClass(cComFaceTree)) to hoFaceTree3
                        Set pvComObject of hoFaceTree3 to voFaceTree3
                            Get ComVisibleItemsCount of hoFaceTree3 to v2
                        Send Destroy to hoFaceTree3
                    Send Destroy to hoFace3
                Set ComCount of hoItems to v2
            Send Destroy to hoItems
            Variant voColumns1
            Get ComColumns of hoFaceTree2 to voColumns1
            Handle hoColumns1
            Get Create (RefClass(cComColumns)) to hoColumns1
            Set pvComObject of hoColumns1 to voColumns1
                Variant voColumn
                Get ComItem of hoColumns1 0 to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComFormatColumn of hoColumn to "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn
            Send Destroy to hoColumns1
            Variant voColumns2
            Get ComColumns of hoFaceTree2 to voColumns2
            Handle hoColumns2
            Get Create (RefClass(cComColumns)) to hoColumns2
            Set pvComObject of hoColumns2 to voColumns2
                Variant voColumn1
                Get ComItem of hoColumns2 1 to voColumn1
                Handle hoColumn1
                Get Create (RefClass(cComColumn)) to hoColumn1
                Set pvComObject of hoColumn1 to voColumn1
                    Set ComFormatColumn of hoColumn1 to "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn1
            Send Destroy to hoColumns2
            Variant voColumns3
            Get ComColumns of hoFaceTree2 to voColumns3
            Handle hoColumns3
            Get Create (RefClass(cComColumns)) to hoColumns3
            Set pvComObject of hoColumns3 to voColumns3
                Variant voColumn2
                Get ComItem of hoColumns3 2 to voColumn2
                Handle hoColumn2
                Get Create (RefClass(cComColumn)) to hoColumn2
                Set pvComObject of hoColumn2 to voColumn2
                    Set ComFormatColumn of hoColumn2 to "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn2
            Send Destroy to hoColumns3
            Variant voColumns4
            Get ComColumns of hoFaceTree2 to voColumns4
            Handle hoColumns4
            Get Create (RefClass(cComColumns)) to hoColumns4
            Set pvComObject of hoColumns4 to voColumns4
                Variant voColumn3
                Get ComItem of hoColumns4 3 to voColumn3
                Handle hoColumn3
                Get Create (RefClass(cComColumn)) to hoColumn3
                Set pvComObject of hoColumn3 to voColumn3
                    Set ComFormatColumn of hoColumn3 to "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn3
            Send Destroy to hoColumns4
            Variant voColumns5
            Get ComColumns of hoFaceTree2 to voColumns5
            Handle hoColumns5
            Get Create (RefClass(cComColumns)) to hoColumns5
            Set pvComObject of hoColumns5 to voColumns5
                Variant voColumn4
                Get ComItem of hoColumns5 4 to voColumn4
                Handle hoColumn4
                Get Create (RefClass(cComColumn)) to hoColumn4
                Set pvComObject of hoColumn4 to voColumn4
                    Set ComFormatColumn of hoColumn4 to "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn4
            Send Destroy to hoColumns5
        Send Destroy to hoFaceTree2
    Send Destroy to hoFace2
End_Procedure

XBase++

PROCEDURE OnFaceTreeSelectionChanged(oTreeCube,Tree)
    DevOut( "Value" )
    DevOut( Transform(oTreeCube:FrontFace:FaceTree():Value(),"") )
    DevOut( "Caption" )
    DevOut( oTreeCube:FrontFace:FaceTree():Caption() )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFace
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeSelectionChanged := {|Tree| OnFaceTreeSelectionChanged(oTreeCube,Tree)} /*Notifies that the user selects a new item/column into a face of tree type.*/

        oTreeCube:TexturePicturePath := ""
        oFace := oTreeCube:FrontFace()
            oFaceTree := oFace:CreateTree()
                oFaceTree:ItemPadding := 20
                oFaceTree:Columns():Count := 5
                oFaceTree:HeaderVisible := .F.
                oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
                oFaceTree:Columns:Item(0):FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(1):FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(2):FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(3):FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(4):FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event FaceTreeStateChanged

event FaceTreeStateChanged (Tree as FaceTree, Item as Long, Column as Long)
Notifies that a cell changes its state into a face of tree type.

Type | Description
Tree as FaceTree | A FaceTree object where the user changes the state of a check/radio button.
Item as Long | A Long expression that indicates the index of the item that hosts the check/radio being changed.
Column as Long | A Long expression that indicates the index of the column that hosts the check/radio being changed.
The FaceTreeStateChanged event notifies when the state of the check-box or a radio-button is changed. The Def(exCellHasCheckBox) property of the Column, assign check-boxes to all cells in the column. The PartialCheck property indicates whether the column supports three-state check-boxes ( unchecked, checked and partial states). The HasCheckBox property shows or hides the cell's check-box. The State property of the Item indicates the state of the check-box. The CheckBoxWidth / CheckBoxHeight property specifies the size of the check-box. The Background(exCheckBoxState0) / Background(exCheckBoxState1) / Background(exCheckBoxState2) property specifies the visual appearance of the check-box. The Def(exCellHasRadioButton) property of the Column, assign radio-buttons to all cells in the column. The HasRadioButton property shows or hides the cell's radio-button. The State property of the Item indicates the state of the radio-button. The RadioGroup property arranges multiple radio-buttons to the same group. The RadioButtonWidth / RadioButtonHeight property specifies the size of the radio-button. The Background(exRadioButtonState0) / Background(exRadioButtonState1) property specifies the visual appearance of the radio-button.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

Syntax for FaceTreeStateChanged event, /NET version, on:

private void FaceTreeStateChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
}

Private Sub FaceTreeStateChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles FaceTreeStateChanged
End Sub

Syntax for FaceTreeStateChanged event, /COM version, on:

private void FaceTreeStateChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent e)
{
}

void OnFaceTreeStateChanged(LPDISPATCH   Tree,long   Item,long   Column)
{
}

void __fastcall FaceTreeStateChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
}

procedure FaceTreeStateChanged(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
end;

procedure FaceTreeStateChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent);
begin
end;

begin event FaceTreeStateChanged(oleobject  Tree,long  Item,long  Column)

end event FaceTreeStateChanged

Private Sub FaceTreeStateChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent) Handles FaceTreeStateChanged
End Sub

Private Sub FaceTreeStateChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
End Sub

Private Sub FaceTreeStateChanged(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
End Sub

LPARAMETERS Tree,Item,Column

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)

RETURN

Syntax for FaceTreeStateChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceTreeStateChanged(Tree,Item,Column)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceTreeStateChanged(Tree,Item,Column)
End Function
</SCRIPT>

Procedure OnComFaceTreeStateChanged Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeStateChanged llTree llItem llColumn
End_Procedure

METHOD OCX_FaceTreeStateChanged(Tree,Item,Column) CLASS MainDialog
RETURN NIL

void onEvent_FaceTreeStateChanged(COM   _Tree,int   _Item,int   _Column)
{
}

function FaceTreeStateChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
end function

function nativeObject_FaceTreeStateChanged(Tree,Item,Column)
return

How can I display a list of check-boxes?

VBA (MS Access, Excell...)

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As Object,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Check").Alignment = 0
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

VB6

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub TreeCube1_FaceTreeStateChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree,ByVal Item As Long,ByVal Column As Long)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exNoLines
        .Columns.Add("Check").Alignment = LeftAlignment
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

VB.NET

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub Extreecube1_FaceTreeStateChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree,ByVal Item As Integer,ByVal Column As Integer) Handles Extreecube1.FaceTreeStateChanged
    With Extreecube1
        With .FrontFace.FaceTree.get_ItemByIndex(Item)
            Debug.Print( "State" )
            Debug.Print( .get_State(0) )
        End With
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Check").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            .Add("Check <b>1").set_HasCheckBox(0,True)
            .Add("Check <b>2").set_HasCheckBox(0,True)
            With .Add("Check <b>3")
                .set_HasCheckBox(0,True)
                .set_State(0,1)
            End With
            .Add("Check <b>4").set_HasCheckBox(0,True)
        End With
    End With
End With

VB.NET for /COM

' FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
Private Sub AxTreeCube1_FaceTreeStateChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent) Handles AxTreeCube1.FaceTreeStateChanged
    With AxTreeCube1
        With .FrontFace.FaceTree.ItemByIndex(e.item)
            Debug.Print( "State" )
            Debug.Print( .State(0) )
        End With
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace.CreateTree()
        .HeaderVisible = False
        .ItemPadding = 16
        .DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines
        .Columns.Add("Check").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment
        With .Items
            .Add("Check <b>1").HasCheckBox(0) = True
            .Add("Check <b>2").HasCheckBox(0) = True
            With .Add("Check <b>3")
                .HasCheckBox(0) = True
                .State(0) = 1
            End With
            .Add("Check <b>4").HasCheckBox(0) = True
        End With
    End With
End With

C++

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void OnFaceTreeStateChangedTreeCube1(LPDISPATCH   Tree,long   Item,long   Column)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    EXTREECUBELib::IItemPtr var_Item = spTreeCube1->GetFrontFace()->GetFaceTree()->GetItemByIndex(Item);
        OutputDebugStringW( L"State" );
        OutputDebugStringW( _bstr_t(var_Item->GetState(long(0))) );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFaceTreePtr var_FaceTree = spTreeCube1->GetFrontFace()->CreateTree();
    var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
    var_FaceTree->PutItemPadding(16);
    var_FaceTree->PutDrawGridLines(EXTREECUBELib::exNoLines);
    var_FaceTree->GetColumns()->Add(L"Check")->PutAlignment(EXTREECUBELib::LeftAlignment);
    EXTREECUBELib::IItemsPtr var_Items = var_FaceTree->GetItems();
        var_Items->Add("Check <b>1")->PutHasCheckBox(long(0),VARIANT_TRUE);
        var_Items->Add("Check <b>2")->PutHasCheckBox(long(0),VARIANT_TRUE);
        EXTREECUBELib::IItemPtr var_Item = var_Items->Add("Check <b>3");
            var_Item->PutHasCheckBox(long(0),VARIANT_TRUE);
            var_Item->PutState(long(0),1);
        var_Items->Add("Check <b>4")->PutHasCheckBox(long(0),VARIANT_TRUE);

C++ Builder

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeStateChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree,long   Item,long   Column)
{
    Extreecubelib_tlb::IItemPtr var_Item = TreeCube1->FrontFace->FaceTree->get_ItemByIndex(Item);
        OutputDebugString( L"State" );
        OutputDebugString( PChar(var_Item->get_State(TVariant(0))) );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFaceTreePtr var_FaceTree = TreeCube1->FrontFace->CreateTree();
    var_FaceTree->HeaderVisible = false;
    var_FaceTree->ItemPadding = 16;
    var_FaceTree->DrawGridLines = Extreecubelib_tlb::GridLinesEnum::exNoLines;
    var_FaceTree->Columns->Add(L"Check")->Alignment = Extreecubelib_tlb::AlignmentEnum::LeftAlignment;
    Extreecubelib_tlb::IItemsPtr var_Items = var_FaceTree->Items;
        var_Items->Add(TVariant("Check <b>1"))->set_HasCheckBox(TVariant(0),true);
        var_Items->Add(TVariant("Check <b>2"))->set_HasCheckBox(TVariant(0),true);
        Extreecubelib_tlb::IItemPtr var_Item = var_Items->Add(TVariant("Check <b>3"));
            var_Item->set_HasCheckBox(TVariant(0),true);
            var_Item->set_State(TVariant(0),1);
        var_Items->Add(TVariant("Check <b>4"))->set_HasCheckBox(TVariant(0),true);

C#

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void extreecube1_FaceTreeStateChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree,int   Item,int   Column)
{
    exontrol.EXTREECUBELib.Item var_Item = extreecube1.FrontFace.FaceTree.get_ItemByIndex(Item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.extreecube1.FaceTreeStateChanged += new exontrol.EXTREECUBELib.exg2antt.FaceTreeStateChangedEventHandler(this.extreecube1_FaceTreeStateChanged);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.FaceTree var_FaceTree = extreecube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = exontrol.EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Check").Alignment = exontrol.EXTREECUBELib.AlignmentEnum.LeftAlignment;
    exontrol.EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        var_Items.Add("Check <b>1").set_HasCheckBox(0,true);
        var_Items.Add("Check <b>2").set_HasCheckBox(0,true);
        exontrol.EXTREECUBELib.Item var_Item = var_Items.Add("Check <b>3");
            var_Item.set_HasCheckBox(0,true);
            var_Item.set_State(0,1);
        var_Items.Add("Check <b>4").set_HasCheckBox(0,true);

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeStateChanged(Tree,Item,Column)" LANGUAGE="JScript">
    var var_Item = TreeCube1.FrontFace.FaceTree.ItemByIndex(Item);
        alert( "State" );
        alert( var_Item.State(0) );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_FaceTree = TreeCube1.FrontFace.CreateTree();
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.ItemPadding = 16;
        var_FaceTree.DrawGridLines = 0;
        var_FaceTree.Columns.Add("Check").Alignment = 0;
        var var_Items = var_FaceTree.Items;
            var_Items.Add("Check <b>1").HasCheckBox(0) = true;
            var_Items.Add("Check <b>2").HasCheckBox(0) = true;
            var var_Item = var_Items.Add("Check <b>3");
                var_Item.HasCheckBox(0) = true;
                var_Item.State(0) = 1;
            var_Items.Add("Check <b>4").HasCheckBox(0) = true;
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeStateChanged(Tree,Item,Column)
    With TreeCube1
        With .FrontFace.FaceTree.ItemByIndex(Item)
            alert( "State" )
            alert( .State(0) )
        End With
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace.CreateTree
            .HeaderVisible = False
            .ItemPadding = 16
            .DrawGridLines = 0
            .Columns.Add("Check").Alignment = 0
            With .Items
                .Add("Check <b>1").HasCheckBox(0) = True
                .Add("Check <b>2").HasCheckBox(0) = True
                With .Add("Check <b>3")
                    .HasCheckBox(0) = True
                    .State(0) = 1
                End With
                .Add("Check <b>4").HasCheckBox(0) = True
            End With
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
private void axTreeCube1_FaceTreeStateChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent e)
{
    EXTREECUBELib.Item var_Item = axTreeCube1.FrontFace.FaceTree.get_ItemByIndex(e.item);
        System.Diagnostics.Debug.Print( "State" );
        System.Diagnostics.Debug.Print( var_Item.get_State(0).ToString() );
}
//this.axTreeCube1.FaceTreeStateChanged += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEventHandler(this.axTreeCube1_FaceTreeStateChanged);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.FaceTree var_FaceTree = axTreeCube1.FrontFace.CreateTree();
    var_FaceTree.HeaderVisible = false;
    var_FaceTree.ItemPadding = 16;
    var_FaceTree.DrawGridLines = EXTREECUBELib.GridLinesEnum.exNoLines;
    var_FaceTree.Columns.Add("Check").Alignment = EXTREECUBELib.AlignmentEnum.LeftAlignment;
    EXTREECUBELib.Items var_Items = var_FaceTree.Items;
        var_Items.Add("Check <b>1").set_HasCheckBox(0,true);
        var_Items.Add("Check <b>2").set_HasCheckBox(0,true);
        EXTREECUBELib.Item var_Item = var_Items.Add("Check <b>3");
            var_Item.set_HasCheckBox(0,true);
            var_Item.set_State(0,1);
        var_Items.Add("Check <b>4").set_HasCheckBox(0,true);

X++ (Dynamics Ax 2009)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
void onEvent_FaceTreeStateChanged(COM   _Tree,int   _Item,int   _Column)
{
    COM com_Item;
    anytype var_Item;
    ;
    var_Item = COM::createFromObject(extreecube1.FrontFace().FaceTree()).ItemByIndex(_Item); com_Item = var_Item;
        print( "State" );
        print( com_Item.State(COMVariant::createFromInt(0)) );
}

public void init()
{
    COM com_Column,com_Columns,com_FaceTree,com_Item,com_Item1,com_Items;
    anytype var_Column,var_Columns,var_FaceTree,var_Item,var_Item1,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_FaceTree = extreecube1.FrontFace().CreateTree(); com_FaceTree = var_FaceTree;
        com_FaceTree.HeaderVisible(false);
        com_FaceTree.ItemPadding(16);
        com_FaceTree.DrawGridLines(0/*exNoLines*/);
        var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
        var_Column = COM::createFromObject(com_Columns).Add("Check"); com_Column = var_Column;
        com_Column.Alignment(0/*LeftAlignment*/);
        var_Items = com_FaceTree.Items(); com_Items = var_Items;
            var_Item = COM::createFromObject(com_Items.Add("Check <b>1")); com_Item = var_Item;
            com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
            var_Item = COM::createFromObject(com_Items.Add("Check <b>2")); com_Item = var_Item;
            com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
            var_Item = com_Items.Add("Check <b>3"); com_Item = var_Item;
                com_Item.HasCheckBox(COMVariant::createFromInt(0),true);
                com_Item.State(COMVariant::createFromInt(0),1);
            var_Item1 = COM::createFromObject(com_Items.Add("Check <b>4")); com_Item1 = var_Item1;
            com_Item1.HasCheckBox(COMVariant::createFromInt(0),true);
}

Delphi 8 (.NET only)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeStateChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeStateChangedEvent);
begin
    with AxTreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[e.item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[TObject(0)] );
        end;
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib.GridLinesEnum.exNoLines;
        Columns.Add('Check').Alignment := EXTREECUBELib.AlignmentEnum.LeftAlignment;
        with Items do
        begin
            Add('Check <b>1').HasCheckBox[TObject(0)] := True;
            Add('Check <b>2').HasCheckBox[TObject(0)] := True;
            with Add('Check <b>3') do
            begin
                HasCheckBox[TObject(0)] := True;
                State[TObject(0)] := 1;
            end;
            Add('Check <b>4').HasCheckBox[TObject(0)] := True;
        end;
    end;
end

Delphi (standard)

// FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
procedure TForm1.TreeCube1FaceTreeStateChanged(ASender: TObject; Tree : IFaceTree;Item : Integer;Column : Integer);
begin
    with TreeCube1 do
    begin
        with FrontFace.FaceTree.ItemByIndex[Item] do
        begin
            OutputDebugString( 'State' );
            OutputDebugString( State[OleVariant(0)] );
        end;
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace.CreateTree() do
    begin
        HeaderVisible := False;
        ItemPadding := 16;
        DrawGridLines := EXTREECUBELib_TLB.exNoLines;
        Columns.Add('Check').Alignment := EXTREECUBELib_TLB.LeftAlignment;
        with Items do
        begin
            Add('Check <b>1').HasCheckBox[OleVariant(0)] := True;
            Add('Check <b>2').HasCheckBox[OleVariant(0)] := True;
            with Add('Check <b>3') do
            begin
                HasCheckBox[OleVariant(0)] := True;
                State[OleVariant(0)] := 1;
            end;
            Add('Check <b>4').HasCheckBox[OleVariant(0)] := True;
        end;
    end;
end

VFP

*** FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type. ***
LPARAMETERS Tree,Item,Column
    with thisform.TreeCube1
        with .FrontFace.FaceTree.ItemByIndex(Item)
            DEBUGOUT( "State" )
            DEBUGOUT( .State(0) )
        endwith
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace.CreateTree
        .HeaderVisible = .F.
        .ItemPadding = 16
        .DrawGridLines = 0
        .Columns.Add("Check").Alignment = 0
        with .Items
            .Add("Check <b>1").HasCheckBox(0) = .T.
            .Add("Check <b>2").HasCheckBox(0) = .T.
            with .Add("Check <b>3")
                .HasCheckBox(0) = .T.
                .State(0) = 1
            endwith
            .Add("Check <b>4").HasCheckBox(0) = .T.
        endwith
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeStateChanged = class::nativeObject_FaceTreeStateChanged
endwith
*/
// Notifies that a cell changes its state into a face of tree type.
function nativeObject_FaceTreeStateChanged(Tree,Item,Column)
    local var_Item
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? Str(var_Item.State(0))
return

local oTreeCube,var_Column,var_FaceTree,var_Item,var_Item1,var_Item2,var_Item3,var_Items

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    // var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Check")
    with (oTreeCube)
        TemplateDef = [dim var_Column]
        TemplateDef = var_Column
        Template = [var_Column.Alignment = 0]
    endwith
    var_Items = var_FaceTree.Items
        // var_Items.Add("Check <b>1").HasCheckBox(0) = true
        var_Item = var_Items.Add("Check <b>1")
        with (oTreeCube)
            TemplateDef = [dim var_Item]
            TemplateDef = var_Item
            Template = [var_Item.HasCheckBox(0) = True]
        endwith
        // var_Items.Add("Check <b>2").HasCheckBox(0) = true
        var_Item1 = var_Items.Add("Check <b>2")
        with (oTreeCube)
            TemplateDef = [dim var_Item1]
            TemplateDef = var_Item1
            Template = [var_Item1.HasCheckBox(0) = True]
        endwith
        var_Item2 = var_Items.Add("Check <b>3")
            // var_Item2.HasCheckBox(0) = true
            with (oTreeCube)
                TemplateDef = [dim var_Item2]
                TemplateDef = var_Item2
                Template = [var_Item2.HasCheckBox(0) = True]
            endwith
            // var_Item2.State(0) = 1
            with (oTreeCube)
                TemplateDef = [dim var_Item2]
                TemplateDef = var_Item2
                Template = [var_Item2.State(0) = 1]
            endwith
        // var_Items.Add("Check <b>4").HasCheckBox(0) = true
        var_Item3 = var_Items.Add("Check <b>4")
        with (oTreeCube)
            TemplateDef = [dim var_Item3]
            TemplateDef = var_Item3
            Template = [var_Item3.HasCheckBox(0) = True]
        endwith

XBasic (Alpha Five)

' Notifies that a cell changes its state into a face of tree type.
function FaceTreeStateChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree,Item  as  N,Column  as  N)
    Dim var_Item as P
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        ? "State"
        ? var_Item.State(0)
end function

Dim oTreeCube as P
Dim var_Column as local
Dim var_FaceTree as P
Dim var_Item as local
Dim var_Item1 as local
Dim var_Item2 as P
Dim var_Item3 as local
Dim var_Items as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = .f.
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    ' var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Column = var_FaceTree.Columns.Add("Check")
    oTreeCube.TemplateDef = "dim var_Column"
    oTreeCube.TemplateDef = var_Column
    oTreeCube.Template = "var_Column.Alignment = 0"

    var_Items = var_FaceTree.Items
        ' var_Items.Add("Check <b>1").HasCheckBox(0) = .t.
        var_Item = var_Items.Add("Check <b>1")
        oTreeCube.TemplateDef = "dim var_Item"
        oTreeCube.TemplateDef = var_Item
        oTreeCube.Template = "var_Item.HasCheckBox(0) = True"

        ' var_Items.Add("Check <b>2").HasCheckBox(0) = .t.
        var_Item1 = var_Items.Add("Check <b>2")
        oTreeCube.TemplateDef = "dim var_Item1"
        oTreeCube.TemplateDef = var_Item1
        oTreeCube.Template = "var_Item1.HasCheckBox(0) = True"

        var_Item2 = var_Items.Add("Check <b>3")
            ' var_Item2.HasCheckBox(0) = .t.
            oTreeCube.TemplateDef = "dim var_Item2"
            oTreeCube.TemplateDef = var_Item2
            oTreeCube.Template = "var_Item2.HasCheckBox(0) = True"

            ' var_Item2.State(0) = 1
            oTreeCube.TemplateDef = "dim var_Item2"
            oTreeCube.TemplateDef = var_Item2
            oTreeCube.Template = "var_Item2.State(0) = 1"

        ' var_Items.Add("Check <b>4").HasCheckBox(0) = .t.
        var_Item3 = var_Items.Add("Check <b>4")
        oTreeCube.TemplateDef = "dim var_Item3"
        oTreeCube.TemplateDef = var_Item3
        oTreeCube.Template = "var_Item3.HasCheckBox(0) = True"

Visual Objects

METHOD OCX_Exontrol1FaceTreeStateChanged(Tree,Item,Column) CLASS MainDialog
    // FaceTreeStateChanged event - Notifies that a cell changes its state into a face of tree type.
    local var_Item as IItem
    var_Item := oDCOCX_Exontrol1:FrontFace:FaceTree:[ItemByIndex,Item]
        OutputDebugString(String2Psz( "State" ))
        OutputDebugString(String2Psz( AsString(var_Item:[State,0]) ))
RETURN NIL

local var_FaceTree as IFaceTree
local var_Item as IItem
local var_Items as IItems

oDCOCX_Exontrol1:TexturePicturePath := ""
var_FaceTree := oDCOCX_Exontrol1:FrontFace:CreateTree()
    var_FaceTree:HeaderVisible := false
    var_FaceTree:ItemPadding := 16
    var_FaceTree:DrawGridLines := exNoLines
    var_FaceTree:Columns:Add("Check"):Alignment := LeftAlignment
    var_Items := var_FaceTree:Items
        var_Items:Add("Check <b>1"):[HasCheckBox,0] := true
        var_Items:Add("Check <b>2"):[HasCheckBox,0] := true
        var_Item := var_Items:Add("Check <b>3")
            var_Item:[HasCheckBox,0] := true
            var_Item:[State,0] := 1
        var_Items:Add("Check <b>4"):[HasCheckBox,0] := true

PowerBuilder

/*begin event FaceTreeStateChanged(oleobject  Tree,long  Item,long  Column) - Notifies that a cell changes its state into a face of tree type.*/
/*
    OleObject var_Item
    oTreeCube = ole_1.Object
    var_Item = oTreeCube.FrontFace.FaceTree.ItemByIndex(Item)
        MessageBox("Information",string( "State" ))
        MessageBox("Information",string( String(var_Item.State(0)) ))
*/
/*end event FaceTreeStateChanged*/

OleObject oTreeCube,var_FaceTree,var_Item,var_Items

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_FaceTree = oTreeCube.FrontFace.CreateTree()
    var_FaceTree.HeaderVisible = false
    var_FaceTree.ItemPadding = 16
    var_FaceTree.DrawGridLines = 0
    var_FaceTree.Columns.Add("Check").Alignment = 0
    var_Items = var_FaceTree.Items
        var_Items.Add("Check <b>1").HasCheckBox(0,true)
        var_Items.Add("Check <b>2").HasCheckBox(0,true)
        var_Item = var_Items.Add("Check <b>3")
            var_Item.HasCheckBox(0,true)
            var_Item.State(0,1)
        var_Items.Add("Check <b>4").HasCheckBox(0,true)

Visual DataFlex

// Notifies that a cell changes its state into a face of tree type.
Procedure OnComFaceTreeStateChanged Variant   llTree Integer   llItem Integer   llColumn
    Forward Send OnComFaceTreeStateChanged llTree llItem llColumn
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComFaceTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Variant voItem
            Get ComItemByIndex of hoFaceTree llItem to voItem
            Handle hoItem
            Get Create (RefClass(cComItem)) to hoItem
            Set pvComObject of hoItem to voItem
                Showln "State" (ComState(hoItem,0))
            Send Destroy to hoItem
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace1
    Get ComFrontFace to voFace1
    Handle hoFace1
    Get Create (RefClass(cComFace)) to hoFace1
    Set pvComObject of hoFace1 to voFace1
        Variant voFaceTree1
        Get ComCreateTree of hoFace1 to voFaceTree1
        Handle hoFaceTree1
        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
        Set pvComObject of hoFaceTree1 to voFaceTree1
            Set ComHeaderVisible of hoFaceTree1 to False
            Set ComItemPadding of hoFaceTree1 to 16
            Set ComDrawGridLines of hoFaceTree1 to OLEexNoLines
            Variant voColumns
            Get ComColumns of hoFaceTree1 to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Variant voColumn
                Get ComAdd of hoColumns "Check" to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComAlignment of hoColumn to OLELeftAlignment
                Send Destroy to hoColumn
            Send Destroy to hoColumns
            Variant voItems
            Get ComItems of hoFaceTree1 to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant voItem1
                Get ComAdd of hoItems "Check <b>1" to voItem1
                Handle hoItem1
                Get Create (RefClass(cComItem)) to hoItem1
                Set pvComObject of hoItem1 to voItem1
                    Set ComHasCheckBox of hoItem1 0 to True
                Send Destroy to hoItem1
                Variant voItem2
                Get ComAdd of hoItems "Check <b>2" to voItem2
                Handle hoItem2
                Get Create (RefClass(cComItem)) to hoItem2
                Set pvComObject of hoItem2 to voItem2
                    Set ComHasCheckBox of hoItem2 0 to True
                Send Destroy to hoItem2
                Variant voItem3
                Get ComAdd of hoItems "Check <b>3" to voItem3
                Handle hoItem3
                Get Create (RefClass(cComItem)) to hoItem3
                Set pvComObject of hoItem3 to voItem3
                    Set ComHasCheckBox of hoItem3 0 to True
                    Set ComState of hoItem3 0 to 1
                Send Destroy to hoItem3
                Variant voItem4
                Get ComAdd of hoItems "Check <b>4" to voItem4
                Handle hoItem4
                Get Create (RefClass(cComItem)) to hoItem4
                Set pvComObject of hoItem4 to voItem4
                    Set ComHasCheckBox of hoItem4 0 to True
                Send Destroy to hoItem4
            Send Destroy to hoItems
        Send Destroy to hoFaceTree1
    Send Destroy to hoFace1
End_Procedure

XBase++

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
    LOCAL oItem
    oItem := oTreeCube:FrontFace():FaceTree():ItemByIndex(Item)
        DevOut( "State" )
        DevOut( Transform(oItem:State(0),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFaceTree
    LOCAL oItem
    LOCAL oItems
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

        oTreeCube:TexturePicturePath := ""
        oFaceTree := oTreeCube:FrontFace():CreateTree()
            oFaceTree:HeaderVisible := .F.
            oFaceTree:ItemPadding := 16
            oFaceTree:DrawGridLines := 0/*exNoLines*/
            oFaceTree:Columns():Add("Check"):Alignment := 0/*LeftAlignment*/
            oItems := oFaceTree:Items()
                oItems:Add("Check <b>1"):SetProperty("HasCheckBox",0,.T.)
                oItems:Add("Check <b>2"):SetProperty("HasCheckBox",0,.T.)
                oItem := oItems:Add("Check <b>3")
                    oItem:SetProperty("HasCheckBox",0,.T.)
                    oItem:SetProperty("State",0,1)
                oItems:Add("Check <b>4"):SetProperty("HasCheckBox",0,.T.)

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event FaceTreeValueChanged

event FaceTreeValueChanged (Tree as FaceTree)
Notifies that the user selects a new item/column/value into a face of the tree type.

Type | Description
Tree as FaceTree | A FaceTree object where the value has been changed.
The FaceTreeValueChanged / FaceTreeSelectionChanged event notifies your application once the user selects a new item/column. The Value property indicates the value of the selected item/column. The Caption property indicates the caption or the text being shown at the selected item/column. The ShowSelection property specifies whether the selection is shown or hidden. The FullRowSelect property specifies whether the selection is shown on single or all columns. The SelectItem property specifies the index of the item being selected. The SelectColumn property specifies the index of the column being selected. The SelBackColor property specifies the visual appearance of selected cell/item. The SelForeColor property specifies the foreground color of selected cell/item.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event

Syntax for FaceTreeValueChanged event, /NET version, on:

private void FaceTreeValueChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree)
{
}

Private Sub FaceTreeValueChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree) Handles FaceTreeValueChanged
End Sub

Syntax for FaceTreeValueChanged event, /COM version, on:

private void FaceTreeValueChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeValueChangedEvent e)
{
}

void OnFaceTreeValueChanged(LPDISPATCH   Tree)
{
}

void __fastcall FaceTreeValueChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree)
{
}

procedure FaceTreeValueChanged(ASender: TObject; Tree : IFaceTree);
begin
end;

procedure FaceTreeValueChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeValueChangedEvent);
begin
end;

begin event FaceTreeValueChanged(oleobject  Tree)

end event FaceTreeValueChanged

Private Sub FaceTreeValueChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeValueChangedEvent) Handles FaceTreeValueChanged
End Sub

Private Sub FaceTreeValueChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree)
End Sub

Private Sub FaceTreeValueChanged(ByVal Tree As Object)
End Sub

LPARAMETERS Tree

PROCEDURE OnFaceTreeValueChanged(oTreeCube,Tree)

RETURN

Syntax for FaceTreeValueChanged event, /COM version (others), on:

<SCRIPT EVENT="FaceTreeValueChanged(Tree)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function FaceTreeValueChanged(Tree)
End Function
</SCRIPT>

Procedure OnComFaceTreeValueChanged Variant   llTree
    Forward Send OnComFaceTreeValueChanged llTree
End_Procedure

METHOD OCX_FaceTreeValueChanged(Tree) CLASS MainDialog
RETURN NIL

void onEvent_FaceTreeValueChanged(COM   _Tree)
{
}

function FaceTreeValueChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree)
end function

function nativeObject_FaceTreeValueChanged(Tree)
return

How do I get the selected caption?

VBA (MS Access, Excell...)

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub TreeCube1_FaceTreeSelectionChanged(ByVal Tree As Object)
    With TreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB6

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub TreeCube1_FaceTreeSelectionChanged(ByVal Tree As EXTREECUBELibCtl.IFaceTree)
    With TreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With TreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB.NET

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub Extreecube1_FaceTreeSelectionChanged(ByVal sender As System.Object,ByVal Tree As exontrol.EXTREECUBELib.FaceTree) Handles Extreecube1.FaceTreeSelectionChanged
    With Extreecube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With Extreecube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree()
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = Extreecube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

VB.NET for /COM

' FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
Private Sub AxTreeCube1_FaceTreeSelectionChanged(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent) Handles AxTreeCube1.FaceTreeSelectionChanged
    With AxTreeCube1
        Debug.Print( "Value" )
        Debug.Print( .FrontFace.FaceTree.Value )
        Debug.Print( "Caption" )
        Debug.Print( .FrontFace.FaceTree.Caption )
    End With
End Sub

With AxTreeCube1
    .TexturePicturePath = ""
    With .FrontFace
        With .CreateTree()
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = False
            .Items.Count = AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        End With
    End With
End With

C++

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void OnFaceTreeSelectionChangedTreeCube1(LPDISPATCH   Tree)
{
    /*
        Copy and paste the following directives to your header file as
        it defines the namespace 'EXTREECUBELib' for the library: 'ExTreeCube 1.0 Control Library'
        #import <ExTreeCube.dll>
        using namespace EXTREECUBELib;
    */
    EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
    OutputDebugStringW( L"Value" );
    OutputDebugStringW( _bstr_t(spTreeCube1->GetFrontFace()->GetFaceTree()->GetValue()) );
    OutputDebugStringW( L"Caption" );
    OutputDebugStringW( spTreeCube1->GetFrontFace()->GetFaceTree()->GetCaption() );
}

EXTREECUBELib::ITreeCubePtr spTreeCube1 = GetDlgItem(IDC_TREECUBE1)->GetControlUnknown();
spTreeCube1->PutTexturePicturePath(L"");
EXTREECUBELib::IFacePtr var_Face = spTreeCube1->GetFrontFace();
    EXTREECUBELib::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->PutItemPadding(20);
        var_FaceTree->GetColumns()->PutCount(5);
        var_FaceTree->PutHeaderVisible(VARIANT_FALSE);
        var_FaceTree->GetItems()->PutCount(spTreeCube1->GetFrontFace()->GetFaceTree()->GetVisibleItemsCount());
        var_FaceTree->GetColumns()->GetItem(long(0))->PutFormatColumn(L"(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(1))->PutFormatColumn(L"(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(2))->PutFormatColumn(L"(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(3))->PutFormatColumn(L"(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
        var_FaceTree->GetColumns()->GetItem(long(4))->PutFormatColumn(L"(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");

C++ Builder

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void __fastcall TForm1::TreeCube1FaceTreeSelectionChanged(TObject *Sender,Extreecubelib_tlb::IFaceTree   *Tree)
{
    OutputDebugString( L"Value" );
    OutputDebugString( PChar(TreeCube1->FrontFace->FaceTree->get_Value()) );
    OutputDebugString( L"Caption" );
    OutputDebugString( TreeCube1->FrontFace->FaceTree->Caption );
}

TreeCube1->TexturePicturePath = L"";
Extreecubelib_tlb::IFacePtr var_Face = TreeCube1->FrontFace;
    Extreecubelib_tlb::IFaceTreePtr var_FaceTree = var_Face->CreateTree();
        var_FaceTree->ItemPadding = 20;
        var_FaceTree->Columns->Count = 5;
        var_FaceTree->HeaderVisible = false;
        var_FaceTree->Items->Count = TreeCube1->FrontFace->FaceTree->VisibleItemsCount;
        var_FaceTree->Columns->get_Item(TVariant(0))->FormatColumn = L"(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(1))->FormatColumn = L"(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(2))->FormatColumn = L"(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(3))->FormatColumn = L"(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree->Columns->get_Item(TVariant(4))->FormatColumn = L"(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

C#

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
private void extreecube1_FaceTreeSelectionChanged(object sender,exontrol.EXTREECUBELib.FaceTree   Tree)
{
    System.Diagnostics.Debug.Print( "Value" );
    System.Diagnostics.Debug.Print( extreecube1.FrontFace.FaceTree.Value.ToString() );
    System.Diagnostics.Debug.Print( "Caption" );
    System.Diagnostics.Debug.Print( extreecube1.FrontFace.FaceTree.Caption );
}
//this.extreecube1.FaceTreeSelectionChanged += new exontrol.EXTREECUBELib.exg2antt.FaceTreeSelectionChangedEventHandler(this.extreecube1_FaceTreeSelectionChanged);

extreecube1.TexturePicturePath = "";
exontrol.EXTREECUBELib.Face var_Face = extreecube1.FrontFace;
    exontrol.EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.ItemPadding = 20;
        var_FaceTree.Columns.Count = 5;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.Items.Count = extreecube1.FrontFace.FaceTree.VisibleItemsCount;
        var_FaceTree.Columns[0].FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[1].FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[2].FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[3].FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[4].FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

JScript/JavaScript

<BODY onload="Init()">
<SCRIPT FOR="TreeCube1" EVENT="FaceTreeSelectionChanged(Tree)" LANGUAGE="JScript">
    alert( "Value" );
    alert( TreeCube1.FrontFace.FaceTree.Value );
    alert( "Caption" );
    alert( TreeCube1.FrontFace.FaceTree.Caption );
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
    TreeCube1.TexturePicturePath = "";
    var var_Face = TreeCube1.FrontFace;
        var var_FaceTree = var_Face.CreateTree();
            var_FaceTree.ItemPadding = 20;
            var_FaceTree.Columns.Count = 5;
            var_FaceTree.HeaderVisible = false;
            var_FaceTree.Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
            var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
}
</SCRIPT>
</BODY>

VBScript

<BODY onload="Init()">
<SCRIPT LANGUAGE="VBScript">
Function TreeCube1_FaceTreeSelectionChanged(Tree)
    With TreeCube1
        alert( "Value" )
        alert( .FrontFace.FaceTree.Value )
        alert( "Caption" )
        alert( .FrontFace.FaceTree.Caption )
    End With
End Function
</SCRIPT>

<OBJECT CLASSID="clsid:13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9" id="TreeCube1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
    With TreeCube1
        .TexturePicturePath = ""
        With .FrontFace
            With .CreateTree
                .ItemPadding = 20
                .Columns.Count = 5
                .HeaderVisible = False
                .Items.Count = TreeCube1.FrontFace.FaceTree.VisibleItemsCount
                .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            End With
        End With
    End With
End Function
</SCRIPT>
</BODY>

C# for /COM

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
private void axTreeCube1_FaceTreeSelectionChanged(object sender, AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent e)
{
    System.Diagnostics.Debug.Print( "Value" );
    System.Diagnostics.Debug.Print( axTreeCube1.FrontFace.FaceTree.Value.ToString() );
    System.Diagnostics.Debug.Print( "Caption" );
    System.Diagnostics.Debug.Print( axTreeCube1.FrontFace.FaceTree.Caption );
}
//this.axTreeCube1.FaceTreeSelectionChanged += new AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEventHandler(this.axTreeCube1_FaceTreeSelectionChanged);

axTreeCube1.TexturePicturePath = "";
EXTREECUBELib.Face var_Face = axTreeCube1.FrontFace;
    EXTREECUBELib.FaceTree var_FaceTree = var_Face.CreateTree();
        var_FaceTree.ItemPadding = 20;
        var_FaceTree.Columns.Count = 5;
        var_FaceTree.HeaderVisible = false;
        var_FaceTree.Items.Count = axTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
        var_FaceTree.Columns[0].FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[1].FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[2].FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[3].FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";
        var_FaceTree.Columns[4].FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0";

X++ (Dynamics Ax 2009)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
void onEvent_FaceTreeSelectionChanged(COM   _Tree)
{
    ;
    print( "Value" );
    print( extreecube1.FrontFace().FaceTree().Value() );
    print( "Caption" );
    print( extreecube1.FrontFace().FaceTree().Caption() );
}

public void init()
{
    COM com_Column,com_Columns,com_Face,com_FaceTree,com_Items;
    anytype var_Column,var_Columns,var_Face,var_FaceTree,var_Items;
    ;

    super();

    extreecube1.TexturePicturePath("");
    var_Face = extreecube1.FrontFace(); com_Face = var_Face;
        var_FaceTree = com_Face.CreateTree(); com_FaceTree = var_FaceTree;
            com_FaceTree.ItemPadding(20);
            var_Columns = COM::createFromObject(com_FaceTree.Columns()); com_Columns = var_Columns;
            com_Columns.Count(5);
            com_FaceTree.HeaderVisible(false);
            var_Items = COM::createFromObject(com_FaceTree.Items()); com_Items = var_Items;
            com_Items.Count(extreecube1.FrontFace().FaceTree().VisibleItemsCount());
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(0)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(2)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(3)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
            var_Column = COM::createFromObject(com_FaceTree.Columns()).Item(COMVariant::createFromInt(4)); com_Column = var_Column;
            com_Column.FormatColumn("(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0");
}

Delphi 8 (.NET only)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
procedure TWinForm1.AxTreeCube1_FaceTreeSelectionChanged(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_FaceTreeSelectionChangedEvent);
begin
    with AxTreeCube1 do
    begin
        OutputDebugString( 'Value' );
        OutputDebugString( FrontFace.FaceTree.Value );
        OutputDebugString( 'Caption' );
        OutputDebugString( FrontFace.FaceTree.Caption );
    end
end;

with AxTreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace do
    begin
        with CreateTree() do
        begin
            ItemPadding := 20;
            Columns.Count := 5;
            HeaderVisible := False;
            Items.Count := AxTreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            Columns.Item[TObject(0)].FormatColumn := '(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(1)].FormatColumn := '(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(2)].FormatColumn := '(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(3)].FormatColumn := '(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[TObject(4)].FormatColumn := '(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
        end;
    end;
end

Delphi (standard)

// FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
procedure TForm1.TreeCube1FaceTreeSelectionChanged(ASender: TObject; Tree : IFaceTree);
begin
    with TreeCube1 do
    begin
        OutputDebugString( 'Value' );
        OutputDebugString( FrontFace.FaceTree.Value );
        OutputDebugString( 'Caption' );
        OutputDebugString( FrontFace.FaceTree.Caption );
    end
end;

with TreeCube1 do
begin
    TexturePicturePath := '';
    with FrontFace do
    begin
        with CreateTree() do
        begin
            ItemPadding := 20;
            Columns.Count := 5;
            HeaderVisible := False;
            Items.Count := TreeCube1.FrontFace.FaceTree.VisibleItemsCount;
            Columns.Item[OleVariant(0)].FormatColumn := '(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(1)].FormatColumn := '(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(2)].FormatColumn := '(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(3)].FormatColumn := '(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
            Columns.Item[OleVariant(4)].FormatColumn := '(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0';
        end;
    end;
end

VFP

*** FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type. ***
LPARAMETERS Tree
    with thisform.TreeCube1
        DEBUGOUT( "Value" )
        DEBUGOUT( .FrontFace.FaceTree.Value )
        DEBUGOUT( "Caption" )
        DEBUGOUT( .FrontFace.FaceTree.Caption )
    endwith

with thisform.TreeCube1
    .TexturePicturePath = ""
    with .FrontFace
        with .CreateTree
            .ItemPadding = 20
            .Columns.Count = 5
            .HeaderVisible = .F.
            .Items.Count = thisform.TreeCube1.FrontFace.FaceTree.VisibleItemsCount
            .Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
            .Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        endwith
    endwith
endwith

dBASE Plus

/*
with (this.EXTREECUBEACTIVEXCONTROL1.nativeObject)
    FaceTreeSelectionChanged = class::nativeObject_FaceTreeSelectionChanged
endwith
*/
// Notifies that the user selects a new item/column into a face of tree type.
function nativeObject_FaceTreeSelectionChanged(Tree)
    oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
    ? "Value"
    ? Str(oTreeCube.FrontFace.FaceTree.Value)
    ? "Caption"
    ? oTreeCube.FrontFace.FaceTree.Caption
return

local oTreeCube,var_Face,var_FaceTree

oTreeCube = form.EXTREECUBEACTIVEXCONTROL1.nativeObject
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = false
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

XBasic (Alpha Five)

' Notifies that the user selects a new item/column into a face of tree type.
function FaceTreeSelectionChanged as v (Tree  as  OLE::Exontrol.TreeCube.1::IFaceTree)
    oTreeCube = topparent:CONTROL_ACTIVEX1.activex
    ? "Value"
    ? oTreeCube.FrontFace.FaceTree.Value
    ? "Caption"
    ? oTreeCube.FrontFace.FaceTree.Caption
end function

Dim oTreeCube as P
Dim var_Face as P
Dim var_FaceTree as P

oTreeCube = topparent:CONTROL_ACTIVEX1.activex
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = .f.
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

Visual Objects

METHOD OCX_Exontrol1FaceTreeSelectionChanged(Tree) CLASS MainDialog
    // FaceTreeSelectionChanged event - Notifies that the user selects a new item/column into a face of tree type.
    OutputDebugString(String2Psz( "Value" ))
    OutputDebugString(String2Psz( AsString(oDCOCX_Exontrol1:FrontFace:FaceTree:Value) ))
    OutputDebugString(String2Psz( "Caption" ))
    OutputDebugString(String2Psz( oDCOCX_Exontrol1:FrontFace:FaceTree:Caption ))
RETURN NIL

local var_Face as IFace
local var_FaceTree as IFaceTree

oDCOCX_Exontrol1:TexturePicturePath := ""
var_Face := oDCOCX_Exontrol1:FrontFace
    var_FaceTree := var_Face:CreateTree()
        var_FaceTree:ItemPadding := 20
        var_FaceTree:Columns:Count := 5
        var_FaceTree:HeaderVisible := false
        var_FaceTree:Items:Count := oDCOCX_Exontrol1:FrontFace:FaceTree:VisibleItemsCount
        var_FaceTree:Columns:[Item,0]:FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,1]:FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,2]:FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,3]:FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree:Columns:[Item,4]:FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

PowerBuilder

/*begin event FaceTreeSelectionChanged(oleobject  Tree) - Notifies that the user selects a new item/column into a face of tree type.*/
/*
    oTreeCube = ole_1.Object
    MessageBox("Information",string( "Value" ))
    MessageBox("Information",string( String(oTreeCube.FrontFace.FaceTree.Value) ))
    MessageBox("Information",string( "Caption" ))
    MessageBox("Information",string( oTreeCube.FrontFace.FaceTree.Caption ))
*/
/*end event FaceTreeSelectionChanged*/

OleObject oTreeCube,var_Face,var_FaceTree

oTreeCube = ole_1.Object
oTreeCube.TexturePicturePath = ""
var_Face = oTreeCube.FrontFace
    var_FaceTree = var_Face.CreateTree()
        var_FaceTree.ItemPadding = 20
        var_FaceTree.Columns.Count = 5
        var_FaceTree.HeaderVisible = false
        var_FaceTree.Items.Count = oTreeCube.FrontFace.FaceTree.VisibleItemsCount
        var_FaceTree.Columns.Item(0).FormatColumn = "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(1).FormatColumn = "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(2).FormatColumn = "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(3).FormatColumn = "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
        var_FaceTree.Columns.Item(4).FormatColumn = "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

Visual DataFlex

// Notifies that the user selects a new item/column into a face of tree type.
Procedure OnComFaceTreeSelectionChanged Variant   llTree
    Forward Send OnComFaceTreeSelectionChanged llTree
    Variant v
    Variant voFace
    Get ComFrontFace to voFace
    Handle hoFace
    Get Create (RefClass(cComFace)) to hoFace
    Set pvComObject of hoFace to voFace
        Variant voFaceTree
        Get ComFaceTree of hoFace to voFaceTree
        Handle hoFaceTree
        Get Create (RefClass(cComFaceTree)) to hoFaceTree
        Set pvComObject of hoFaceTree to voFaceTree
            Get ComValue of hoFaceTree to v
        Send Destroy to hoFaceTree
    Send Destroy to hoFace
    Showln "Value" v
    Variant v1
    Variant voFace1
    Get ComFrontFace to voFace1
    Handle hoFace1
    Get Create (RefClass(cComFace)) to hoFace1
    Set pvComObject of hoFace1 to voFace1
        Variant voFaceTree1
        Get ComFaceTree of hoFace1 to voFaceTree1
        Handle hoFaceTree1
        Get Create (RefClass(cComFaceTree)) to hoFaceTree1
        Set pvComObject of hoFaceTree1 to voFaceTree1
            Get ComCaption of hoFaceTree1 to v1
        Send Destroy to hoFaceTree1
    Send Destroy to hoFace1
    Showln "Caption" v1
End_Procedure

Procedure OnCreate
    Forward Send OnCreate
    Set ComTexturePicturePath to ""
    Variant voFace2
    Get ComFrontFace to voFace2
    Handle hoFace2
    Get Create (RefClass(cComFace)) to hoFace2
    Set pvComObject of hoFace2 to voFace2
        Variant voFaceTree2
        Get ComCreateTree of hoFace2 to voFaceTree2
        Handle hoFaceTree2
        Get Create (RefClass(cComFaceTree)) to hoFaceTree2
        Set pvComObject of hoFaceTree2 to voFaceTree2
            Set ComItemPadding of hoFaceTree2 to 20
            Variant voColumns
            Get ComColumns of hoFaceTree2 to voColumns
            Handle hoColumns
            Get Create (RefClass(cComColumns)) to hoColumns
            Set pvComObject of hoColumns to voColumns
                Set ComCount of hoColumns to 5
            Send Destroy to hoColumns
            Set ComHeaderVisible of hoFaceTree2 to False
            Variant voItems
            Get ComItems of hoFaceTree2 to voItems
            Handle hoItems
            Get Create (RefClass(cComItems)) to hoItems
            Set pvComObject of hoItems to voItems
                Variant v2
                    Variant voFace3
                    Get ComFrontFace to voFace3
                    Handle hoFace3
                    Get Create (RefClass(cComFace)) to hoFace3
                    Set pvComObject of hoFace3 to voFace3
                        Variant voFaceTree3
                        Get ComFaceTree of hoFace3 to voFaceTree3
                        Handle hoFaceTree3
                        Get Create (RefClass(cComFaceTree)) to hoFaceTree3
                        Set pvComObject of hoFaceTree3 to voFaceTree3
                            Get ComVisibleItemsCount of hoFaceTree3 to v2
                        Send Destroy to hoFaceTree3
                    Send Destroy to hoFace3
                Set ComCount of hoItems to v2
            Send Destroy to hoItems
            Variant voColumns1
            Get ComColumns of hoFaceTree2 to voColumns1
            Handle hoColumns1
            Get Create (RefClass(cComColumns)) to hoColumns1
            Set pvComObject of hoColumns1 to voColumns1
                Variant voColumn
                Get ComItem of hoColumns1 0 to voColumn
                Handle hoColumn
                Get Create (RefClass(cComColumn)) to hoColumn
                Set pvComObject of hoColumn to voColumn
                    Set ComFormatColumn of hoColumn to "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn
            Send Destroy to hoColumns1
            Variant voColumns2
            Get ComColumns of hoFaceTree2 to voColumns2
            Handle hoColumns2
            Get Create (RefClass(cComColumns)) to hoColumns2
            Set pvComObject of hoColumns2 to voColumns2
                Variant voColumn1
                Get ComItem of hoColumns2 1 to voColumn1
                Handle hoColumn1
                Get Create (RefClass(cComColumn)) to hoColumn1
                Set pvComObject of hoColumn1 to voColumn1
                    Set ComFormatColumn of hoColumn1 to "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn1
            Send Destroy to hoColumns2
            Variant voColumns3
            Get ComColumns of hoFaceTree2 to voColumns3
            Handle hoColumns3
            Get Create (RefClass(cComColumns)) to hoColumns3
            Set pvComObject of hoColumns3 to voColumns3
                Variant voColumn2
                Get ComItem of hoColumns3 2 to voColumn2
                Handle hoColumn2
                Get Create (RefClass(cComColumn)) to hoColumn2
                Set pvComObject of hoColumn2 to voColumn2
                    Set ComFormatColumn of hoColumn2 to "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn2
            Send Destroy to hoColumns3
            Variant voColumns4
            Get ComColumns of hoFaceTree2 to voColumns4
            Handle hoColumns4
            Get Create (RefClass(cComColumns)) to hoColumns4
            Set pvComObject of hoColumns4 to voColumns4
                Variant voColumn3
                Get ComItem of hoColumns4 3 to voColumn3
                Handle hoColumn3
                Get Create (RefClass(cComColumn)) to hoColumn3
                Set pvComObject of hoColumn3 to voColumn3
                    Set ComFormatColumn of hoColumn3 to "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn3
            Send Destroy to hoColumns4
            Variant voColumns5
            Get ComColumns of hoFaceTree2 to voColumns5
            Handle hoColumns5
            Get Create (RefClass(cComColumns)) to hoColumns5
            Set pvComObject of hoColumns5 to voColumns5
                Variant voColumn4
                Get ComItem of hoColumns5 4 to voColumn4
                Handle hoColumn4
                Get Create (RefClass(cComColumn)) to hoColumn4
                Set pvComObject of hoColumn4 to voColumn4
                    Set ComFormatColumn of hoColumn4 to "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                Send Destroy to hoColumn4
            Send Destroy to hoColumns5
        Send Destroy to hoFaceTree2
    Send Destroy to hoFace2
End_Procedure

XBase++

PROCEDURE OnFaceTreeSelectionChanged(oTreeCube,Tree)
    DevOut( "Value" )
    DevOut( Transform(oTreeCube:FrontFace:FaceTree():Value(),"") )
    DevOut( "Caption" )
    DevOut( oTreeCube:FrontFace:FaceTree():Caption() )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
     LOCAL oForm
    LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
    LOCAL oFace
    LOCAL oFaceTree
    LOCAL oTreeCube

    oForm := XbpDialog():new( AppDesktop() )
    oForm:drawingArea:clipChildren := .T.
    oForm:create( ,,{100,100}, {640,480},, .F. )
    oForm:close  := {|| PostAppEvent( xbeP_Quit )}

    oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
    oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
    oTreeCube:create(,, {10,60},{610,370} )

        oTreeCube:FaceTreeSelectionChanged := {|Tree| OnFaceTreeSelectionChanged(oTreeCube,Tree)} /*Notifies that the user selects a new item/column into a face of tree type.*/

        oTreeCube:TexturePicturePath := ""
        oFace := oTreeCube:FrontFace()
            oFaceTree := oFace:CreateTree()
                oFaceTree:ItemPadding := 20
                oFaceTree:Columns():Count := 5
                oFaceTree:HeaderVisible := .F.
                oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
                oFaceTree:Columns:Item(0):FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(1):FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(2):FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(3):FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
                oFaceTree:Columns:Item(4):FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

    oForm:Show()
    DO WHILE nEvent != xbeP_Quit
        nEvent := AppEvent( @mp1, @mp2, @oXbp )
        oXbp:handleEvent( nEvent, mp1, mp2 )
    ENDDO
RETURN


event InitFaceCalendar

event InitFaceCalendar (Calendar as FaceCalendar)
Notifies your application that a face changes its type to exFaceCalendar.

Type | Description
Calendar as FaceCalendar | A FaceCalendar object being created
The InitFaceCalendar / InitFaceContent event occurs once the face's Type property has been changed to exFaceCalendar, or calling the CreateCalendar method for the first time. You can use the InitFaceCalendar event to initialize all faces of Calendar type.

A face that contains a Calendar control may fire any of the following events ( CreateCalendar, Type on exFaceCalendar ):

  • InitFaceCalendar event ( InitFaceContent event )
  • FaceCalendarDateChanged event
  • FaceCalendarSelectionChanged event
  • FaceCalendarValueChanged event

Syntax for InitFaceCalendar event, /NET version, on:

private void InitFaceCalendar(object sender,exontrol.EXTREECUBELib.FaceCalendar   Calendar)
{
}

Private Sub InitFaceCalendar(ByVal sender As System.Object,ByVal Calendar As exontrol.EXTREECUBELib.FaceCalendar) Handles InitFaceCalendar
End Sub

Syntax for InitFaceCalendar event, /COM version, on:

private void InitFaceCalendar(object sender, AxEXTREECUBELib._ITreeCubeEvents_InitFaceCalendarEvent e)
{
}

void OnInitFaceCalendar(LPDISPATCH   Calendar)
{
}

void __fastcall InitFaceCalendar(TObject *Sender,Extreecubelib_tlb::IFaceCalendar   *Calendar)
{
}

procedure InitFaceCalendar(ASender: TObject; Calendar : IFaceCalendar);
begin
end;

procedure InitFaceCalendar(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_InitFaceCalendarEvent);
begin
end;

begin event InitFaceCalendar(oleobject  Calendar)

end event InitFaceCalendar

Private Sub InitFaceCalendar(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_InitFaceCalendarEvent) Handles InitFaceCalendar
End Sub

Private Sub InitFaceCalendar(ByVal Calendar As EXTREECUBELibCtl.IFaceCalendar)
End Sub

Private Sub InitFaceCalendar(ByVal Calendar As Object)
End Sub

LPARAMETERS Calendar

PROCEDURE OnInitFaceCalendar(oTreeCube,Calendar)

RETURN

Syntax for InitFaceCalendar event, /COM version (others), on:

<SCRIPT EVENT="InitFaceCalendar(Calendar)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function InitFaceCalendar(Calendar)
End Function
</SCRIPT>

Procedure OnComInitFaceCalendar Variant   llCalendar
    Forward Send OnComInitFaceCalendar llCalendar
End_Procedure

METHOD OCX_InitFaceCalendar(Calendar) CLASS MainDialog
RETURN NIL

void onEvent_InitFaceCalendar(COM   _Calendar)
{
}

function InitFaceCalendar as v (Calendar  as  OLE::Exontrol.TreeCube.1::IFaceCalendar)
end function

function nativeObject_InitFaceCalendar(Calendar)
return


event InitFaceContent

event InitFaceContent (Face as Face)
Notifies your application that a face changes its type, so you can initialize its content.

Type | Description
Face as Face | A Face object whose content is initialized.

The InitFaceContent event notifies your application that the Type property has been changed, or any of the following has been called:

  • CreatePicture method
  • CreateCalendar method
  • CreateTree method
The FaceContent property retrieves the Nothing/FacePicture/FaceCalendar/FaceTree content, based on the face's type.

The InitFaceContent event occurs before any of the following event:

  • InitFacePicture event
  • InitFaceCalendar event
  • InitFaceTree event

Syntax for InitFaceContent event, /NET version, on:

private void InitFaceContent(object sender,exontrol.EXTREECUBELib.Face   Face)
{
}

Private Sub InitFaceContent(ByVal sender As System.Object,ByVal Face As exontrol.EXTREECUBELib.Face) Handles InitFaceContent
End Sub

Syntax for InitFaceContent event, /COM version, on:

private void InitFaceContent(object sender, AxEXTREECUBELib._ITreeCubeEvents_InitFaceContentEvent e)
{
}

void OnInitFaceContent(LPDISPATCH   Face)
{
}

void __fastcall InitFaceContent(TObject *Sender,Extreecubelib_tlb::IFace   *Face)
{
}

procedure InitFaceContent(ASender: TObject; Face : IFace);
begin
end;

procedure InitFaceContent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_InitFaceContentEvent);
begin
end;

begin event InitFaceContent(oleobject  Face)

end event InitFaceContent

Private Sub InitFaceContent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_InitFaceContentEvent) Handles InitFaceContent
End Sub

Private Sub InitFaceContent(ByVal Face As EXTREECUBELibCtl.IFace)
End Sub

Private Sub InitFaceContent(ByVal Face As Object)
End Sub

LPARAMETERS Face

PROCEDURE OnInitFaceContent(oTreeCube,Face)

RETURN

Syntax for InitFaceContent event, /COM version (others), on:

<SCRIPT EVENT="InitFaceContent(Face)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function InitFaceContent(Face)
End Function
</SCRIPT>

Procedure OnComInitFaceContent Variant   llFace
    Forward Send OnComInitFaceContent llFace
End_Procedure

METHOD OCX_InitFaceContent(Face) CLASS MainDialog
RETURN NIL

void onEvent_InitFaceContent(COM   _Face)
{
}

function InitFaceContent as v (Face  as  OLE::Exontrol.TreeCube.1::IFace)
end function

function nativeObject_InitFaceContent(Face)
return


event InitFacePicture

event InitFacePicture (Picture as FacePicture)
Notifies your application that a face changes its type to exFacePicture.

Type | Description
Picture as FacePicture | A FacePicture object being created
The InitFacePicture / InitFaceContent event occurs once the face's Type property has been changed to exFacePicture, or calling the CreatePicture method for the first time. You can use the InitFacePicture event to initialize all faces of Picture type.

A face that contains a Picture control may fire any of the following events ( CreatePicture, Type on exFacePicture ):

  • InitFacePicture event ( InitFaceContent event )

Syntax for InitFacePicture event, /NET version, on:

private void InitFacePicture(object sender,exontrol.EXTREECUBELib.FacePicture   Picture)
{
}

Private Sub InitFacePicture(ByVal sender As System.Object,ByVal Picture As exontrol.EXTREECUBELib.FacePicture) Handles InitFacePicture
End Sub

Syntax for InitFacePicture event, /COM version, on:

private void InitFacePicture(object sender, AxEXTREECUBELib._ITreeCubeEvents_InitFacePictureEvent e)
{
}

void OnInitFacePicture(LPDISPATCH   Picture)
{
}

void __fastcall InitFacePicture(TObject *Sender,Extreecubelib_tlb::IFacePicture   *Picture)
{
}

procedure InitFacePicture(ASender: TObject; Picture : IFacePicture);
begin
end;

procedure InitFacePicture(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_InitFacePictureEvent);
begin
end;

begin event InitFacePicture(oleobject  Picture)

end event InitFacePicture

Private Sub InitFacePicture(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_InitFacePictureEvent) Handles InitFacePicture
End Sub

Private Sub InitFacePicture(ByVal Picture As EXTREECUBELibCtl.IFacePicture)
End Sub

Private Sub InitFacePicture(ByVal Picture As Object)
End Sub

LPARAMETERS Picture

PROCEDURE OnInitFacePicture(oTreeCube,Picture)

RETURN

Syntax for InitFacePicture event, /COM version (others), on:

<SCRIPT EVENT="InitFacePicture(Picture)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function InitFacePicture(Picture)
End Function
</SCRIPT>

Procedure OnComInitFacePicture Variant   llPicture
    Forward Send OnComInitFacePicture llPicture
End_Procedure

METHOD OCX_InitFacePicture(Picture) CLASS MainDialog
RETURN NIL

void onEvent_InitFacePicture(COM   _Picture)
{
}

function InitFacePicture as v (Picture  as  OLE::Exontrol.TreeCube.1::IFacePicture)
end function

function nativeObject_InitFacePicture(Picture)
return


event InitFaceTree

event InitFaceTree (Tree as FaceTree)
Notifies your application that a face changes its type to exFaceTree.

Type | Description
Tree as FaceTree | A FaceTree object being created
The InitFaceTree / InitFaceContent event occurs once the face's Type property has been changed to exFaceTree, or calling the CreateTree method for the first time. You can use the InitFaceTree event to initialize all faces of Tree type.

A face that contains a Tree control may fire any of the following events ( CreateTree, Type on exFaceTree ):

  • InitFaceTree event ( InitFaceContent event )
  • FaceTreeButtonClick event
  • FaceTreeExpandItem event
  • FaceTreeSelectionChanged event
  • FaceTreeStateChanged event
  • FaceTreeValueChanged event


event KeyDown

event KeyDown (KeyCode as Integer, Shift as Integer)
Occurs when the user presses a key while an object has the focus.

Type | Description
KeyCode as Integer | An integer that represent the key code.
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys at the time of the event. The shift argument is a bit field with the least-significant bits corresponding to the SHIFT key (bit 0), the CTRL key (bit 1), and the ALT key (bit 2). These bits correspond to the values 1, 2, and 4, respectively. Some, all, or none of the bits can be set, indicating that some, all, or none of the keys are pressed. For example, if both CTRL and ALT are pressed, the value of shift is 6.
Use KeyDown and KeyUp event procedures if you need to respond to both the pressing and releasing of a key. The AllowEnsureVisibleFaceOnKey property specifies whether the user can navigate through the faces using the keys. You test for a condition by first assigning each result to a temporary integer variable and then comparing shift to a bit mask. Use the And operator with the shift argument to test whether the condition is greater than 0, indicating that the modifier was pressed, as in this example:

ShiftDown = (Shift And 1) > 0
CtrlDown = (Shift And 2) > 0
AltDown = (Shift And 4) > 0
In a procedure, you can test for any combination of conditions, as in this example:
If AltDown And CtrlDown Then

Syntax for KeyDown event, /NET version, on:

private void KeyDown(object sender,ref short   KeyCode,short   Shift)
{
}

Private Sub KeyDown(ByVal sender As System.Object,ByRef KeyCode As Short,ByVal Shift As Short) Handles KeyDown
End Sub

Syntax for KeyDown event, /COM version, on:

private void KeyDownEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_KeyDownEvent e)
{
}

void OnKeyDown(short FAR*   KeyCode,short   Shift)
{
}

void __fastcall KeyDown(TObject *Sender,short *   KeyCode,short   Shift)
{
}

procedure KeyDown(ASender: TObject; var KeyCode : Smallint;Shift : Smallint);
begin
end;

procedure KeyDownEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_KeyDownEvent);
begin
end;

begin event KeyDown(integer  KeyCode,integer  Shift)

end event KeyDown

Private Sub KeyDownEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_KeyDownEvent) Handles KeyDownEvent
End Sub

Private Sub KeyDown(KeyCode As Integer,Shift As Integer)
End Sub

Private Sub KeyDown(KeyCode As Integer,ByVal Shift As Integer)
End Sub

LPARAMETERS KeyCode,Shift

PROCEDURE OnKeyDown(oTreeCube,KeyCode,Shift)

RETURN

Syntax for KeyDown event, /COM version (others), on:

<SCRIPT EVENT="KeyDown(KeyCode,Shift)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function KeyDown(KeyCode,Shift)
End Function
</SCRIPT>

Procedure OnComKeyDown Short   llKeyCode Short   llShift
    Forward Send OnComKeyDown llKeyCode llShift
End_Procedure

METHOD OCX_KeyDown(KeyCode,Shift) CLASS MainDialog
RETURN NIL

void onEvent_KeyDown(COMVariant /*short*/   _KeyCode,int   _Shift)
{
}

function KeyDown as v (KeyCode  as  N,Shift  as  N)
end function

function nativeObject_KeyDown(KeyCode,Shift)
return


event KeyPress

event KeyPress (KeyAscii as Integer)
Occurs when the user presses and releases an ANSI key.

Type | Description
KeyAscii as Integer | An integer that returns a standard numeric ANSI keycode.
The KeyPress event lets you immediately test keystrokes for validity or for formatting characters as they are typed. Changing the value of the keyascii argument changes the character displayed. Use KeyDown and KeyUp event procedures to handle any keystroke not recognized by KeyPress, such as function keys, editing keys, navigation keys, and any combinations of these with keyboard modifiers. Unlike the KeyDown and KeyUp events, KeyPress does not indicate the physical state of the keyboard; instead, it passes a character. KeyPress interprets the uppercase and lowercase of each character as separate key codes and, therefore, as two separate characters.

Syntax for KeyPress event, /NET version, on:

private void KeyPress(object sender,ref short   KeyAscii)
{
}

Private Sub KeyPress(ByVal sender As System.Object,ByRef KeyAscii As Short) Handles KeyPress
End Sub

Syntax for KeyPress event, /COM version, on:

private void KeyPressEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_KeyPressEvent e)
{
}

void OnKeyPress(short FAR*   KeyAscii)
{
}

void __fastcall KeyPress(TObject *Sender,short *   KeyAscii)
{
}

procedure KeyPress(ASender: TObject; var KeyAscii : Smallint);
begin
end;

procedure KeyPressEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_KeyPressEvent);
begin
end;

begin event KeyPress(integer  KeyAscii)

end event KeyPress

Private Sub KeyPressEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_KeyPressEvent) Handles KeyPressEvent
End Sub

Private Sub KeyPress(KeyAscii As Integer)
End Sub

Private Sub KeyPress(KeyAscii As Integer)
End Sub

LPARAMETERS KeyAscii

PROCEDURE OnKeyPress(oTreeCube,KeyAscii)

RETURN

Syntax for KeyPress event, /COM version (others), on:

<SCRIPT EVENT="KeyPress(KeyAscii)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function KeyPress(KeyAscii)
End Function
</SCRIPT>

Procedure OnComKeyPress Short   llKeyAscii
    Forward Send OnComKeyPress llKeyAscii
End_Procedure

METHOD OCX_KeyPress(KeyAscii) CLASS MainDialog
RETURN NIL

void onEvent_KeyPress(COMVariant /*short*/   _KeyAscii)
{
}

function KeyPress as v (KeyAscii  as  N)
end function

function nativeObject_KeyPress(KeyAscii)
return


event KeyUp

event KeyUp (KeyCode as Integer, Shift as Integer)
Occurs when the user releases a key while an object has the focus.

Type | Description
KeyCode as Integer | An integer that represent the key code.
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys at the time of the event. The shift argument is a bit field with the least-significant bits corresponding to the SHIFT key (bit 0), the CTRL key (bit 1), and the ALT key (bit 2). These bits correspond to the values 1, 2, and 4, respectively. Some, all, or none of the bits can be set, indicating that some, all, or none of the keys are pressed. For example, if both CTRL and ALT are pressed, the value of shift is 6.
Use the KeyUp event procedure to respond to the releasing of a key.

Syntax for KeyUp event, /NET version, on:

private void KeyUp(object sender,ref short   KeyCode,short   Shift)
{
}

Private Sub KeyUp(ByVal sender As System.Object,ByRef KeyCode As Short,ByVal Shift As Short) Handles KeyUp
End Sub

Syntax for KeyUp event, /COM version, on:

private void KeyUpEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_KeyUpEvent e)
{
}

void OnKeyUp(short FAR*   KeyCode,short   Shift)
{
}

void __fastcall KeyUp(TObject *Sender,short *   KeyCode,short   Shift)
{
}

procedure KeyUp(ASender: TObject; var KeyCode : Smallint;Shift : Smallint);
begin
end;

procedure KeyUpEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_KeyUpEvent);
begin
end;

begin event KeyUp(integer  KeyCode,integer  Shift)

end event KeyUp

Private Sub KeyUpEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_KeyUpEvent) Handles KeyUpEvent
End Sub

Private Sub KeyUp(KeyCode As Integer,Shift As Integer)
End Sub

Private Sub KeyUp(KeyCode As Integer,ByVal Shift As Integer)
End Sub

LPARAMETERS KeyCode,Shift

PROCEDURE OnKeyUp(oTreeCube,KeyCode,Shift)

RETURN

Syntax for KeyUp event, /COM version (others), on:

<SCRIPT EVENT="KeyUp(KeyCode,Shift)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function KeyUp(KeyCode,Shift)
End Function
</SCRIPT>

Procedure OnComKeyUp Short   llKeyCode Short   llShift
    Forward Send OnComKeyUp llKeyCode llShift
End_Procedure

METHOD OCX_KeyUp(KeyCode,Shift) CLASS MainDialog
RETURN NIL

void onEvent_KeyUp(COMVariant /*short*/   _KeyCode,int   _Shift)
{
}

function KeyUp as v (KeyCode  as  N,Shift  as  N)
end function

function nativeObject_KeyUp(KeyCode,Shift)
return


event LayoutEndChanging

event LayoutEndChanging (Operation as LayoutChangingEnum)
Notifies your application once the control's layout has been changed.

Type | Description
Operation as LayoutChangingEnum | A LayoutChangingEnum expression that specifies whether the user drags the cube to a different position.
The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.

The control fires the Move event once a new face became visible. The Rotate event occurs once the cube is rotated. The Zoom event occurs once the cube is magnified.

Syntax for LayoutEndChanging event, /NET version, on:

private void LayoutEndChanging(object sender,exontrol.EXTREECUBELib.LayoutChangingEnum   Operation)
{
}

Private Sub LayoutEndChanging(ByVal sender As System.Object,ByVal Operation As exontrol.EXTREECUBELib.LayoutChangingEnum) Handles LayoutEndChanging
End Sub

Syntax for LayoutEndChanging event, /COM version, on:

private void LayoutEndChanging(object sender, AxEXTREECUBELib._ITreeCubeEvents_LayoutEndChangingEvent e)
{
}

void OnLayoutEndChanging(long   Operation)
{
}

void __fastcall LayoutEndChanging(TObject *Sender,Extreecubelib_tlb::LayoutChangingEnum   Operation)
{
}

procedure LayoutEndChanging(ASender: TObject; Operation : LayoutChangingEnum);
begin
end;

procedure LayoutEndChanging(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_LayoutEndChangingEvent);
begin
end;

begin event LayoutEndChanging(long  Operation)

end event LayoutEndChanging

Private Sub LayoutEndChanging(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_LayoutEndChangingEvent) Handles LayoutEndChanging
End Sub

Private Sub LayoutEndChanging(ByVal Operation As EXTREECUBELibCtl.LayoutChangingEnum)
End Sub

Private Sub LayoutEndChanging(ByVal Operation As Long)
End Sub

LPARAMETERS Operation

PROCEDURE OnLayoutEndChanging(oTreeCube,Operation)

RETURN

Syntax for LayoutEndChanging event, /COM version (others), on:

<SCRIPT EVENT="LayoutEndChanging(Operation)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function LayoutEndChanging(Operation)
End Function
</SCRIPT>

Procedure OnComLayoutEndChanging OLELayoutChangingEnum   llOperation
    Forward Send OnComLayoutEndChanging llOperation
End_Procedure

METHOD OCX_LayoutEndChanging(Operation) CLASS MainDialog
RETURN NIL

void onEvent_LayoutEndChanging(int   _Operation)
{
}

function LayoutEndChanging as v (Operation  as  OLE::Exontrol.TreeCube.1::LayoutChangingEnum)
end function

function nativeObject_LayoutEndChanging(Operation)
return


event LayoutStartChanging

event LayoutStartChanging (Operation as LayoutChangingEnum)
Occurs when the control's layout is about to be changed.

Type | Description
Operation as LayoutChangingEnum | A LayoutChangingEnum expression that specifies whether the user drags the cube to a different position.
The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.

The control fires the Move event once a new face became visible. The Rotate event occurs once the cube is rotated. The Zoom event occurs once the cube is magnified.

Syntax for LayoutStartChanging event, /NET version, on:

private void LayoutStartChanging(object sender,exontrol.EXTREECUBELib.LayoutChangingEnum   Operation)
{
}

Private Sub LayoutStartChanging(ByVal sender As System.Object,ByVal Operation As exontrol.EXTREECUBELib.LayoutChangingEnum) Handles LayoutStartChanging
End Sub

Syntax for LayoutStartChanging event, /COM version, on:

private void LayoutStartChanging(object sender, AxEXTREECUBELib._ITreeCubeEvents_LayoutStartChangingEvent e)
{
}

void OnLayoutStartChanging(long   Operation)
{
}

void __fastcall LayoutStartChanging(TObject *Sender,Extreecubelib_tlb::LayoutChangingEnum   Operation)
{
}

procedure LayoutStartChanging(ASender: TObject; Operation : LayoutChangingEnum);
begin
end;

procedure LayoutStartChanging(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_LayoutStartChangingEvent);
begin
end;

begin event LayoutStartChanging(long  Operation)

end event LayoutStartChanging

Private Sub LayoutStartChanging(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_LayoutStartChangingEvent) Handles LayoutStartChanging
End Sub

Private Sub LayoutStartChanging(ByVal Operation As EXTREECUBELibCtl.LayoutChangingEnum)
End Sub

Private Sub LayoutStartChanging(ByVal Operation As Long)
End Sub

LPARAMETERS Operation

PROCEDURE OnLayoutStartChanging(oTreeCube,Operation)

RETURN

Syntax for LayoutStartChanging event, /COM version (others), on:

<SCRIPT EVENT="LayoutStartChanging(Operation)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function LayoutStartChanging(Operation)
End Function
</SCRIPT>

Procedure OnComLayoutStartChanging OLELayoutChangingEnum   llOperation
    Forward Send OnComLayoutStartChanging llOperation
End_Procedure

METHOD OCX_LayoutStartChanging(Operation) CLASS MainDialog
RETURN NIL

void onEvent_LayoutStartChanging(int   _Operation)
{
}

function LayoutStartChanging as v (Operation  as  OLE::Exontrol.TreeCube.1::LayoutChangingEnum)
end function

function nativeObject_LayoutStartChanging(Operation)
return


event MouseDown

event MouseDown (Button as Integer, Shift as Integer, X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS)
Occurs when the user presses a mouse button.

Type | Description
Button as Integer | Gets which mouse button was pressed as 1 for Left Mouse Button, 2 for Right Mouse Button and 4 for Middle Mouse Button.
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys.
X as OLE_XPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in container coordinates.
Y as OLE_YPOS_PIXELS | A single that specifies the current Y location of the mouse pointer. The y values is always expressed in container coordinates.
Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers. The FaceFromPoint property retrieves the face of the cube from the cursor.

Syntax for MouseDown event, /NET version, on:

private void MouseDownEvent(object sender,short   Button,short   Shift,int   X,int   Y)
{
}

Private Sub MouseDownEvent(ByVal sender As System.Object,ByVal Button As Short,ByVal Shift As Short,ByVal X As Integer,ByVal Y As Integer) Handles MouseDownEvent
End Sub

Syntax for MouseDown event, /COM version, on:

private void MouseDownEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_MouseDownEvent e)
{
}

void OnMouseDown(short   Button,short   Shift,long   X,long   Y)
{
}

void __fastcall MouseDown(TObject *Sender,short   Button,short   Shift,int   X,int   Y)
{
}

procedure MouseDown(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
end;

procedure MouseDownEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_MouseDownEvent);
begin
end;

begin event MouseDown(integer  Button,integer  Shift,long  X,long  Y)

end event MouseDown

Private Sub MouseDownEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_MouseDownEvent) Handles MouseDownEvent
End Sub

Private Sub MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)
End Sub

Private Sub MouseDown(ByVal Button As Integer,ByVal Shift As Integer,ByVal X As Long,ByVal Y As Long)
End Sub

LPARAMETERS Button,Shift,X,Y

PROCEDURE OnMouseDown(oTreeCube,Button,Shift,X,Y)

RETURN

Syntax for MouseDown event, /COM version (others), on:

<SCRIPT EVENT="MouseDown(Button,Shift,X,Y)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function MouseDown(Button,Shift,X,Y)
End Function
</SCRIPT>

Procedure OnComMouseDown Short   llButton Short   llShift OLE_XPOS_PIXELS   llX OLE_YPOS_PIXELS   llY
    Forward Send OnComMouseDown llButton llShift llX llY
End_Procedure

METHOD OCX_MouseDown(Button,Shift,X,Y) CLASS MainDialog
RETURN NIL

void onEvent_MouseDown(int   _Button,int   _Shift,int   _X,int   _Y)
{
}

function MouseDown as v (Button  as  N,Shift  as  N,X  as  OLE::Exontrol.TreeCube.1::OLE_XPOS_PIXELS,Y  as  OLE::Exontrol.TreeCube.1::OLE_YPOS_PIXELS)
end function

function nativeObject_MouseDown(Button,Shift,X,Y)
return


event MouseMove

event MouseMove (Button as Integer, Shift as Integer, X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS)
Occurs when the user moves the mouse.

Type | Description
Button as Integer | Gets which mouse button was pressed as 1 for Left Mouse Button, 2 for Right Mouse Button and 4 for Middle Mouse Button.
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys.
X as OLE_XPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in container coordinates.
Y as OLE_YPOS_PIXELS | A single that specifies the current Y location of the mouse pointer. The y values is always expressed in container coordinates.
The MouseMove event is generated continually as the mouse pointer moves across objects. Unless another object has captured the mouse, an object recognizes a MouseMove event whenever the mouse position is within its borders. The FaceFromPoint property retrieves the face of the cube from the cursor. The AnchorFromPoint property retrieves the identifier of the anchor from point. The CaptionFromPoint property retrieves the caption from the point, into a face of exFaceTree type. The ValueFromPoint property retrieves the value from the point, into a face of exFaceTree type. The ColumnFromPoint property retrieves the column from the point, into a face of exFaceTree type. The ItemFromPoint property retrieves the item from the point, into a face of exFaceTree type. The Value FromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type. The DateFromPoint property retrieves the date/value from the point, into a face of exFaceCalendar type.

Syntax for MouseMove event, /NET version, on:

private void MouseMoveEvent(object sender,short   Button,short   Shift,int   X,int   Y)
{
}

Private Sub MouseMoveEvent(ByVal sender As System.Object,ByVal Button As Short,ByVal Shift As Short,ByVal X As Integer,ByVal Y As Integer) Handles MouseMoveEvent
End Sub

Syntax for MouseMove event, /COM version, on:

private void MouseMoveEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_MouseMoveEvent e)
{
}

void OnMouseMove(short   Button,short   Shift,long   X,long   Y)
{
}

void __fastcall MouseMove(TObject *Sender,short   Button,short   Shift,int   X,int   Y)
{
}

procedure MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
end;

procedure MouseMoveEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_MouseMoveEvent);
begin
end;

begin event MouseMove(integer  Button,integer  Shift,long  X,long  Y)

end event MouseMove

Private Sub MouseMoveEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_MouseMoveEvent) Handles MouseMoveEvent
End Sub

Private Sub MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
End Sub

Private Sub MouseMove(ByVal Button As Integer,ByVal Shift As Integer,ByVal X As Long,ByVal Y As Long)
End Sub

LPARAMETERS Button,Shift,X,Y

PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)

RETURN

Syntax for MouseMove event, /COM version (others), on:

<SCRIPT EVENT="MouseMove(Button,Shift,X,Y)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function MouseMove(Button,Shift,X,Y)
End Function
</SCRIPT>

Procedure OnComMouseMove Short   llButton Short   llShift OLE_XPOS_PIXELS   llX OLE_YPOS_PIXELS   llY
    Forward Send OnComMouseMove llButton llShift llX llY
End_Procedure

METHOD OCX_MouseMove(Button,Shift,X,Y) CLASS MainDialog
RETURN NIL

void onEvent_MouseMove(int   _Button,int   _Shift,int   _X,int   _Y)
{
}

function MouseMove as v (Button  as  N,Shift  as  N,X  as  OLE::Exontrol.TreeCube.1::OLE_XPOS_PIXELS,Y  as  OLE::Exontrol.TreeCube.1::OLE_YPOS_PIXELS)
end function

function nativeObject_MouseMove(Button,Shift,X,Y)
return


event MouseUp

event MouseUp (Button as Integer, Shift as Integer, X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS)
Occurs when the user releases a mouse button.

Type | Description
Button as Integer | Gets which mouse button was pressed as 1 for Left Mouse Button, 2 for Right Mouse Button and 4 for Middle Mouse Button.
Shift as Integer | An integer that corresponds to the state of the SHIFT, CTRL, and ALT keys.
X as OLE_XPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in container coordinates.
Y as OLE_YPOS_PIXELS | A single that specifies the current Y location of the mouse pointer. The y values is always expressed in container coordinates.
Use a MouseDown or MouseUp event procedure to specify actions that will occur when a mouse button is pressed or released. Unlike the Click and DblClick events, MouseDown and MouseUp events lets you distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers. The FaceFromPoint property retrieves the face of the cube from the cursor.

Syntax for MouseUp event, /NET version, on:

private void MouseUpEvent(object sender,short   Button,short   Shift,int   X,int   Y)
{
}

Private Sub MouseUpEvent(ByVal sender As System.Object,ByVal Button As Short,ByVal Shift As Short,ByVal X As Integer,ByVal Y As Integer) Handles MouseUpEvent
End Sub

Syntax for MouseUp event, /COM version, on:

private void MouseUpEvent(object sender, AxEXTREECUBELib._ITreeCubeEvents_MouseUpEvent e)
{
}

void OnMouseUp(short   Button,short   Shift,long   X,long   Y)
{
}

void __fastcall MouseUp(TObject *Sender,short   Button,short   Shift,int   X,int   Y)
{
}

procedure MouseUp(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
end;

procedure MouseUpEvent(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_MouseUpEvent);
begin
end;

begin event MouseUp(integer  Button,integer  Shift,long  X,long  Y)

end event MouseUp

Private Sub MouseUpEvent(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_MouseUpEvent) Handles MouseUpEvent
End Sub

Private Sub MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single)
End Sub

Private Sub MouseUp(ByVal Button As Integer,ByVal Shift As Integer,ByVal X As Long,ByVal Y As Long)
End Sub

LPARAMETERS Button,Shift,X,Y

PROCEDURE OnMouseUp(oTreeCube,Button,Shift,X,Y)

RETURN

Syntax for MouseUp event, /COM version (others), on:

<SCRIPT EVENT="MouseUp(Button,Shift,X,Y)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function MouseUp(Button,Shift,X,Y)
End Function
</SCRIPT>

Procedure OnComMouseUp Short   llButton Short   llShift OLE_XPOS_PIXELS   llX OLE_YPOS_PIXELS   llY
    Forward Send OnComMouseUp llButton llShift llX llY
End_Procedure

METHOD OCX_MouseUp(Button,Shift,X,Y) CLASS MainDialog
RETURN NIL

void onEvent_MouseUp(int   _Button,int   _Shift,int   _X,int   _Y)
{
}

function MouseUp as v (Button  as  N,Shift  as  N,X  as  OLE::Exontrol.TreeCube.1::OLE_XPOS_PIXELS,Y  as  OLE::Exontrol.TreeCube.1::OLE_YPOS_PIXELS)
end function

function nativeObject_MouseUp(Button,Shift,X,Y)
return


event Move

event Move (RotateDir as RotateEnum, FromFace as FaceEnum, ToFace as FaceEnum)
Occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.

Type | Description
RotateDir as RotateEnum | A RotateEnum expression that specifies the direction the move occurred.
FromFace as FaceEnum | A FaceEnum expression that specifies the index of the face that the user drags from.
ToFace as FaceEnum | A FaceEnum expression that specifies the index of the face that the user drags to.
The control fires the Move event once a new face became visible, by moving/rotating from a face to another, into the giving direction. Use the EnsureVisibleFace method to bring a specified face in the front. The EnsureVisibleFaceOnDblClick ensures that the face being double clicked fits the cube's client area. The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.

The Zoom event notifies your application that the view is zoomed. The Rotate event occurs once the cube is rotated.

Syntax for Move event, /NET version, on:

private void Move(object sender,exontrol.EXTREECUBELib.RotateEnum   RotateDir,exontrol.EXTREECUBELib.FaceEnum   FromFace,exontrol.EXTREECUBELib.FaceEnum   ToFace)
{
}

Private Sub Move(ByVal sender As System.Object,ByVal RotateDir As exontrol.EXTREECUBELib.RotateEnum,ByVal FromFace As exontrol.EXTREECUBELib.FaceEnum,ByVal ToFace As exontrol.EXTREECUBELib.FaceEnum) Handles Move
End Sub

Syntax for Move event, /COM version, on:

private void Move(object sender, AxEXTREECUBELib._ITreeCubeEvents_MoveEvent e)
{
}

void OnMove(long   RotateDir,long   FromFace,long   ToFace)
{
}

void __fastcall Move(TObject *Sender,Extreecubelib_tlb::RotateEnum   RotateDir,Extreecubelib_tlb::FaceEnum   FromFace,Extreecubelib_tlb::FaceEnum   ToFace)
{
}

procedure Move(ASender: TObject; RotateDir : RotateEnum;FromFace : FaceEnum;ToFace : FaceEnum);
begin
end;

procedure Move(sender: System.Object; e: AxEXTREECUBELib._ITreeCubeEvents_MoveEvent);
begin
end;

begin event Move(long  RotateDir,long  FromFace,long  ToFace)

end event Move

Private Sub Move(ByVal sender As System.Object, ByVal e As AxEXTREECUBELib._ITreeCubeEvents_MoveEvent) Handles Move
End Sub

Private Sub Move(ByVal RotateDir As EXTREECUBELibCtl.RotateEnum,ByVal FromFace As EXTREECUBELibCtl.FaceEnum,ByVal ToFace As EXTREECUBELibCtl.FaceEnum)
End Sub

Private Sub Move(ByVal RotateDir As Long,ByVal FromFace As Long,ByVal ToFace As Long)
End Sub

LPARAMETERS RotateDir,FromFace,ToFace

PROCEDURE OnMove(oTreeCube,RotateDir,FromFace,ToFace)

RETURN

Syntax for Move event, /COM version (others), on:

<SCRIPT EVENT="Move(RotateDir,FromFace,ToFace)" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function Move(RotateDir,FromFace,ToFace)
End Function
</SCRIPT>

Procedure OnComMove OLERotateEnum   llRotateDir OLEFaceEnum   llFromFace OLEFaceEnum   llToFace
    Forward Send OnComMove llRotateDir llFromFace llToFace
End_Procedure

METHOD OCX_Move(RotateDir,FromFace,ToFace) CLASS MainDialog
RETURN NIL

void onEvent_Move(int   _RotateDir,int   _FromFace,int   _ToFace)
{
}

function Move as v (RotateDir  as  OLE::Exontrol.TreeCube.1::RotateEnum,FromFace  as  OLE::Exontrol.TreeCube.1::FaceEnum,ToFace  as  OLE::Exontrol.TreeCube.1::FaceEnum)
end function

function nativeObject_Move(RotateDir,FromFace,ToFace)
return


event RClick ()
Occurs once the user right clicks the control.

Type Description


event Rotate ()
Fired when the cube is rotated.

Type Description
The Rotate event notifies your application that the user rotates the cube. Use the Rotate method to programmatically rotate the cube. Use the AllowRotate property to specify the directions where the user can rotate the cube, by dragging. Use the RotX and RotY properties to specify the rotation angles. The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.

The control fires the Move event once a new face became visible. The Zoom event occurs once the cube is magnified.

Syntax for Rotate event, /NET version, on:

private void Rotate(object sender)
{
}

Private Sub Rotate(ByVal sender As System.Object) Handles Rotate
End Sub

Syntax for Rotate event, /COM version, on:

private void Rotate(object sender, EventArgs e)
{
}

void OnRotate()
{
}

void __fastcall Rotate(TObject *Sender)
{
}

procedure Rotate(ASender: TObject; );
begin
end;

procedure Rotate(sender: System.Object; e: System.EventArgs);
begin
end;

begin event Rotate()

end event Rotate

Private Sub Rotate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Rotate
End Sub

Private Sub Rotate()
End Sub

Private Sub Rotate()
End Sub

LPARAMETERS nop

PROCEDURE OnRotate(oTreeCube)

RETURN

Syntax for Rotate event, /COM version (others), on:

<SCRIPT EVENT="Rotate()" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function Rotate()
End Function
</SCRIPT>

Procedure OnComRotate
    Forward Send OnComRotate
End_Procedure

METHOD OCX_Rotate() CLASS MainDialog
RETURN NIL

void onEvent_Rotate()
{
}

function Rotate as v ()
end function

function nativeObject_Rotate()
return


event Zoom ()
Occurs when the view is magnified.

Type Description
The Zoom event notifies your application that the view is zoomed. Use the Zoom property to specify the zoom factor. Use the OnMouseWheel property to disable zooming the view while using the mouse wheel. The LayoutStartChanging event notifies your application once the user starts dragging the cube to a different position. The LayoutEndChanging event notifies your application once the user ends dragging the cube to a different position. During the LayoutStartChanging event you can call the CancelLayoutChanging to cancel the current operation.

The position of the cube is given by the following properties:

  • RotX, specifies the rotation angle in Radians along Ox axis.
  • RotY, specifies the rotation angle in Radians along Oy axis.
  • Zoom, zooms the view.

The control fires the Move event once a new face became visible. The Rotate event occurs once the cube is rotated.

Syntax for Zoom event, /NET version, on:

private void Zoom(object sender)
{
}

Private Sub Zoom(ByVal sender As System.Object) Handles Zoom
End Sub

Syntax for Zoom event, /COM version, on:

private void Zoom(object sender, EventArgs e)
{
}

void OnZoom()
{
}

void __fastcall Zoom(TObject *Sender)
{
}

procedure Zoom(ASender: TObject; );
begin
end;

procedure Zoom(sender: System.Object; e: System.EventArgs);
begin
end;

begin event Zoom()

end event Zoom

Private Sub Zoom(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Zoom
End Sub

Private Sub Zoom()
End Sub

Private Sub Zoom()
End Sub

LPARAMETERS nop

PROCEDURE OnZoom(oTreeCube)

RETURN

Syntax for Zoom event, /COM version (others), on:

<SCRIPT EVENT="Zoom()" LANGUAGE="JScript">
</SCRIPT>

<SCRIPT LANGUAGE="VBScript">
Function Zoom()
End Function
</SCRIPT>

Procedure OnComZoom
    Forward Send OnComZoom
End_Procedure

METHOD OCX_Zoom() CLASS MainDialog
RETURN NIL

void onEvent_Zoom()
{
}

function Zoom as v ()
end function

function nativeObject_Zoom()
return