I have a TListBox on a form, and items are added with
listbox1.ItemIndex := listbox1.Items.AddObject('msg', TObject(grp));
grp
is an integer. The listbox is set to lbOwnerDrawFixed
.
In the onDrawItem
event I get the exception EStringListError
raised on the marked line:
msg := (control as Tlistbox).Items.Strings[index]; // this line works
grp := integer((control as Tlistbox).Items.Objects[index]); // exception here
msg
and grp
are local string and integer variables.
Project ### raised exception class EStringListError with message 'List index out of bounds (1)'
You just want to store an integer, so you should change your code to
No need for storing objects here and this makes the whole thing much easier and more readable.
The exception you get now is because you can't retrieve objects using the index, but have to use the string you associated them with (the first parameter of
AddObject
). The correct way would be something like this:Also see this tutorial about
AddObject
.Silly mistake: I was using
grp := -1
as the default group, whichAddObject
orObjects[index]
must not like.