Вы просто хотите сохранить целое число, поэтому вы должны изменить свой код на
listbox1.ItemIndex := listbox1.Items.Add(IntToStr(grp));
[...]
grp := StrToInt((control as TListBox).Items[index]);
Нет необходимости хранить здесь объекты, и это делает все это намного проще и удобочитаемее.
Исключение, которое вы получаете сейчас, заключается в том, что вы не можете получить объекты с помощью индекса, но должны использовать строку, с которой вы их связали (первый параметр AddObject
).Правильный путь будет выглядеть примерно так:
msg := (control as Tlistbox).Items.Strings[index];
grp := integer((control as Tlistbox).Items.Objects[(control as Tlistbox).Items.IndexOf(msg)]);
Также смотрите этот учебник о AddObject
.