HugeGrid 1.0 Copyright 1991 Nelson Ford, PsL P.O.Box 35705 Houston, TX 77235-5705 LICENSE 1. You may freely use and distributed this code in applications in which this code makes up a small part of the program. 2. You may freely distribute this code to other VB programmers, including uploading it to BBS's or for a disk fee, as long as all related files are distributed together and without any changes. All I ask for the use of this code is that if you find a better way to do something than the methods I've used, I would appreciate your letting me know. REQUIREMENTS Visual Basic is required, of course, and HUGEARR.DLL and GRID.VBX. HUGEARR.DLL and GRID.VBX are not included with this set of files. They are available in separate archives on the MSLANG Forum's Data Libraries for downloading or you can get them on disk from PsL. (See the end of this file.) PURPOSE This is a sample application whose only purpose is to illustrate the coding needed to use a Huge Array in conjunction with a Grid Control. Even if you are using one but not the other, this sample code should come in handy. Getting everything to work right under all circumstances took about 30 hours or more of coding. INTRODUCTION The Huge Array DLL and the Grid Control VBX were produced by Microsoft and given to beta testers, but not included with Visual Basic when released. It appears that they are bug-free, but probably were not included because they are not very robust. For example, getting Text out of a Grid cell by having to change the Grid.Row and Grid.Col is a very inefficient way to do things, neither is having to access a Huge Array like you would a data file. Nevertheless, if you HAVE to have either an array larger than 64k (VB's usual limit) or a Grid control - you'll be glad that MS decided to release these to the public as freebies. HUGE ARRAY VS RANDOM DATA FILE As you will see, sorting a 5000-element Huge Array takes a lot of time - two minutes on a 386-33. I haven't had a chance yet to compare the performance of a Huge Array versus a random access data file. (Scrolling seems to go at a respectable clip.) It's possible that with a sufficiently large disk cache, a random access file would be as fast as the Huge Array and would have the advantage of being more secure as data is written to the disk when added or deleted. However, if your user is not using a large enough cache, then performance could be seriously degraded by using a random access disk file. Because getting data to and from a Huge Array is more like accessing a Random access data file than using an actual in-memory data array, it should be possible to use most of these same routines with a data file if you do decide to go that way. DOCUMENTATION HUGEARR.DLL - This file goes into some directory in your PATH. This file and the next one are not included in this set. See REQUIREMENTS. GRID.VBX - This file is loaded into your application via Alt-F-d "Add File". HUGEGRID.BAS - The Declares in the Global file come with the HugeArr.DLL. Print the documentation that comes with HugeArr.DLL for reference in using it. HUGEGRID.FRM - General DecrLastEl & IncrLastEl When you delete an entry, several pointers have to be adjusted. This Sub makes sure that wherever you need to decrease LastElement, everything else gets done too. IncrLastEl does the same for adding entries. General Sub FillGrid(StartPt, StopPt, StartRow) This routine gets data from the Array and puts it in the grid. StartPt and StopPt are the pointer numbers to start and stop with. StartRow says what row of the grid to start with. General Function GetEl(x) Gets the element of the Array that Pointer&(x) points to. You could format or otherwise manipulate the data at this point if needed. General ScrollUp & ScrollDown Lets you scroll selected rows in the Grid up or down. Given the kludgy way that data has to moved from one Grid cell to another, it may be just as quick to use the FillGrid routine to read the data in from the HugeArray again, and it would save all this code. Form Load: In setting up your grids, you may have to experiment (going back and forth between design and run-time) to find the desired column widths, since I haven't found any way to change them during design time. Most of the VScroll values shown can be set at design time. They are included here to make them easier to see. For ease of coming up with a lot of different text, numbers were used to fill the array. However, these ARE strings and when sorted, they are sorted as strings, not as numbers. (So you will see 1.1 10.1 100.1 ... 2.1 20.1, etc.) If you enter a number in the Text box and select Insert, it will be entered alphabetically, not numerically. You could easily change the code to treat the data as numbers rather than text simply by using VAL() everywhere that data variables are used. After loading up the array, the end of the array is displayed in the Grid. You could just as easily pick any other part of the array for the initial display, but don't forget to change Vscroll1.Value accordingly. (eg: If you display elements 1 - 10, set Vscroll1.Value to 10.) Form B_Sort This is a QuickSort algorithm, which is one of the fastest general sorting algorithm available. Although numeric data is used for ease of filling up an array with different data, the numbers are store as strings and will be sorted in string order. (eg: 10 100 1000 before 20) Form B_Del Deletes an array element. To save time, the element is not actually removed from the array. An array (Deleted&) is set up for keeping track of deleted entries and reusing that space on subsequent Adds. Form B_Find Does a binary search. Form B_Insert This is an alphabetic insert. It calls B_Find and then inserts the new data. This took a lot of time to work out the special cases, such as inserting a number at the beginning or end of the file. Form B_Quit Be sure to quit the demo by clicking on Quit. This frees up memory for Windows that was used by the Huge Array. WHERE TO GET VB STUFF This program was written by Nelson Ford, PsL. You can find a lot of routines, sample programs, custom controls, and DLL's on Microsoft's MSLANG forum on CompuServe. My company, Public (software) Library, also distributes a lot of VB goodies and programs. Call or write for a free copy of our monthly magazine and catalog: Public (software) Library P.O.Box 35705 Houston, TX 77235-5705 Orders: 800-242-4PsL Tech Support: 713-524-6394 FAX: 713-524-6398 CIS: 71355,470