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 images, checkboxes, radiobuttons, more.
The source code is located at C:\Program Files (x86)\Softelvdm\SftBox OCX 5.0\Samples\Visual Studio - CSharp\Pictures\Form1.cs or C:\Program Files\Softelvdm\SftBox OCX 5.0\Samples\Visual Studio - CSharp\Pictures\Form1.cs (on 32-bit Windows versions).
private void Button1_Click(object sender, System.EventArgs e) { Application.Exit(); } private void CopyImageFromCurrentItem() { int ItemIndex; SftPictureObject Img; ItemIndex = axSftBox1.Items.Selection; if (ItemIndex < 0) return; // don't use images that are too large in the other areas Img = axSftBox1.get_Cell(ItemIndex, 0).Image; if (Img.ActualHeight <= 20 && Img.ActualWidth <= 20) { axSftBox1.RowColumnHeader.Image = Img; axSftBox1.get_Header(1).Image = Img; } else { axSftBox1.RowColumnHeader.Image.Clear(); axSftBox1.get_Header(1).Image.Clear(); } } private void ToggleImage(SftPictureObject Img) { switch (Img.Appearance) { case SftPictureImageConstants.sftImageCheckboxNo: Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes; break; case SftPictureImageConstants.sftImageCheckboxYes: Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo; break; case SftPictureImageConstants.sftImageCheckboxUnknown: Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo; break; case SftPictureImageConstants.sftImageCheckboxNoDisabled: Img.Appearance = SftPictureImageConstants.sftImageCheckboxYesDisabled; break; case SftPictureImageConstants.sftImageCheckboxYesDisabled: Img.Appearance = SftPictureImageConstants.sftImageCheckboxNoDisabled; break; case SftPictureImageConstants.sftImageCheckboxUnknownDisabled: Img.Appearance = SftPictureImageConstants.sftImageCheckboxNoDisabled; break; case SftPictureImageConstants.sftImageRadioButtonNo: Img.Appearance = SftPictureImageConstants.sftImageRadioButtonYes; break; case SftPictureImageConstants.sftImageRadioButtonYes: Img.Appearance = SftPictureImageConstants.sftImageRadioButtonNo; break; case SftPictureImageConstants.sftImageRadioButtonNoDisabled: Img.Appearance = SftPictureImageConstants.sftImageRadioButtonYesDisabled; break; case SftPictureImageConstants.sftImageRadioButtonYesDisabled: Img.Appearance = SftPictureImageConstants.sftImageRadioButtonNoDisabled; break; case SftPictureImageConstants.sftImageUp: Img.Appearance = SftPictureImageConstants.sftImageDown; break; case SftPictureImageConstants.sftImageUpDisabled: Img.Appearance = SftPictureImageConstants.sftImageDownDisabled; break; case SftPictureImageConstants.sftImageDown: Img.Appearance = SftPictureImageConstants.sftImageUp; break; case SftPictureImageConstants.sftImageDownDisabled: Img.Appearance = SftPictureImageConstants.sftImageUpDisabled; break; case SftPictureImageConstants.sftImageSortAsc: Img.Appearance = SftPictureImageConstants.sftImageSortDesc; break; case SftPictureImageConstants.sftImageSortAscDisabled: Img.Appearance = SftPictureImageConstants.sftImageSortDescDisabled; break; case SftPictureImageConstants.sftImageSortDesc: Img.Appearance = SftPictureImageConstants.sftImageSortAsc; break; case SftPictureImageConstants.sftImageSortDescDisabled: Img.Appearance = 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) { axSftBox1.get_Item(ItemIndex).Image = Img; axSftBox1.get_Item(ItemIndex).LabelImage = Img; axSftBox1.get_Item(ItemIndex).RowHeader.Image = Img; } } private void UpdateImages(int ItemIndex, System.Drawing.Image img, SftBoxHAlignConstants Align) { SftBoxCell C = axSftBox1.get_Cell(ItemIndex, 0); C.Image.NETImageObject = img; C.ImageHAlign = Align; PropagateImage(ItemIndex, C.Image); } private void UpdateImageList(int ItemIndex, ImageList ImageListControl, int i, SftBoxHAlignConstants Align) { SftBoxCell C = axSftBox1.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, SftBoxHAlignConstants Align) { SftBoxCell C = axSftBox1.get_Cell(ItemIndex, 0); C.Image.SetColorSample(OLECvt.ToOleColor(Clr), OLECvt.ToOleColor(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 = axSftBox1.Items.Add(Text); axSftBox1.get_Item(i).Level = 2; UpdateColor(i, Clr, SftBoxHAlignConstants.halignSftBoxRight); } private void UpdateBuiltinImage(int ItemIndex, SftPictureImageConstants Style, int wPix, int hPix, SftBoxHAlignConstants Align) { SftBoxCell C = axSftBox1.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 = axSftBox1.Items.Add(Text); axSftBox1.get_Item(i).Level = 2; UpdateBuiltinImage(i, Style, wPix, hPix, SftBoxHAlignConstants.halignSftBoxRight); } private void ShowSortDirection(bool Ascending) { if (Ascending) axSftBox1.get_Header(0).Image.Appearance = SftPictureImageConstants.sftImageSortAsc; else axSftBox1.get_Header(0).Image.Appearance = SftPictureImageConstants.sftImageSortDesc; m_SortDirection = Ascending; } private void SetSortDirection(bool NewDirection) { ShowSortDirection(NewDirection); if (NewDirection) axSftBox1.Items.Sort(-1, 0, SftBoxSortConstants.sortSftBoxAscending); else axSftBox1.Items.Sort(-1, 0, SftBoxSortConstants.sortSftBoxDescending); } private void Form1_Load(object sender, System.EventArgs e) { int ItemIndex = axSftBox1.Items.Add("Supported Picture Types"); axSftBox1.get_Cell(ItemIndex, 1).Text = "SftBox/OCX supports numerous image types, such as GDI+ images, bitmaps, icons, ImageLists and also offers numerous built-in images."; // add GDI+ samples ItemIndex = axSftBox1.Items.Add("GDI+ Images"); axSftBox1.get_Item(ItemIndex).Level = 1; axSftBox1.get_Cell(ItemIndex, 1).Text = "All GDI+ images are supported, like GIF, JPEG, Exif, PNG, TIFF and device-independent bitmaps (up to 64bpp) with semi-transparent and translucent areas."; int I = axSftBox1.Items.Add("PNG Sample with alpha-channel for translucent edges"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, picturePNG1.Image, SftBoxHAlignConstants.halignSftBoxRight); I = axSftBox1.Items.Add("Another PNG Sample with alpha-channel for translucent edges"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, picturePNG2.Image, SftBoxHAlignConstants.halignSftBoxRight); // add bitmap samples ItemIndex = axSftBox1.Items.Add("Bitmaps"); axSftBox1.get_Item(ItemIndex).Level = 1; axSftBox1.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)."; I = axSftBox1.Items.Add("Large Bitmap"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, PictureLogo.Image, SftBoxHAlignConstants.halignSftBoxRight); I = axSftBox1.Items.Add("Various bitmap sizes"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, PictureSmallBitmap.Image, SftBoxHAlignConstants.halignSftBoxRight); // add icon samples ItemIndex = axSftBox1.Items.Add("Icons"); axSftBox1.get_Item(ItemIndex).Level = 1; axSftBox1.get_Cell(ItemIndex, 1).Text = "The supported icons can be stardard size icons (32x32) or any other size supported by the operating system."; I = axSftBox1.Items.Add("Standard Icon (32x32)"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, PictureIcon.Image, SftBoxHAlignConstants.halignSftBoxRight); I = axSftBox1.Items.Add("Any other size"); axSftBox1.get_Item(I).Level = 2; UpdateImages(I, PictureIconSmall.Image, SftBoxHAlignConstants.halignSftBoxRight); // add imagelist samples ItemIndex = axSftBox1.Items.Add("ImageLists"); axSftBox1.get_Item(ItemIndex).Level = 1; axSftBox1.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 = axSftBox1.Items.Add("Image " + C.ToString()); axSftBox1.get_Item(I).Level = 2; UpdateImageList(I, imageList1, C, SftBoxHAlignConstants.halignSftBoxRight); } // add color samples ItemIndex = axSftBox1.Items.Add("Color Samples"); axSftBox1.get_Item(ItemIndex).Level = 1; axSftBox1.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 = axSftBox1.Items.Add("Predefined (Built-in) Pictures"); axSftBox1.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 = axSftBox1.Items.Add("Check Boxes - Honors Windows Themes"); axSftBox1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled, Selected Check Box", SftPictureImageConstants.sftImageCheckboxYes, 14, 14); AddBuiltinImage("Disabled, Selected Check Box", SftPictureImageConstants.sftImageCheckboxYesDisabled, 14, 14); AddBuiltinImage("Enabled Check Box", SftPictureImageConstants.sftImageCheckboxNo, 14, 14); AddBuiltinImage("Disabled Check Box", SftPictureImageConstants.sftImageCheckboxNoDisabled, 14, 14); AddBuiltinImage("Enabled, Unknown Check Box", SftPictureImageConstants.sftImageCheckboxUnknown, 14, 14); AddBuiltinImage("Disabled, Unknown Check Box", SftPictureImageConstants.sftImageCheckboxUnknownDisabled, 14, 14); ItemIndex = axSftBox1.Items.Add("Radio Buttons - Honors Windows Themes"); axSftBox1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled, Selected Radio Button", SftPictureImageConstants.sftImageRadioButtonYes, 14, 14); AddBuiltinImage("Disabled, Selected Radio Button", SftPictureImageConstants.sftImageRadioButtonYesDisabled, 14, 14); AddBuiltinImage("Enabled Radio Button", SftPictureImageConstants.sftImageRadioButtonNo, 14, 14); AddBuiltinImage("Disabled Radio Button", SftPictureImageConstants.sftImageRadioButtonNoDisabled, 14, 14); ItemIndex = axSftBox1.Items.Add("Up/Down Buttons - Honors Windows Themes"); axSftBox1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled Up Button", SftPictureImageConstants.sftImageUp, 14, 14); AddBuiltinImage("Disabled Up Button", SftPictureImageConstants.sftImageUpDisabled, 14, 14); AddBuiltinImage("Enabled Down Button", SftPictureImageConstants.sftImageDown, 14, 14); AddBuiltinImage("Disabled Down Button", SftPictureImageConstants.sftImageDownDisabled, 14, 14); ItemIndex = axSftBox1.Items.Add("Sort Direction Indicator"); axSftBox1.get_Item(ItemIndex).Level = 1; AddBuiltinImage("Enabled Ascending Indicator", SftPictureImageConstants.sftImageSortAsc, 8, 8); AddBuiltinImage("Disabled Ascending Indicator", SftPictureImageConstants.sftImageSortAscDisabled, 8, 8); AddBuiltinImage("Enabled Descending Indicator", SftPictureImageConstants.sftImageSortDesc, 8, 8); AddBuiltinImage("Disabled Descending Indicator", SftPictureImageConstants.sftImageSortDescDisabled, 8, 8); axSftBox1.RowHeaders.MakeOptimal(0); // make the row headers optimal axSftBox1.get_Column(0).MakeOptimal(0); // make the first column optimal axSftBox1.Items.RecalcHorizontalExtent(0); // update horizontal scroll bar axSftBox1.Items.Selection = 0; CopyImageFromCurrentItem(); } private void ExpandCollapseItem(int ItemIndex, short Shift) { SftBoxItem Item = axSftBox1.get_Item(ItemIndex); if (Item.Expanded) Item.Collapse(true); else Item.Expand(true, ((Shift & (short)SftBoxKeyConstants.constSftBoxCtrlMask))!=0 ? true : false); } private void axSftBox1_ItemClick(object sender, AxSftBoxLib50._ISftBoxEvents_ItemClickEvent e) { switch (e.areaType) { case SftBoxAreaConstants.areaSftBoxColumn: if (e.colNum == 0) SetSortDirection(!m_SortDirection); break; case SftBoxAreaConstants.areaSftBoxCellGraphic: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ToggleImage(axSftBox1.get_Cell(e.itemIndex, e.colNum).Image); break; case SftBoxAreaConstants.areaSftBoxItem: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ToggleImage(axSftBox1.get_Item(e.itemIndex).Image); break; case SftBoxAreaConstants.areaSftBoxLabel: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ToggleImage(axSftBox1.get_Item(e.itemIndex).LabelImage); break; case SftBoxAreaConstants.areaSftBoxButton: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ExpandCollapseItem(e.itemIndex, e.shift); break; } } private void axSftBox1_ItemDblClk(object sender, AxSftBoxLib50._ISftBoxEvents_ItemDblClkEvent e) { switch (e.areaType) { case SftBoxAreaConstants.areaSftBoxColumnRes: axSftBox1.get_Column(e.colNum).MakeOptimal(0); // Make column width optimal axSftBox1.Items.RecalcHorizontalExtent(0); // Update horizontal scroll bar break; case SftBoxAreaConstants.areaSftBoxColumn: if (e.colNum == 0) SetSortDirection(!m_SortDirection); break; case SftBoxAreaConstants.areaSftBoxCellGraphic: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ToggleImage(axSftBox1.get_Cell(e.itemIndex, e.colNum).Image); break; case SftBoxAreaConstants.areaSftBoxLabel: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ToggleImage(axSftBox1.get_Item(e.itemIndex).LabelImage); break; case SftBoxAreaConstants.areaSftBoxItem: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down if (axSftBox1.get_Item(e.itemIndex).Expandable) ExpandCollapseItem(e.itemIndex, e.shift); else ToggleImage(axSftBox1.get_Item(e.itemIndex).Image); break; case SftBoxAreaConstants.areaSftBoxButton: case SftBoxAreaConstants.areaSftBoxCell: if (e.part == SftBoxPortionConstants.partSftBoxDropDown) axSftBox1.DropDown.Suppress(); // Make sure we don't close the drop down ExpandCollapseItem(e.itemIndex, e.shift); break; } } private void axSftBox1_SelectionChange(object sender, System.EventArgs e) { CopyImageFromCurrentItem(); }