================================= 10Tec iGrid ActiveX Control 2.x What's New in the Latest Builds ================================= ---------------------- v2.51, build 0516 February 6th, 2006 ---------------------- 1. This build of iGrid implements the IObjectSafety COM interface. This interface is used by many well-known programs to detect whether an ActiveX control is safe for scripting (among them are Internet Explorer, MS Word and Excel). For instance, MS Excel displays a warning box if the ActiveX control is not safety ("This application is about to initialize ActiveX controls that might be unsafe…"), and you should confirm in that box (i.e. press the OK button) that the control is safety and you are going to work with it. Now iGrid implements IObjectSafety with proper settings to avoid these annoying messages. 2. iGrid might hang if you pass improper parameter to its FillFromRS method (for instance, an ADODB.Fields collection instead of a real Recordset object). Fixed. 3. If you changed the vNewValue parameter in the BeforeCommitEdit event for a combo box cell, the cell accepted the new value but still displayed the text and/or icon from the originally selected combo box item. This bug is fixed in this build and now iGrid finds the appropriate combo box item by the new value if you changed it in this event (if it does not find such an item, the cell displayed empty while it contains the new value). ---------------------- v2.51, build 0512 December 15th, 2005 ---------------------- 1. Microsoft implemented the Data Execution Prevention technology (DEP) in the Service Pack 1 for Windows 2003. If you install this service pack with its default settings, DEP is on and in some cases a VB6 application that uses iGrid crashes on launch. We detected that this occurs if DEP is performed on the hardware level, i.e. the CPU supports special instructions for that (for instance, we saw it for AMD Athlon 64). We found what code in our control was classified as malicious code by DEP, and redesigned the control to avoid this issue. 2. iGrid might redraw its contents twice when you launch a form that contains it. It looked like it flickered when the form is displayed and and this effect is especially noticable on slow machines. This problem was fixed in this release. 3. You could not pass the zero values as the parameters into the SetCurCell method in the previous builds. Now you can remove the current cell with a statement like iGrid1.SetCurCell 0, 0. This call also scrolls the grid to its initial position (to the top and to the left) as if there were the cell in the zero row and zero column. 4. In some cases, iGrid might crash VB IDE and your compiled app if you double-clicked its text cells in order to edit them cell-by-cell (i.e. you did not finish the editing in one cell with ENTER or ESC and activated another text cell with double-click). Fixed. 5. Selected row text cells did not use the setting from the HighlightForeColorNoFocus property when the grid did not have input focus. Fixed. 6. The AutoHeightRow method did not work properly for group rows. Fixed. 7. When you changed the width of all the scroll bars in the system through the Display Properties Windows dialog, iGrid's scroll bars became "frozen" (i.e. you could not scroll the grid with them). Fixed. ---------------------- v2.51, build 0505 August 2nd, 2005 ---------------------- 1. The sorting of a column that contains many Null values works much faster now. 2. If you used no-clip cells, sometimes you might encounter the 'This array is fixed or temporarily locked' error. Fixed. 3. The FindSearchMatchRow method might work improperly after you had reordered the columns. Fixed. 4. The Sort method without parameters might work improperly when SortObject.ColCount equals 0. Fixed – no it simply does nothing. 5. The bug with the grid redrawing when you remove rows and the Redraw property equals False was fixed. 6. Sometimes the iGrid scroll bars did not appear when you had ImmediateColumnResizing=True. Fixed. 7. The LayoutSort property might not restore sorting numbers in column headers if you restored multi-column sorting. Fixed. 8. If you sorted the grid in row mode, it had its contents scrolled horizontally to make the current cell visible. It was not a good behavior as in most cases in row mode you do not deal with a singular cell, only with an entire row. Now the grid keeps the position of the horizontal scroll bar after sorting in row mode and scrolls its contents only vertically in this situation. 9. Now iGrid supports the number of rows to scroll settings from the MS IntelliMouse or a compatible device driver properly. 10. iGrid might 'forget' about selected rows in multi-selection and row mode after CTRL+DOWNARROW and those rows remained selected even if you clicked another row. Fixed. 11. The GetStartEndCell method might return incorrect values if you used it after AddRow while Redraw is False. Fixed. 12. The text of no-clip cells in row mode is now highlighted with the color of the selected text. In cell mode no-clip cells work like in the previous build (the selection color is not applied to them as the text of a no-clip cell may span several cells which may have their own background color or selection status). 13. You might encounter the 'Subscript out of Range' error if you used the same row keys for new rows after you decreased the total number of rows with the RowCount property. Fixed. 14. You might get an error when you try to assign a new value to the RowCount property or accessa cell with the CellXXXX properties after you removed all the columns with the RemoveCol method and added a new column with the AddCol method. Fixed. ---------------------- v2.51, build 0486 February 7th, 2005 ---------------------- 1. The previous build of iGrid introduced the support for the igTextNoClip flag which worked only with text box cells without icons. The current build adds some support for proper displaying of no-clip cells with icons. 2. You could encounter some resource leaking problems when you used a grid with combo boxes a lot. This issue was fixed in the recent build of iGrid. 3. In the previous build of iGrid when you issue FillFromRS, it sets the ColTag property of each column to the "[].[]" value corresponding the field displayed in a column. Since this build it is done only if you issue FillFromRS on the empty grid with no columns (in the previous build the column tags of the existing columns can be replaced). 4. The CombosObject.Remove method checks the type of its parameter and raises the "Invalid procedure call or argument" error if you pass not a Long or String value. 5. The DblClick event could pass an improper row and column indices in its parameters if the row you clicked was partially hidden. Fixed. 6. iGrid might fail if you issued AddCol after you had added some rows. Fixed. 7. The ColOrder property might work improperly if you have invisible columns. Fixed. 8. The value of a custom draw cell could be changed after the DblClick event. Fixed. 9. iGrid might not draw cells in the right part after you had changed the screen resolution. Fixed. ---------------------- v2.51, build 0472 September 29th, 2004 ---------------------- 1. You can use this build of iGrid in MS Access forms too. The special separate MS Access compatible build of iGrid existed before, but you no longer need to use it and it is no longer supported by us as this build can be used. You can use all features from the current build in MS Access except the ScrollBarThicknessChanged event. This event works properly in VB6 forms, but we do not guarantee that it works properly in other environments; for instance, it does not work in UserForms in VBA in MS Word and MS Excel too (the current implementation of this event relies on the grid's container, and due to this fact we do not guarantee the proper work of this event). For comparison, old MS Access compatible build does not allows you to use the WindowsThemeChanged and TextEditCustomContextMenu events. 2. The current build does not support and will not support in the future the control container feature because this feature does not allow MS Access to display the control in the list of available ActiveX controls (this can be applied for other control containers too). Due to this fact, if you used an external control to edit iGrid cells, you should place it on a form outside of iGrid and slightly change the code that positions it. The typical code that performs this task looks like the following: Combo1.Move _ lLeft * Screen.TwipsPerPixelX, _ lTop * Screen.TwipsPerPixelY, _ lWidth * Screen.TwipsPerPixelX You should change it to: Combo1.Move _ iGrid1.Left + (lLeft + 2) * Screen.TwipsPerPixelX, _ iGrid1.Top + (lTop + 2) * Screen.TwipsPerPixelY, _ lWidth * Screen.TwipsPerPixelX 3. The drop-down part of a combo list is moved leftward before it appears on the screen if its right edge will be displayed outside of the screen without this movement. The new X-coordinate of the left edge is recalculated in order to display the full contents of the drop-down part. If the width of the drop-down part exceeds the screen width, it is set to the width of the screen and the left edge of the drop-down part is displayed at the left edge of the screen. 4. The grid did not display properly its contents if it had a row text column and you removed any "normal" column before this row text column. Fixed. 5. The ColSortKey and ColSortOrder properties did not refresh the corresponding column header when you changed their values. Fixed. 6. You could not access the VScrollBar and HScrollBar object properties (iGrid GPF error is raised) after the width of scroll bars had been changed in the Windows Display Settings dialog. Fixed. 7. If you set the eTextEditOpt parameter to igTextEditNumberOnly for one column and igTextEditUpperCase for others, iGrid did not use properly these flags when you edited cells in these different columns. Fixed. 8. If you turned on using visual styles in the Windows Display Settings dialog and the previous setting was "Windows Classic style", iGrid did not redraw its header using visual styes until you reopen the form with iGrid. Fixed. 9. The previous build of iGrid might crash the application when you unload the form with iGrid if it was used with another control that subclasses the form. Fixed. 10. Generally VB6 saves the Font property of controls on a form in the corresponding FRM file only if its value differs from the Font property of the form. The previous builds of iGrid saved the Font property in the FRM file anyway, but from the current build Font is saved only if it differs from the Font property of the form that contains the grid. This feature allows us to use the grid with a standard font which has the charset set to the default system locale (in the previous builds the default charset from the developer's PC was saved with the grid and this could cause some problems in other locales). 11. Sometimes iGrid did not redraw group rows when you drag the scroll box on the horizontal scroll bar. Fixed. 12. In row mode iGrid might scroll its header horizontally when you pressed RIGHTARROW or LEFTARROW and the horizontal scroll bar was not present. Fixed. 13. The previous build of iGrid called the WinAPI SetErrorMode function in order to protect your VB6 application from crash if you use iGrid and Windows XP visual styles is turned on. There is another approach you can use in your app to enable visual styles, and it does not crash the program: Private Declare Sub InitCommonControls Lib "comctl32.dll" () Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _ ByVal lpLibFileName As String) As Long Private Declare Function FreeLibrary Lib "kernel32" ( _ ByVal hLibModule As Long) As Long Private m_hMod As Long Private Sub Form_Initialize() m_hMod = LoadLibrary("shell32.dll") InitCommonControls End Sub Private Sub Form_Unload(Cancel As Integer) FreeLibrary m_hMod End Sub You should use it even if you use UserControls but not only iGrid in order to terminate your program properly without the crash. Generally, if you call SetErrorMode, you can change the error mode of the entire process and some critical IO errors can be processed improperly. The current build of iGrid no longer uses SetErrorMode. 14. You need to use the Set keyword is you assign a reference to an object to the value of the RowTag or ColTag property. 15. Earlier iGrid interpreted the mnemonic-prefix character ampersand ("&") as a directive to underscore the character that follows in strings stored as cell values, and you were able to turn off this processing by specifying the igTextNoPrefix flag from ETExtFormatFlags enumeration. Since the current build of iGrid you no longer need to specify this flag; it has been removed and iGrid does not process the prefix character by default. To turn on this processing, you need to specify the new igTextProcessPrefix flag. iGrid combo boxes does not process the prefix character at all (you could see undescored letters near ampersands in the previous builds - fixed). 16. If you edited text in one column and then edited text in another wider column, iGrid might display the selected text in the second column shifted left. Fixed. 17. In Windows 98 iGrid displayed some artefacts from its scroll bars on its border if you started your application with iGrid without the vertical and horizontal scroll bar (no data). Fixed. 18. The igTextModifyString flag was removed from the ETextFormatFlags enumeration as it was used in iGrid internally and did not have any effect if it was used outside of the grid in your code. 19. If you issue the FillFromRS method, it sets the ColTag property of each column to the "[].[]" value corresponding the field displayed in this column (no matter iGrid has or does not have columns before you issue FillFromRS). These values allows you to know what real table and real field name stores the values of the corresponding field in the recordset used to populate the grid; it is useful to know if you implement data-bound grids which reflect user changes in the real database. Notice that these values are retrieved thru the corresponding OLE DB provider and cannot be accessed in some cases, but for all commonly used databases including MS Access and MS SQL Server you are able to use these values. 20. The igTextNoClip flag that did not work in the previous builds of iGrid, works since this version. If you specify this flag for a cell and the cell text does not fit its boundaries, it spans over adjacent cells like in MS Excel. By default iGrid cells use the left alignment and the text of a cell with igTextNoClip flag overlaps the cells to the right. If you combine the igTextNoClip flag with igTextRight, the text overlaps the cells to the left. You can even combine igTextNoClip with igTextCenter. In this case the text overlaps the cells to the right and it is displayed centered in these cells. You can add the igTextRight to the previous flag combination to span and center the text to the left of the current cell. In all cases the text overlaps the adjacent cells till the first non-empty cell and it is never displayed after the last visible column. 21. The default value of the MemMngWantFreeRows property is 100 (the previous default value was 0). 22. Column keys are case-insesitive since this version (while row keys are still case-sensitive). This fact especially ia very useful if you populate the grid using a recordset (with the FillFromRS method) and you need to access columns by field names. 23. If you select some cells in code in multiselection mode using the CellSelected property, interactive selection might work improperly. Fixed. 24. If you set the ImmediateColumnResizing to True, the vertical scroll bar worked incorrectly in Windows XP. Fixed. 25. The ComboObject class was supplemented with the ItemText property of the String data type. You are able to change the text of each combo item with this property. 26. The SetWidth method of the ComboObject class was replaced on the read/write Width property. Now you are able to read the current width of the drop-down part of iGrid combo box. 27. The vertical scroll bar in the drop-down part of iGrid combo box might be drawn with visual styles in Windows XP if the grid (and the entire app) does not use visual styles. Fixed. 28. The new error, "Attempt to add columns after the row text column.", is raised if you try to add columns after the last row text column (iGrid can be drawn incorrectly if you have additional columns after the row text column and get them visible). 29. If you press any key which can starts editing in the current cell, iGrid first checks whether this cell is visible and scroll its contents to get this cell visible if required. The previous builds did not do it and you might not see the current cell when you start to edit it (in the case you selected a cell and then scrolled the grid so this cell became hidden). 30. If the height of the text in iGrid cell is greater than the height of this cell, iGrid might use the text box with improper height to edit this cell when you edit it for the first time. Fixed. -------------------- v2.50, build 0420 May 5th, 2004 -------------------- 1. If you assign -1 to the ColMaxWidth property, it sets the column width to -1 too. Fixed. 2. Sometimes the part of the header under the vertical scrollbar is not redrawn if you issue the Clear method. Fixed. 3. iGrid uses the WinAPI DrawText function to output cell texts. If you use the igTextPathEllipsis format flag (the equivalent of the DT_PATH_ELLIPSIS flag for DrawText), Microsoft's implementation does not work properly in some cases - you may not see the last char. iGrid fixes this problem by its own implementation; it works only for single-line text i.e. if you specify both the igTextSingleLine and igTextPathEllipsis flags. If these flags are not specified, MS implementation is used. Notice that you can use other format flags with igTextSingleLine and igTextPathEllipsis which still allows you to output text on a single line (for instance, igTextRight). 4. If you use Windows XP visual styles in iGrid and the total width of columns equals the width of the grid, the column headers shift left when you click on iGrid cells. Fixed. 5. The ItemValue property of the ComboObject object works properly with object values. 6. The CellFromPoint method: reports "no cell" if the specified point belongs to the header or the vertical/horizontal scrollbar. Now works properly for all types of grouped cells. More over, it allows you to determine the corresponding row or column which could contain the specified point if the point belonged to the grid (more info - in iGrid help topic devoted to this method). 7. Some minor bugs in drawing of row text cells were fixed. Now the first column of row text (the RowTextStartCol property) can be greater than the first column in selection (see the bIncludeInSelect parameter of the AddCol method). 8. Row text cells can start not only at the first column. In this case all cells in the columns before the first column of row text are drawn using the total height of the row (but not only the height of normal cells like in some previous builds of iGrid): +-----------+-----------+---------------+-------------+-----------------+ | I +- +-+ |cell-2 | cell-3 | cell-4 | cell-5 | | I | | | |long long +---------------+-------------+-----------------+ | I +- +-+ |text | | | | | row text, row text, row text...... | | | | | +-----------+-----------+-----------------------------------------------+ 9. Group rows did not use the HighlightBackColorNoFocus color when the grid lost the focus. Fixed. 10. For ComboObject.Font the following properties could not be changed: Charset, Weight, Underline, Strikethrough. Fixed. 11. iGrid might redraw incorrectly combo button or check box control in a cell when you clicked the cell and iGrid needed to scroll its contents to fully display this cell in the grid contents area. Fixed. 12. The Sort method might display incorrectly in column headers the descending sort icon. Fixed. 13. Now you can use F1 in VB IDE code editor to display the corresponding help topic for the selected property/method/event of iGrid. 14. The descriptions for iGrid properties/methods/events were added. You can see them in VB Object Browser and Property Editor. 15. iGrid allows you to scroll its contents horizontally if you rotate the mouse wheel. If the horizontal scroll bar was not present, iGrid scrolled its header in this case. Fixed. 16. The internal algorithm that initializes combo box cells was optimized. Now iGrid with combo box cells can be populated much faster (thousandfold or even more). Internally iGrid searches for the corresponding combo list item when you change the vValue property of the column default cell and uses the found combo item index to initialize all combo box cells in this column. See also using the vValue property in the CellObject topic in iGrid help file. 17. If you change the eType property in the CellObject object, the vValue property is set to the default value for the cell of this type (the previous build did not do it). 18. When you draw your custom drawn cells in the CustomDrawCell event, iGrid sets the proper text color depending of the current state of iGrid (enabled/disabled, focused/not focused) before it fires this event. The previous builds drew only the cell background. 19. iGrid with a large amount of rows (100'000+) is scrolled much faster. The CellFromPoint method was optimized for huge grids too. 20. The AddCol method could shuffle column headers when you added an invisible column before visible ones. Fixed. 21. The ColWidthChanged event was fired with a wrong value of its lWidth parameter when the user double-clicked a column divider to automatically fit the width of the column. Fixed. 22. Rows in a grid with a large amount of rows (100'000+) can be selected in multiselection mode much faster than in the previous builds (the corresponding internal algorithms were optimized). 23. iGrid might redraw incorrectly the background of selected rows when it lost the focus and gained it again. Fixed. 24. iGrid no longer refers to MS ADO 2.5 Library, and its FillFromRS method accepts the parameter of the Object data type (ADODB.Recordset in the previous builds). This method uses late binding to work with the specified ADO recordset and can be used with any know version of ADO (the latest known version is 2.8). The method implementation was optimized and it works even slightly faster than its previous implementation. Your apps which use FillFromRS will work with this build of iGrid without any problems and you do not need to recompile them. 25. From this build you need to use the Set keyword in VB if you store an object value in iGrid cells (the CellValue property). This also concerns combo list items (the ItemValue property of ComboObject) and column default cells (the vValue property of CellObject). The corresponding changes in your apps are required. See also the Storing Objects in Cells topic in iGrid help file (the Programmer's Guide, Programming Basics chapter). 26. The previous builds of iGrid allowed you to start editing of text box cells if you set the eTextEditOpt parameter to igTextEditNumberOnly in the RequestEdit event and pressed a non-numeric key in this cell. Fixed. -------------------- v2.50, build 0357 January 22nd, 2004 -------------------- 1. The Sort method was enhanced - now sort icons and sort numbers in multicolumn sorting appear in column headers after you have sorted the grid with this method. -------------------- v2.50, build 0355 January 6th, 2004 -------------------- 1. You can display RTL text (Arabic or Hebrew) in previous builds of iGrid if you specify the igTextRTLReading flag. The current build of the control takes into account this flag when you editing cells too. In this case you can edit RTL strings according to this setting. 2. If you display a modal message box in the BeforeCommitEdit event and use igResEditProceed as the result of this event in MDI forms, iGrid loses focus. Fixed. 3. There was a minor problem with requesting the last row in virtual mode when the grid was populated at the first time. Fixed. -------------------- v2.50, build 0348 December 1st, 2003 -------------------- 1. If you store objects with the ToString() As String method, iGrid uses this method to get the text representation of the object displayed in a cell on the screen. The previous builds display empty strings for cells with objects. 2. An enhancement in iGrid behavior. If iGrid does not have the current cell and the user presses a cursor movement key, iGrid selects the first cell and/or moves the selection according to the pressed key (for the PAGEDOWN and END keys). The previous builds does not select any cells in this situation. 3. Another improvement: if the user set the width of a column to zero by dragging the column divider, iGrid jumps over the cells of the hidden column when you move the current selection with cursor movement keys (the previous builds enters these cells and thus the current selection may disappear). 3. The AutoHeightRow and Header.AutoHeight methods did not work properly in the ColWidthChanged event. Fixed. 4. A minor bug with row keys when you insert rows was fixed. 5. The FillFromRS method did not work properly if the user has changed column order (or after restoring column layout with LayoutCol). Fixed. 6. iGrid displayed the horizontal scroll bar even if there are up to 4 pixels of empty space to the right of the last column. Fixed. -------------------- v2.50, build 0341 October 13th, 2003 -------------------- 1. There were some problems with highlighting the current cell after you had removed the last row. Fixed. 2. If you changed column width so the horizontal scroll bar becomes visible, sometimes the last row is partially displayed after you have scrolled iGrid down. Fixed. ------------------- v2.50, build 0339 August 13th, 2003 ------------------- 1. This build introduces displaying Unicode text on Windows NT4/2000/XP and thus allows you to display texts on different languages simultaneously. iGrid does not still allow you to edit Unicode text from codepages which differ from the main locale code page selected in Control panel, but such languages as Chinese is supported in editing mode too. 2. The LayoutCol property has been improved. Now it implements enough smart algorithm which can process column layouts saved for grid with another set of columns. Notice that in this case restored column settings can be shifted because internally LayouCol associate column properties with its numeric index. In the case you publish the newest version of your app that contains a wider set of columns in a grid and you have added these columns to the end, the algorithm properly restores column layout from older versions and places the newest columns simply to the end. This allows you to publish new versions of your apps and don't worry about converting old column layouts to new ones. 3. The InitValue property failed for the igCellCustomDraw cell type. Fixed. 4. iGrid 2.5 allows you to store objects in cell values, but this new feature does not allow you to use a statement like iGridCtrl.CellValue(,) = rs!FieldName (1) to populate iGrid with data from ADO recordset because iGrid stores a reference to the ADODB.Field object in this case and you need to use the following syntax to do it: iGridCtrl.CellValue(,) = rs.Fields("FieldName").Value (2) The current build of iGrid improves the behaviour of the CellValue property so you can use the syntax (1) for ADODB.Fields objects; it recognizes internally an object of this type and uses its Value property instead of storing the reference to it. ------------------- v2.50, build 0333 August 13th, 2003 ------------------- 1. The FillFromRS method has been enhanced. If you populate an empty grid with an ADO recordset using this method, it creates checkbox cells to display Boolean fields and right aligns numeric values. 2. FillFromRS hangs your application if you specify non-initialized (Nothing) ADO recordset as its parameter. Fixed. ------------------- v2.50, build 0330 July 7th, 2003 ------------------- 1. One improvement has been done in incremental search. The current build starts incremental search when you press an alpha-numeric key even if no cells (or rows in row mode) are selected. In all previous builds you need to select a cell or row first. ------------------- v2.50, build 0329 June 23rd, 2003 ------------------- 1. iGrid did not draw properly background of rows in some cases after you had removed or hidden rows when the BackColorEvenRows and/or BackColorOddRows are set. Fixed. 2. One minor bug with setting row key to an empty string was fixed. 3. iGrid scroll bars failed when you add an iGrid control to a form dynamically using the following statement: Form1.Controls.Add("igrid250_75B4A91C.igrid", "igrid1") Fixed. 4. iGrid did not use the BackColorEvenRows or BackColorOddRows settings when the user is editing the textbox cell. Fixed. 5. iGrid no longer raises the ColWidthChanged event when you change column width using the ColWidth property. 6. The horizontal scroll bar sometimes flickers when you change column width in the ColWidthChanged event. Fixed. 7. Some enhancements concerning The ColMinWidth and ColMaxWidth properties: 7.A. If you set the ColWidth property to a value less than ColMinWidth, the minimum width of the column is used as the result column width (the same algorithm is used for the maximum width). The error with the code vbObjectError+520 "Column width cannot be less than its minimum width or greater than its maximum width" was fired in the previous build. 7.B. If you set the ColMinWidth property to a value greater than the current width of a column, the width of the column is changed to ColMinWidth (this also concerns ColMaxWidth). The vbObjectError+520 error was raised in the previous build. 7.C. If you define a column with the AddCol method and specify the column width less than its minimum width, the minimum width is used as the column width (as well for the maximum width). The vbObjectError+520 error was raised in the previous build. As you can see, iGrid no longer raises the error with the code vbObjectError+520. 8. If multiselection mode was turned on, you need to doubleclick at the combobox button to expand the drop-down list attached to a cell. Fixed. ------------------- v2.50, build 0315 May 31st, 2003 ------------------- The first official release of the version 2.5. See the "iGrid 2.5 - What's New.doc" file for the full list of new features. ------------------- v2.10, build 0098 ------------------- 1.Some improvements were implemented in virtual mode. First of all, you can use the PAGEDOWN key in this mode like in normal mode. If you press this key, iGrid requests for new rows accordingly to the size of page, i.e. the RequestRow event is fired several times depending of the amount of new rows which need to be displayed. The previous build requested only one row on PAGEDOWN. Secondly, the RequestRow event is raised in straight order for the first rows when the grid is displayed at the first time (the previous build could shuffle these events and generates them in reverse order). 2.The AutoHeightRow method has been enhanced for rows which contain row text. From the current build, iGrid calculates the height of normal (non row text) cells independently from the height of row text cell. This means that you can display multiline text in normal cells without cutting after you have issued the AutoHeightRow method for such rows. More over, iGrid stores the height of normal cells and row text cell for each row independently. The previous build used the value of the DefaultRowHeight property as the height of normal cells for each row and you could not be able to set this height for each row independently for the best sight. ------------------- v2.10, build 0092 ------------------- 1.iGrid has support for the mouse wheel now. Notice that in iGrid you can also use the CTRL key to scroll iGrid horizontally if you rotate the wheel that scrolls windows vertically. We have implemented it for users which have a mouse with a single wheel. 2.In some cases after a new column had been inserted after an existing column iGrid changed column width incorrectly when the user resizes the column interactively using the column header. Fixed. 3.iGrid used the value of the lMaxLength parameter of the RequestEdit event for each cells if you had changed its value at least once. Fixed. ------------------- v2.10, build 0078 ------------------- 1.From the current build, iGrid hides combo box buttons in combo box cells if you set the Editable property to False. 2.iGrid drawing code has been optimized. It uses WinAPI clip region functions for each cell now. This also means that you may not worry about drawing outside of a custom draw cell in the CustomDraw event. Now you can remove statements which restrict drawing only in the current cell bounds in this event. 3.iGrid incorrectly repainted its contents when the user scrolled the control and there was a window over the grid. Fixed. ------------------- v2.10, build 0053 ------------------- 1.Some enhancements were implemented in multi-selection mode. Now you can use the SHIFT, CTRL and SHIFT+CTRL combinations with cursor control keys and mouse to select multiple cells. The SHIFT key allows you to select rectangular cell areas (like in MS Excel and Windows Explorer) and the CTRL key allows you to add new cells to existing selection. The CTRL+SPACE keyboard combination is now used to toggle the selection of the current cell (or row in row mode). If you press cursor control keys holding down CTRL, iGrid moves the current cell to the desired position but doesn't select the newest current cell. 2.If you changed the RowMode property from True to False, iGrid didn't remove the selection from all selected cells except the current cell. Fixed. 3.The Clear method has been improved for the following purpose. If you have some columns in your grid and the user would like the horizontal scroll bar to never move when you remove rows, you can use the Clear method with the the bRemoveCol parameter equals False. When you issue this method in this manner, iGrid doesn't scroll the horizontal scroll bar to the leftmost position (the previous build resets the grid to the first column). 4.The LayoutSort property didn't allow you to restore sort icons when you use multi-column sorting if you set the MultiSortIcons property to True. Fixed. ------------------- v2.10, build 0040 ------------------- 1.The algorithm that displays combo lists has been improved. If you specify in the SetHeightInItems method of a combo a value that exceeds the maximum number of visible items that can be placed on the screen, iGrid automatically decreases the height of the combo list to place it entirely at the screen and shows the vertical scroll bar to allow the user to scroll the list to select any item. iGrid also displays such combo lists above or under the cell; it choose the area of the maximum height to display a combo list. This algorithm also takes into account a cell height (remember that each row of iGrid can have its own height), the cell position on the screen and calculates combo list position dynamically just before the combo list appears at the display. 2.The RemoveCol method confused column keys if columns had been reordered. Fixed. ------------------- v2.10, build 0032 ------------------- 1.The TextEditChange event was raised in some cases when the user puts a textbox cell into editing mode by double-click. Fixed. 2.Small optimization of the FindSearchMatchRow function has been done. 3.Some improvements in the cell text drawing code was made. Now you can place more rows in the same iGrid contents area and text in these rows has good readability. The default value for the DefaultRowHeight property was decreased to 15 pixels. 4.The code which implements column autoresizing adds additional 5 empty pixels to increase the readability of column text. It occurs when the user double-clicks a column header divider or you issue the AutoWidthCol method. 5.iGrid didn't draw extended gridlines when it starts if no rows are present. Fixed. 6.The AddRow method didn't generate the "Attempt to add rows with no columns" error. Fixed. ------------------- v2.10, build 0023 ------------------- 1.The following bug was fixed. When you select a cell different from the current cell in multiselect mode, iGrid doesn't redraw its contents. 2.Flicker-free improvements for extended gridlines were implemented. 3.Some improvements for large fonts support. 4.Improvement and bug fix: While the user is resizing a column, iGrid stops any redrawing of its contents and draws correctly column resizing line. It allows you to see column resizing line when iGrid is updated dynamically (for instance, using the Timer control). ------------------- v2.10, build 0016 ------------------- 1.Small improvement for combobox cells: when the user presses an alpha-numeric key, iGrid expands the dropdown list of a combobox cell and highlights the first item which text starts from the pressed character (if one exists). iGrid performs case-insensitive search in this case. 2.Fixed a small bug with the EnsureVisible method: if row mode is turned on, this method scrolled the grid only in the vertical direction to display the specified row but didn't display the specified column if it was not visible. ------------------- v2.10, build 0013 ------------------- Small non-critical bug improvements was done. Some improvements concern working with combobox cells through the CellCtrlKey and CellType properties. ------------------- v2.10, build 0009 ------------------- 1.The GridLinesExtend property has been added. It allows to draw gridlines outside of the "real" cells. This property can accept one of the following values: igGridLinesExtendNone - gridlines are drawn only for real cells; igGridLinesExtendRight - horizontal gridlines extend to the right edge of the grid; igGridLinesExtendDown - horizontal and vertical gridlines extend downward from the real cells; igGridLinesExtendBoth - both igGridLinesExtendRight and igGridLinesExtendDown simultaneously. If gridlines extend downward from the real cells, iGrid draws these gridlines for rows with the height stored in the DefaultRowHeight property. If you change the value of this property, these gridlines are drawn again according to the new value. 2.iGrid v2.10 introduces a new cell style - custom draw cells. Using this new cell type, igCellCustomDraw, you can draw cells on your own way. iGrid raises the new CustomDrawCell event for each custom draw cell when it needs to be drawn; you must place custom draw code in this event. You need to observe the following rules when you work with custom draw cells: 1) iGrid draws the background of the cell first, then it raises the CustomDrawCell event (in which you can draw the cell) and, at last, draws the focus rectangle and gridlines over the cell contents you have just drawn. This technique allows you to think only about the drawing of the contents of the cell - all of other functions (background, focus rectangle and gridlines drawing) are performed by iGrid. 2) When you are drawing a cell, you must not draw outside of the cell boundaries passed as the parameters of the CustomDrawCell event. 3) iGrid raises the CustomDrawCellGetSize event for each custom draw cell. You need to specify the cell height and width in its parameters. iGrid uses this information in the AutoWidthCol, AutoHeightRow and in some other methods. 4) If you change the CellValue property for a custom draw cell, iGrid raises the CustomDrawCell event for this cell. 3.The ColHeaderRightClick event has been renamed to HeaderRightClick because it is triggered when the user clicks anywhere in a grid header in contrast to the ColHeaderClick event which is only triggered if the user presses the column header using the left mouse button. The HeaderRightClick event has been supplemented by the Shift parameter which returns an integer that corresponds to the state of the SHIFT, CTRL, and ALT keys in the standard VB format (bit 0 for the SHIFT key, bit 1 for the CTRL key and bit 1 for the ALT key). The ColHeaderClick has been supplemented by new parameters and has the following syntax now: ColHeaderClick(ByVal lCol As Long, ByRef bDoDefault As Boolean, _ ByVal Shift As Integer, ByVal x As Long, ByVal y As Long) New parameters: bDoDefault - enables/disables default action (column sorting); Shift - returns the state of the SHIFT, CTRL, and ALT keys; x,y - return a number that specifies the current location of the mouse pointer. 4.The ShellSortObject object has been modified in the following way: 1) The ColCount property is accessible for writing. If you increase ShellSortObject columns amount, the newly created columns are initialized by its ordinal numbers, they also have the ascending sort order and the sort type "by value". Thus you can sort iGrid by the values from the first, second and third columns in ascending order using the following statements (if the SortObject property hasn't been populated yet): iGrid1.SortObject.ColCount = 3 iGrid1.Sort 2) The Clear method has been removed. You have to use the statement "SortObject.ColCount = 0" instead of it. 3) Some internal algorithms of ShellSortObject object have been optimized. At that, if you want to reference a non-existing column, an error is generated (this action in the previous version raises memory allocation for the new sort column and if the developer mistakenly reference a non-existing column, the error isn't raised). 5.The igSortNone member of the ESortOrders enumeration has been removed. The values of the igSortAsc and igSortDesc members have been decreased by 1. 6.The Sort method of iGrid has been supplemented by the optional parameter vCols of the Variant data type. This feature allows you to sort iGrid by several columns in one statement. For instance, if you want to sort a grid named iGrid1 by the second column, you can simply issue the following statement: iGrid1.Sort 2 If you want to sort the grid by the "Company" and "Total" columns, you can simply use the next statement: iGrid1.Sort Array("Company", "Total") 7.The current version of iGrid provides code-free multi-column sorting (but as ever you can change the default behaviour of the grid on your own manner). Clicking a column header sorts the column in the ascending order, with subsequent clicks toggling the sort. Clicking other columns while holding down the SHIFT, CTRL or ALT key will add those columns to the sort order as well. Our implementation of multi-column sorting allows you to use numerated sort icons which display the first order key, the second order key and so on. iGrid allows you to display different sort icons for different sort keys using the newly implemented MultiSortIcons property of the Boolean data type. It is used if you want to display enumerated sort icons which correspond to the sort keys order. If this property is set to False (the default value), iGrid displays sort icons with indices 0 and 1 from HeaderImageList for all sorted columns. If this property is set to True, iGrid displays sort icons with indices 2 and 3 for the first sort key, icons with indices 4 and 5 for the second sort key, and so on; at that if the grid has been sorted only by one column, iGrid displays in the column header icons with indices 0 and 1 which is replaced on the icons with indices 2 and 3 if the user adds another sort key. 8.The CommitEdit method has been implemented. It allows you to commit interactive editing programmatically. You can use this method while developing non-standard editing capabilities. For instance, you can commit user changes in a textbox cell when the user presses the F2 key in any textbox cell using the following code: Private Sub grdThis_TextEditKeyUp(ByVal lRow As Long, ByVal lCol As Long, _ ByVal KeyCode As Integer, ByVal Shift As Integer) If KeyCode = vbKeyF2 Then ' F2 tries to save edited text grdThis.CommitEdit End If End Sub The CommitEdit method, of course, raises the BeforeCommitEdit event and other editing related events. 9.This version of iGrid has been enhanced by a technology that allows iGrid automatically converts edited text in a textbox type cell to a value of the cell value data type. The previous version of iGrid (2.0) gives you the text string the user has entered in a textbox cell in the vNewValue parameter of the BeforeCommitEdit event and you should perform type coercion and error checking by yourself if the user edits non-string values in a textbox cell. According to this new technology, the BeforeCommitEdit event has been supplemented with the lConvErr parameter and iGrid has the new boolean SilentValidation property. If this property is set to False (the default value), an iGrid standard error message box occurs if iGrid can't coerce entered string to the cell value data type. If this property is set to True, iGrid doesn't display its standard error message box while conversion error occurs and you can display your own error message box. The lConvErr parameter of the BeforeCommitEdit event allows you to detect a conversion error. If the error has occurred, this parameter contains a non-zero value which is a standard VB error code ("Type mismatch" or "Overflow" in most cases). 10.If the user clicks a control outside of the grid while a textbox cell is editing, iGrid tries to commit changes and the BeforeCommitEdit event is triggered (the CancelEdit event was generated in the previous version). ------------------- v2.00, build 0149 ------------------- 1.One of our beta testers has found a bug that causes resource leak for GDI objects. This misdeed has been rectified. If you will find any such error, please, notify us about it by sending an e-mail to support@10Tec.com. P.S. How to detect a resource leak error. You can see the number of GDI objects your application uses if you turn on the "GDI objects" column in the Windows NT/2000/XP Task Manager. Note, that if you begin to open the same windows of your application several times, the number of GDI objects used by your application is grown up to the maximum value that is specific for your application. The number of GDI objects reaches this threshold after you have open all windows of your application one or two times. If you will find out that the number of GDI objects increases after you have opened and have closed windows 5-10 times, this is a resource leak. 2.Two small improvements have been made in the internal error trapping code of our component. The Remove method of the Combos collection can generate the iGrid error with the number &H80040202 ("Invalid procedure call or argument") if you attempt to remove non-existing element (in the previous build the standard VB error 5 was generated).