A few months ago, I posted a problem on the Foxite forum about a problem with FoxPro listboxes and ItemTips.
ItemTips, for those who weren't aware, is a property that when turned on, will show the entire item text when there isn't sufficient space in the width of a listbox.
The problem arises however if you are using two (or more) columns with the listbox and the total width of the list is sufficient but the first column doesn't.
Example
x = createobject("Form")
x.addobject("listbox","listbox")
x.listbox.columncount = 2
x.listbox.columnwidths = "125,50"
x.listbox.additem("This is my long item in my listbox")
x.listbox.additem("This is my longer item in my list")
x.listbox.additem("This is my short item")
x.listbox.visible = .t.
x.listbox.itemtips = .t.
x.listbox.width = 200
x.show()
If you move your mouse over the first item, you will see the tip.
If you move your mouse over the second item, you won't - because the actual text WOULD fit into the text box if you weren't using 2 columns.
Here's the BEFORE picture:
The only solution I had come up with was to pad the text of the items in the list with a bunch of spaces and then some final text, which looks completely bizarre.
Thanks to Rod Lewis of Data Developers - the solution was Found!
It all comes back to the super duper ability to Hide columns. Usually FoxPro developers are used to hiding a column that they want to use as a primary key field but don't want to show it. As in:
listbox.addItem("My company name")
listbox.list(1,2) = "XIFIDSIS"
listbox.columnwidths = "200,0"
listbox.boundcolumn = 2
But this time, think about reversing the logic! When adding the items to your list, add a column before anything else and make the width 0.
Using the previous example:
x = createobject("Form")
x.addobject("listbox","listbox")
x.listbox.columncount = 3
x.listbox.columnwidths = "0,125,50"
x.listbox.additem("This is my long item in my listbox")
x.listbox.additem("This is my longer item in my list")
x.listbox.additem("This is my short item")
x.listbox.list(1,2) = x.listbox.List(1,1)
x.listbox.list(2,2) = x.listbox.List(2,1)
x.listbox.list(3,2) = x.listbox.List(3,1)
x.listbox.visible = .t.
x.listbox.itemtips = .t.
x.listbox.width = 200
x.show()
Et voila!
The ItemTip will reference the very first column which isn't really hidden - but has a width of 0 so it is invisible.
Here's a picture showing the tip:
One gotcha here: it's a good idea to keep the first part of the hidden column the same as your visible column so users can still use the auto-search with the first few letters.
Foxite.COM Visual FoxPro Forum - www.foxite.com - The Home Of The Visual FoxPro Experts
ItemTips, for those who weren't aware, is a property that when turned on, will show the entire item text when there isn't sufficient space in the width of a listbox.
The problem arises however if you are using two (or more) columns with the listbox and the total width of the list is sufficient but the first column doesn't.
Example
x = createobject("Form")
x.addobject("listbox","listbox")
x.listbox.columncount = 2
x.listbox.columnwidths = "125,50"
x.listbox.additem("This is my long item in my listbox")
x.listbox.additem("This is my longer item in my list")
x.listbox.additem("This is my short item")
x.listbox.visible = .t.
x.listbox.itemtips = .t.
x.listbox.width = 200
x.show()
If you move your mouse over the first item, you will see the tip.
If you move your mouse over the second item, you won't - because the actual text WOULD fit into the text box if you weren't using 2 columns.
Here's the BEFORE picture:
The only solution I had come up with was to pad the text of the items in the list with a bunch of spaces and then some final text, which looks completely bizarre.
Thanks to Rod Lewis of Data Developers - the solution was Found!
It all comes back to the super duper ability to Hide columns. Usually FoxPro developers are used to hiding a column that they want to use as a primary key field but don't want to show it. As in:
listbox.addItem("My company name")
listbox.list(1,2) = "XIFIDSIS"
listbox.columnwidths = "200,0"
listbox.boundcolumn = 2
But this time, think about reversing the logic! When adding the items to your list, add a column before anything else and make the width 0.
Using the previous example:
x = createobject("Form")
x.addobject("listbox","listbox")
x.listbox.columncount = 3
x.listbox.columnwidths = "0,125,50"
x.listbox.additem("This is my long item in my listbox")
x.listbox.additem("This is my longer item in my list")
x.listbox.additem("This is my short item")
x.listbox.list(1,2) = x.listbox.List(1,1)
x.listbox.list(2,2) = x.listbox.List(2,1)
x.listbox.list(3,2) = x.listbox.List(3,1)
x.listbox.visible = .t.
x.listbox.itemtips = .t.
x.listbox.width = 200
x.show()
Et voila!
The ItemTip will reference the very first column which isn't really hidden - but has a width of 0 so it is invisible.
Here's a picture showing the tip:
One gotcha here: it's a good idea to keep the first part of the hidden column the same as your visible column so users can still use the auto-search with the first few letters.
Foxite.COM Visual FoxPro Forum - www.foxite.com - The Home Of The Visual FoxPro Experts
Comments
:-)
Peter
pac@cortiel.com
I just tried it in both VFP 9 and 8 without a problem.
Did you just copy and paste the code?