Показать сообщение отдельно
  #9  
Старый 07.11.2008, 15:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Это - никуда.
При работе с ListBox (да и с любыл списком TStrings, TStringList, TList и т.д.) надо помнить следующие вещи:
1. Нумерация начинается с 0 и заканчивается Count-1
2. При обращении к элементам списка < 0 или > Count-1 ты получаешь эксепшн.
3. Если ты в цикле удаляешь элементы списка, то цикл должен быть for Count-1 DownTo 0.
4. При удалении элемента списка ассоциированный с ним объект (Objects[i]) сам не удаляется - его наду удалить руками. Исключение - TObjectList с установленным свойством OwnObjects (кажется так).

Скорее всего, у тебя автоматический переход на следующую запись. При конце прослушивания последней записи в списке ты переходишь на следующую, а ее просто нет. Соотв., получаешь ошибку. При переходе конролируй, что он происходит не за границы списка. Например:

Код:
procedure MyPlayList.PlayNext()
begin
  If List1.ItemIndex >= List1.Items.Count-1 
    Then PlayStop // Останавливаем воспроизведение
    Else List1.ItemIndex :=  List1.ItemIndex + 1; // Следующая запись
end;

Аналогично, для перехода назад, только проверяешь на 0.
Вместо остановки может быть и переход к первой/последней записи.
Ответить с цитированием