GridControl - 1.0RC4 is now out


I am proud to present my new grid control (complete canvas based) class which can partly replace the standard xojo listbox.
It features most of the things the standard listbox have but currently is has no multiline selection and hierarchical mode.

key features:

  • optimized for speed (control based on sqlite db)
  • handles thousands of rows with ease owing to the cache logic
  • customizable header (incl. images)
  • header context menu
  • customizable cells
  • and may things more

I haven’t tested on all platforms (binary files for Mac only ATM). Mac should work fine but I
suspect graphical issues in win/linux. I am sorry for the lack of manuels/descriptions ect. but I’ve spent
all my time in getting this demo out.

Please comment and leave your feedback here!. Thank you.


I cant download it from here
drop box thinks it should show in some oriental set up (no idea why that is)
and when I click on either of the buttons (no idea what they say) it looks like it requires me to log in to drop box

change the link to

thought I tried that … maybe not

Hmm, don’t know what went wrong but the link Axel posted works. Can you edit the initial link ?


Made a couple of changes and pulled off settings to a separate window pane.
Please check out. Compiled version for Mac. I am going to release the encrypted binary project soon.

Changes 1.0RC 1:


  • smoother/faster header column resizing
  • speed up auto column resize (from header context menu)
  • many minor speed improvements
  • fixed bug: left mouse click in header and dragingg off no longer crashes
  • scrolling triggered by using up/down keys brings back focus
  • scrolling outside is not possible anymore while dragging a row
  • getAttributes now returns only a copy of the tableheader reference
  • fixed small graphical color bug in back ground (alternate)
  • default cell fill color is now : &cF9F9F9 (before: &cFFFFFF)
  • added mouse down feedback for controls (popupmenu, checkbox)
  • fixed mouse down/up precision
  • when reaching end or top of the table, the scrollers won’t keep invaliditating the view
  • clipboardPaste/clipboardCopy now passes a clipboard object
  • added clipboardPaste event
  • added shared method PictureFromData which returns a picture obj from a data string (EncodeBase64)
  • inserted rowValues (get/set) as a shortcut
  • inserted headerTitles (get/set) as a shortcut
  • added resizing event
  • added adjustColumnsWidth(col as integer) which sets the the column width to max string width found in the column

The focus ring is always cleared for drawing sensitive operations as there’s
a bug causing the paint() to slow down.[/code]

I am proud to release the RC2 including multi-selection and many other improvements and fixes.

Key features of the control:

  • customizable header with header pictures
  • made it for transparent use too
  • header context menu
  • columns can be set visible/unvisible without deleting (see picture)
  • fast drawing and resizing
  • fast column resizing
  • copy & paste from and to the control (data will be handle appropriate)
  • drag reorder
  • drag and drop
  • multi selection

I am not sure why there’s isn’t any feedback. Well, at least something I could work with. :slight_smile:
Please give me feedback what features you like to be included (especially productivity and feature
for professional use)

Screenshot taken from Demo Win 3 using multi selection and handling 10k rows:

[code]Changes 1.0RC 2:


  • optimized handling for larger tables
  • optimized drawing
  • headers flagged as not “shown=false” are displayed correctly; events fire with correct header column
  • cell() returns correct cell string
  • fixed minor graphical issue with header
  • fixed selected() function, now supporting multi selection
  • added multiline selection
  • added a new alternate style see enum “AlternateStyle” and revealed it in the settings pane of the demo
  • added new cell attribute: arcSizeSelection (int) (not recommened in for grid lines and alternate styles)
  • added new cell attribute: truncateCellText (default=true )
  • added column text alignment (center,left,right)
  • added cellPaint() event enabling user/custom driven drawing
  • getCellInfo(row,column) - returns detailed cell information (see structure “cellInfo”)
  • getCellInfoFromXY(x,y) - returns detailed cell information (see structure “cellInfo”)
  • added invalididateCell(row,column) to force redrawing of the cell (works like the listbox one)
  • implemented new demo showing the control handling 10k+ rows
  • implemented a new demo showing an iTunes (12.x) style menu
  • added new options in the settings pane where you can control the row height
  • applying setColumnType() on the same column again resets all columns values to zero
  • changed popupmenu design[/code]
