SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample illustrates using a SftTree/OCX control.
The source code is located at C:\Program Files (x86)\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - CSharp\PreviewSftTree\Form1.cs or C:\Program Files\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - CSharp\PreviewSftTree\Form1.cs (on 32-bit Windows versions).
private void menuExit_Click(object sender, System.EventArgs e) { Application.Exit(); } private void CopyImageFromCurrentItem() { int ItemIndex; SftPictureObject Img; ItemIndex = axSftTree1.Items.Current; if (ItemIndex < 0) return; // don't use images that are too large in the other areas Img = axSftTree1.get_Cell(ItemIndex, 0).Image; if (Img.ActualHeight <= 20 && Img.ActualWidth <= 20) { axSftTree1.RowColumnHeader.Image = Img; axSftTree1.get_Header(1).Image = Img; } else { axSftTree1.RowColumnHeader.Image.Clear(); axSftTree1.get_Header(1).Image.Clear(); } } private void ToggleImage(SftPictureObject Img) { switch (Img.Appearance) { case SftPictureImageConstants.sftImageCheckboxNo: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxYes; break; case SftPictureImageConstants.sftImageCheckboxYes: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNo; break; case SftPictureImageConstants.sftImageCheckboxUnknown: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNo; break; case SftPictureImageConstants.sftImageCheckboxNoDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxYesDisabled; break; case SftPictureImageConstants.sftImageCheckboxYesDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNoDisabled; break; case SftPictureImageConstants.sftImageCheckboxUnknownDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNoDisabled; break; case SftPictureImageConstants.sftImageRadioButtonNo: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonYes; break; case SftPictureImageConstants.sftImageRadioButtonYes: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonNo; break; case SftPictureImageConstants.sftImageRadioButtonNoDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonYesDisabled; break; case SftPictureImageConstants.sftImageRadioButtonYesDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonNoDisabled; break; case SftPictureImageConstants.sftImageUp: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageDown; break; case SftPictureImageConstants.sftImageUpDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageDownDisabled; break; case SftPictureImageConstants.sftImageDown: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageUp; break; case SftPictureImageConstants.sftImageDownDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageUpDisabled; break; case SftPictureImageConstants.sftImageSortAsc: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageSortDesc; break; case SftPictureImageConstants.sftImageSortAscDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageSortDescDisabled; break; case SftPictureImageConstants.sftImageSortDesc: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageSortAsc; break; case SftPictureImageConstants.sftImageSortDescDisabled: Img.Appearance = SftTreeLib65.SftPictureImageConstants.sftImageSortAscDisabled; break; } } private void PropagateImage(int ItemIndex, SftPictureObject Img) { // don't use images that are too large in the other areas if (Img.ActualHeight <= 20 && Img.ActualWidth < 20) { axSftTree1.get_Item(ItemIndex).Image = Img; axSftTree1.get_Item(ItemIndex).LabelImage = Img; axSftTree1.get_Item(ItemIndex).RowHeader.Image = Img; } } private void UpdatePictures(int ItemIndex, stdole.IPictureDisp IPic, SftTreeHAlignConstants Align) { SftTreeCell C = axSftTree1.get_Cell(ItemIndex, 0); C.Image.Picture = IPic; C.ImageHAlign = Align; PropagateImage(ItemIndex, C.Image); } private void UpdateImageList(int ItemIndex, ImageList ImageListControl, int i, SftTreeHAlignConstants Align) { SftTreeCell C = axSftTree1.get_Cell(ItemIndex, 0); C.Image.SetImageListH((int) ImageListControl.Handle, (short) i); C.ImageHAlign = Align; PropagateImage(ItemIndex, C.Image); } private void UpdateColor(int ItemIndex, System.Drawing.Color Clr, SftTreeHAlignConstants Align) { SftTreeCell C = axSftTree1.get_Cell(ItemIndex, 0); C.Image.SetColorSample((uint) ColorTranslator.ToOle(Clr), (uint) ColorTranslator.ToOle(Color.Black)); C.Image.Width = 12; C.Image.Height = 12; C.ImageHAlign = Align; PropagateImage(ItemIndex, C.Image); } private void AddColor(string Text, Color Clr) { int i; i = axSftTree1.Items.Add(Text); axSftTree1.get_Item(i).Level = 2; UpdateColor(i, Clr, SftTreeHAlignConstants.halignSftTreeRight); } private void UpdateBuiltinImage(int ItemIndex, SftPictureImageConstants Style, int wPix, int hPix, SftTreeHAlignConstants Align) { SftTreeCell C = axSftTree1.get_Cell(ItemIndex, 0); C.Image.Appearance = Style; C.Image.Width = wPix; C.Image.Height = hPix; C.ImageHAlign = Align; PropagateImage(ItemIndex, C.Image); } private void AddBuiltinImage(string Text, SftPictureImageConstants Style, int wPix, int hPix) { int i = axSftTree1.Items.Add(Text); axSftTree1.get_Item(i).Level = 2; UpdateBuiltinImage(i, Style, wPix, hPix, SftTreeHAlignConstants.halignSftTreeRight); } private void ShowSortDirection(bool Ascending) { if (Ascending) axSftTree1.get_Header(0).Image.Appearance = SftPictureImageConstants.sftImageSortAsc; else axSftTree1.get_Header(0).Image.Appearance = SftPictureImageConstants.sftImageSortDesc; m_SortDirection = Ascending; } private void SetSortDirection(bool NewDirection) { ShowSortDirection(NewDirection); if (NewDirection) axSftTree1.Items.SortDependents(-1, 0, SftTreeSortTypeConstants.sortSftTreeAscending); else axSftTree1.Items.SortDependents(-1, 0, SftTreeSortTypeConstants.sortSftTreeDescending); } private void Form1_Load(object sender, System.EventArgs e) { axSftPrintPreview1.Dock = DockStyle.Fill; axSftTree1.Dock = DockStyle.Fill; axSftTree1.BulkUpdate = true; for (int counter = 0 ; counter < 10 ; ++counter) { int ItemIndex = axSftTree1.Items.Add("Supported Picture Types"); axSftTree1.get_Cell(ItemIndex, 1).Text = "SftTree/OCX supports numerous image types, such as bitmaps, icons, ImageLists and also offers numerous built-in images."; // add bitmap samples ItemIndex = axSftTree1.Items.Add("Bitmaps"); axSftTree1.get_Item(ItemIndex).Level = 1; axSftTree1.get_Cell(ItemIndex, 1).Text = "Bitmaps can be of varying sizes and also support Bitmap Transparency, which allows the background to show through the image (in areas selected by the bitmap designer)."; int I = axSftTree1.Items.Add("Large Bitmap"); axSftTree1.get_Item(I).Level = 2; UpdatePictures(I, OLECvt.ToIPictureDisp(PictureLogo.Image), SftTreeHAlignConstants.halignSftTreeRight); I = axSftTree1.Items.Add("Various bitmap sizes"); axSftTree1.get_Item(I).Level = 2; UpdatePictures(I, OLECvt.ToIPictureDisp(PictureSmallBitmap.Image), SftTreeHAlignConstants.halignSftTreeRight); // add icon samples ItemIndex = axSftTree1.Items.Add("Icons"); axSftTree1.get_Item(ItemIndex).Level = 1; axSftTree1.get_Cell(ItemIndex, 1).Text = "The supported icons can be stardard size icons (32x32) or any other size supported by the operating system."; I = axSftTree1.Items.Add("Standard Icon (32x32)"); axSftTree1.get_Item(I).Level = 2; UpdatePictures(I, OLECvt.ToIPictureDisp(PictureIcon.Image), SftTreeHAlignConstants.halignSftTreeRight); I = axSftTree1.Items.Add("Any other size"); axSftTree1.get_Item(I).Level = 2; UpdatePictures(I, OLECvt.ToIPictureDisp(PictureIconSmall.Image), SftTreeHAlignConstants.halignSftTreeRight); // add imagelist samples ItemIndex = axSftTree1.Items.Add("ImageLists"); axSftTree1.get_Item(ItemIndex).Level = 1; axSftTree1.get_Cell(ItemIndex, 1).Text = "Complete ImageList support simplifies bitmap handling and can avoid the limited resource availability on earlier Windows versions."; for (int C = 0 ; C < imageList1.Images.Count ; ++C) { I = axSftTree1.Items.Add("Image " + C.ToString()); axSftTree1.get_Item(I).Level = 2; UpdateImageList(I, imageList1, C, SftTreeHAlignConstants.halignSftTreeRight); } // add color samples ItemIndex = axSftTree1.Items.Add("Color Samples"); axSftTree1.get_Item(ItemIndex).Level = 1; axSftTree1.get_Cell(ItemIndex, 1).Text = "Using the built-in color sample image, simple color selection can easily be implemented. Color samples can display all colors available."; AddColor("Black", System.Drawing.Color.Black); AddColor("Blue", System.Drawing.Color.Blue); AddColor("Cyan", System.Drawing.Color.Cyan); AddColor("Green", System.Drawing.Color.Lime); AddColor("Magenta", System.Drawing.Color.Magenta); AddColor("Red", System.Drawing.Color.Red); AddColor("White", System.Drawing.Color.White); AddColor("Yellow", System.Drawing.Color.Yellow); AddColor("3DDKSHADOW - Dark shadow for 3D elements", System.Drawing.SystemColors.ControlDarkDark); AddColor("3DFACE - Face color for 3D elements", System.Drawing.SystemColors.Control); AddColor("3DHILIGHT - Edges facing the light source", System.Drawing.SystemColors.ControlLightLight); AddColor("3DLIGHT - Edges facing the light source", System.Drawing.SystemColors.ControlLight); AddColor("3DSHADOW - Edges facing away from the light source", System.Drawing.SystemColors.ControlDark); AddColor("INFOBK - Background color for tooltip controls", System.Drawing.SystemColors.Info); AddColor("INFOTEXT - Text color for tooltip controls", System.Drawing.SystemColors.InfoText); AddColor("MENUTEXT - Text in menus", System.Drawing.SystemColors.MenuText); AddColor("ACTIVEBORDER - Active window border", System.Drawing.SystemColors.ActiveBorder); AddColor("ACTIVECAPTION - Active window caption", System.Drawing.SystemColors.ActiveCaption); AddColor("APPWORKSPACE - Background color MDI applications", System.Drawing.SystemColors.AppWorkspace); AddColor("BACKGROUND - Desktop", System.Drawing.SystemColors.Desktop); AddColor("BTNFACE - Face shading on push buttons", System.Drawing.SystemColors.Control); AddColor("BTNHILIGHT - Highlight color for buttons", System.Drawing.SystemColors.ControlLightLight); AddColor("BTNSHADOW - Edge shading on push buttons", System.Drawing.SystemColors.ControlDark); AddColor("BTNTEXT - Text on push buttons", System.Drawing.SystemColors.ControlText); AddColor("CAPTIONTEXT - Text in caption", System.Drawing.SystemColors.ActiveCaptionText); AddColor("GRAYTEXT - Grayed (disabled); text", System.Drawing.SystemColors.GrayText); AddColor("HIGHLIGHT - Selected Item(s)", System.Drawing.SystemColors.Highlight); AddColor("HIGHLIGHTTEXT - Text of selected item(s)", System.Drawing.SystemColors.HighlightText); AddColor("INACTIVEBORDER - Inactive window border", System.Drawing.SystemColors.InactiveBorder); AddColor("INACTIVECAPTION - Inactive window caption", System.Drawing.SystemColors.InactiveCaption); AddColor("INACTIVECAPTIONTEXT - Inactive caption text color", System.Drawing.SystemColors.InactiveCaptionText); AddColor("MENU - Menu background", System.Drawing.SystemColors.Menu); AddColor("SCROLLBAR - Scroll bar gray area", System.Drawing.SystemColors.ScrollBar); AddColor("WINDOW - Window background", System.Drawing.SystemColors.Window); AddColor("WINDOWFRAME - Window frame", System.Drawing.SystemColors.WindowFrame); AddColor("WINDOWTEXT - Text in windows", System.Drawing.SystemColors.WindowText); // add predefined image samples ItemIndex = axSftTree1.Items.Add("Predefined (Built-in) Pictures"); axSftTree1.get_Cell(ItemIndex, 1).Text = "Predefined images are available for commonly used items, such as check boxes, radio buttons, sort direction indicators and more..."; ItemIndex = axSftTree1.Items.Add("Check Boxes - Honors Windows Themes"); axSftTree1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled, Selected Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxYes, 14, 14); AddBuiltinImage("Disabled, Selected Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxYesDisabled, 14, 14); AddBuiltinImage("Enabled Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNo, 14, 14); AddBuiltinImage("Disabled Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxNoDisabled, 14, 14); AddBuiltinImage("Enabled, Unknown Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxUnknown, 14, 14); AddBuiltinImage("Disabled, Unknown Check Box", SftTreeLib65.SftPictureImageConstants.sftImageCheckboxUnknownDisabled, 14, 14); ItemIndex = axSftTree1.Items.Add("Radio Buttons - Honors Windows Themes"); axSftTree1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled, Selected Radio Button", SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonYes, 14, 14); AddBuiltinImage("Disabled, Selected Radio Button", SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonYesDisabled, 14, 14); AddBuiltinImage("Enabled Radio Button", SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonNo, 14, 14); AddBuiltinImage("Disabled Radio Button", SftTreeLib65.SftPictureImageConstants.sftImageRadioButtonNoDisabled, 14, 14); ItemIndex = axSftTree1.Items.Add("Up/Down Buttons - Honors Windows Themes"); axSftTree1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled Up Button", SftTreeLib65.SftPictureImageConstants.sftImageUp, 14, 14); AddBuiltinImage("Disabled Up Button", SftTreeLib65.SftPictureImageConstants.sftImageUpDisabled, 14, 14); AddBuiltinImage("Enabled Down Button", SftTreeLib65.SftPictureImageConstants.sftImageDown, 14, 14); AddBuiltinImage("Disabled Down Button", SftTreeLib65.SftPictureImageConstants.sftImageDownDisabled, 14, 14); ItemIndex = axSftTree1.Items.Add("Sort Direction Indicator"); axSftTree1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled Ascending Indicator", SftTreeLib65.SftPictureImageConstants.sftImageSortAsc, 8, 8); AddBuiltinImage("Disabled Ascending Indicator", SftTreeLib65.SftPictureImageConstants.sftImageSortAscDisabled, 8, 8); AddBuiltinImage("Enabled Descending Indicator", SftTreeLib65.SftPictureImageConstants.sftImageSortDesc, 8, 8); AddBuiltinImage("Disabled Descending Indicator", SftTreeLib65.SftPictureImageConstants.sftImageSortDescDisabled, 8, 8); } axSftTree1.BulkUpdate = false; axSftTree1.RowHeaders.MakeOptimal(); // make the row headers optimal axSftTree1.get_Column(0).MakeOptimal(); // make the first column optimal axSftTree1.Items.RecalcHorizontalExtent(); // update horizontal scroll bar axSftTree1.get_Item(0).Selected = true; axSftTree1.Items.Current = 0; CopyImageFromCurrentItem(); // Connect the tree control to the print preview control axSftPrintPreview1.ContentProvider = axSftTree1.hWnd; } private void axSftTree1_ItemClick(object sender, AxSftTreeLib65._DSftTreeEvents_ItemClickEvent e) { SftTreeAreaTypeConstants areaType = (SftTreeAreaTypeConstants) e.areaType; if (areaType == SftTreeAreaTypeConstants.constSftTreeExpandAll) axSftTree1.get_Item(e.itemIndex).Expand(true, true); else if (areaType == SftTreeAreaTypeConstants.constSftTreeColumn && e.colIndex == 0) SetSortDirection(!m_SortDirection); else if (areaType == SftTreeAreaTypeConstants.constSftTreeCellGraphic) ToggleImage(axSftTree1.get_Cell(e.itemIndex, e.colIndex).Image); else if (areaType == SftTreeAreaTypeConstants.constSftTreeItem) ToggleImage(axSftTree1.get_Item(e.itemIndex).Image); else if (areaType == SftTreeAreaTypeConstants.constSftTreeLabel) ToggleImage(axSftTree1.get_Item(e.itemIndex).LabelImage); } private void axSftTree1_ItemDblClick(object sender, AxSftTreeLib65._DSftTreeEvents_ItemDblClickEvent e) { SftTreeAreaTypeConstants areaType = (SftTreeAreaTypeConstants) e.areaType; if (areaType == SftTreeAreaTypeConstants.constSftTreeColumnRes) { axSftTree1.get_Column(e.colIndex).MakeOptimal(); // Make column width optimal axSftTree1.Items.RecalcHorizontalExtent(); // Update horizontal scroll bar } else if (areaType == SftTreeAreaTypeConstants.constSftTreeColumn && e.colIndex == 0) SetSortDirection(!m_SortDirection); else if (areaType == SftTreeAreaTypeConstants.constSftTreeCellGraphic) ToggleImage(axSftTree1.get_Cell(e.itemIndex, e.colIndex).Image); } private void axSftTree1_SelectionChange(object sender, System.EventArgs e) { CopyImageFromCurrentItem(); } private void menuViewSftTree_Click(object sender, System.EventArgs e) { // Show the tree control axSftTree1.Visible = true; axSftTree1.Enabled = true; axSftTree1.Focus(); axSftTree1.Width = this.Width; axSftTree1.Height = this.Height; // Disable & hide the print preview control axSftPrintPreview1.Visible = false; axSftPrintPreview1.Enabled = false; } private void menuPrintPreview_Click(object sender, System.EventArgs e) { // Disable & hide the tree control axSftTree1.Visible = false; axSftTree1.Enabled = false; // Show the print preview control axSftPrintPreview1.Enabled = true; axSftPrintPreview1.Visible = true; axSftPrintPreview1.Focus(); axSftPrintPreview1.Width = this.Width; axSftPrintPreview1.Height = this.Height; // In case the tree control changed, we have to reformat everything axSftPrintPreview1.Restart(SftPrintPreviewRestartConstants.restartSftPrintPreviewComplete); } private void axSftPrintPreview1_PageSetupWanted(object sender, System.EventArgs e) { axSftPrintPreview1.PageSetup(0); } private void axSftPrintPreview1_HelpWanted(object sender, AxSftPrintPreviewLib10._ISftPrintPreviewEvents_HelpWantedEvent e) { MessageBox.Show("Sorry, this sample doesn't offer a help file"); } private void axSftPrintPreview1_CloseWanted(object sender, System.EventArgs e) { menuViewSftTree_Click(this, new System.EventArgs()); }