Best Listbox Replacement?

What is the best Listbox Replacement that lets you do the most with a listbox like inserting images, variable row and column heights? I’d like to use the one you guys like best…

The only one that comes to mind is Einhugur StyleGrid. I’m not sure it’s Retina capable, though.

This is a tricky question. There’s a lot of possible responses depending on your requirements.

For four possible examples:

Einhugur’s Stylegrid probably fills your needs, but it’s so different from the default listbox that it may not be worth your time. Cross-platform too. 100% original work, I believe, not based on anything. It’s likely to be the most capable out there that doesn’t require you to code most of the functionality yourself.

@Karen Atkocius has a mergeable-cell listbox based off the Xojo one, so it’s 100% compatible and extends it quite a bit.

@jean-paul devulder’s - dtListbox is an implementation of the native Cocoa listview and as such works wonderfully on Mac but only on mac. Still limited and a bit unstable at the time.

@Brad Hutchings’s SSG-Listbox is a 100% Xojo listbox implementation.

@jim mckay’s piDogScrollingCanvas from has a pseudo-listbox implementation in its examples that is canvas-based (I think) and as such is able to do pretty much whatever you need but requires a lot of work.

There are more listbox replacements, but the above are a good cross-section of different philosophies in implementation. If you want a swiss-knife replacement then Einhugur’s is probably your best bet.

My website seems not to be working now.

If you want check my classes out, you can download a demo that will work (and you can code with) in the IDE (only), as well as the documentation here:

If interested contact me.

  • Karen

It’s not, and its going to be a while according to the Einhugur Plugins mailing list.

+1 for Karen’s mergeable listbox.

Sorry to be posting more on this…

But my website may be down for good… Verizon is getting rid of the free sites that came with their service. I thought it would be available until end of September but it looks like Verizon has taken that server off line.

To see an overview of what my listbox does and screen shots, without downloading the demo, you can use the Wayback machine:

  • Karen

Thanks for all the info! I’ll try out both…

Karen, you can host pages with dropbox… Maybe you could move your page to your dropbox account:

Karen, your website is up right now for me. You might want to download anything you need while you still can.

Thanks. I already had everything I needed from it.

Looks Like I will be OK there until September then. When it was not working the other day I feared they had pulled it earlier!

  • karen

So, I looked a many of the options… Thank you for all of the suggestions.

So far, I decided to go with an HTMLViewer. An html table can have variable row heights and I can embed images. I’ll just have to create special urls for ‘button’ clicks and intercept them using CancelLoad.

Here’s a Xojo-Style clone listbox that took 10 minutes to make using the SimDesignerCanvas (as well as other random custom controls in the picture) :slight_smile:

Hal, if you ever see this: I am coming from where you are going: HTML listbox. I have been doing this for 2-3 year years, after switching off the regular RB listbox in order to get additional formatting abilities and variable height. I am now looking to go the other way again, and hoping that XOJO’s new editabletextarea plus something to handle variable height will be what I need.

One point of warning, if you do cross-platform work, and anything is deployed inside a corporate environment: our company just switched to McAfee, and now it intercepts every single page load in the HTMLViewer. seriously slows down everything, in the case of our tool. Apparently it has it’s hooks right into IE. You can do webkit now in XOJO, but it’s probably only a matter of time before McAfee starts scanning webkit load events as well. And no, IT won’t change the McAfee config for us…

I’m going to check out Karen’s work…

Thanks Micah! That’s good to know.

I found RBCustomCells on github.

It looks like:

It’s beyond my skill level, but I wonder if it could be changed to include pictures? The variable height lines would still be a problem though…

I keep thinking about iOS development and how it uses html tables to achieve the same result using CSS to style it. That makes me think that using an html listbox isn’t so bad…

You could do that, but an alternative is to use JavaScript in such a way that no load event is ever created — you can have JavaScript set the window.status or window.title and that will trigger the HTMLViewer’s StatusChanged/TitleChanged event, where you can get the new status/title and take action that way. I do this all the time to send messages from the HTML page to my application code, and then send messages back to the HTML using ExecuteJavaScript. You can move tons of data this way. I’ve tested sending thousands of messages per second and megabytes of data back and forth, and it handles it fine, in the blink of an eye.

Karen’s mergeable listbox will do what you need it to according to your list. Several listboxes have the combine columns feature, but Karen’s combine rows make it much more flexible than others. I have used it on a few projects now and more than satisfied with it.


Rocky, thanks for that input. Always nice to hear others are using something with success.

Hal: if you do do the HTML tables, I second what Walter says: you can do the change title trick with javascript, and then detect on RB side easy-peasy. I think maybe XOJO added an actual way to get input directly from js, but since I already had mine working I never bothered to check it out.

The only other gotcha about the HTML viewer is that you have to use JS to detect and intercept keystrokes, particularly on windows. And if the user right-clicks, they can do weird stuff like print and save source, because the IE contextual menu comes through. There may be a way to shut that down, I didn’t bother because I kind of liked the cheap way to do printing.