(binary for Mac only-yet)

Great Job Rob!!!
Where can i get this?

[quote=206005:@Hans-Jürgen Müller]Great Job Rob!!!
Where can i get this?[/quote]

Thanks - I am currently reworking some underlying functions and will insert a column reorder with RC3.
What do mean with get? (download , purchase) ?

@Rob Egal
I would like to evaluate this and of course purchase it if i like the results.

[quote=206490:@Hans-Jürgen Müller]@Rob Egal
I would like to evaluate this and of course purchase it if i like the results.[/quote]

Then download the demo and check out. I haven’t released any project files yet as I am in RC state
and collecting general feedback. Once the RC state is over, I’ll be distributing project files too.

Why has the scrollbar (Demo Win 3) no function?

I am working on the implementation. The current “scrollbar” is just an indicator.

Looks very nice. Is drag-and-drop supported? Like dragging to Finder or dragging to another control? What about Retina?

Drag and drop is my list top and will be implemented. I think I’ll do it today. I am currently checking which behavoir is the best. I mean I actually want to combine drag reorder and drag to another control are pretty similar from the current code base. Not sure If I seperate them. My idea is to go from drag reorder which is vertical fixed to drag and drop if you move the mouse right or left out of the control…Retina should work too as I use OSX drawing but the checkbox is low-res at the moment.

[quote]Like dragging to Finder or dragging to another control? /quote]
Explain me a little more what is suppose to happen if you drop it to finder ?

Do you have a website that this will be hosted on yet? I don’t have a need for it now, but I tend to collect URL’s waiting for a project to present itself.

Yes, definitely get a landing page set up for this so I can get it posted to the doc site.

Yes, indeed I need a landing page but I have pile of work to do. It’s on my list :))
As soon as I leave RC state, I’ll try to get page and make the documentation (which will consume much time… :frowning: )

[code]Changes 1.0RC 3:


  • fixed coorditate calculation for control if columns are invisible
  • sorting dates now work for the respected format YYYY-MM-DD; no extra work need
  • fixed a bug when dropping a row outside of an valid index
  • added drag and drop support: It will work with drag reorder without inteferering (see demo project 7)
  • added dragRow(dragitem, row) event
  • added makeDragImage() that helps rendering the drag image (optional)
  • added returnSelectedRows() that returns an integer() of all selected rows helping to omitt frequent “selected( x )” queries
  • cell(,) now accepts variants of type (text, text(), string, string() ) which should help increase overall
    performance especially for linear column queries like cell(x, a), cell(x,b) and cell(x,c) and so on and works like the following:
    cell(-1, X) = Array() -> passed column X gets updated with the items
    cell(-1,-1) = string/text fills the table (see original Listbox)
    cell(X, -1) = Arrray() -> passed row X gets updated with the items
  • returned string from cell(,) works similar:
    cell(-1,X) - returns the content of column X seperated each by EndOfLine
    cell(-1,-) - returns the content of the table; columns seperated by vertical tab and by last column by endofline
    cell(X,-1) - return the content of row X seperated by vertical tabs and on the last column with endofline
  • invalididateCell(,) work like cell(,)
  • columnWidths() returns the TableHeader widths as integer()
  • moved GridControl.ColumnAligment and GridControl.ColumnTypes to TableHeader.ColumnTypes
  • added enumeration for SelectionType (Single/Multiple)
  • added custom focus ring / focus ring flag to bypass the focus ring bug under MacOSX
  • added blue line indicator for the target drags of drag reorder order events
  • added new demo project showing single/multi drag and drop
  • added rowCacheSize (default 500 rows ) to control the rows cached (for advanced users)

not yet. I have a lot of classes and stuff done but I setting up a website isn’t something I’ve done yet. :frowning: