argument out of range delphi

Добрый день друзья. Использую данный метод в своей игре:

Он генерирует слово, разбивает на символы, в случайном порядке их расставляет. Здесь переменная Word определена, в итоге и переменная Hint и Path приходит с кнопки, события OnClick.
Первый раз, при запуске сцены, метод отрабатывает хорошо, без ошибок.

После того, как слово отгадано, я обнуляю все переменные другим методом

В итоге жму на кнопку с уже другими переменными Word, Hint, Path и вываливается ошибка:

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index

Не могу понять, в чём проблема и почему так происходит. Первые строчки точно отрабатывают нормально, так как меняется Path.

Подскажите пожалуйста, что не так делаю, всю голову сломал. Спасибо огромное заранее!

I’m using a TListBox in Firemonkey, and I’m facing a strange issue when it comes to dynamically showing/hiding items. This includes both Delphi XE7 and XE8. The setup, there is a TPopupBox at the top of the form, where user chooses one of the items listed. Depending on which was chosen, the TListBox should show only certain TListBoxItem s, and hide the rest. Part of this consists of resizing each list item height to 0 when not visible (otherwise it would leave an ugly gap between the items).

The problem is that very randomly and spontaneously (no pattern), selecting an item in this TPopupBox (calling OnChange which modifies visibility), produces an EArgumentOutOfRangeException at an unknown point. The code breaks in System.Generics.Collections.TListHelper.SetItemN() on the first line calling CheckItemRangeInline(AIndex); Within there, it’s simply:

The exception continues to be raised over and over and over again with no end (starts with 4 in a row). When I use the debugger to step in, I can never manage to get it to happen.

There are a couple common procedures used here which control item visibility:

Then, when choosing something in the TPopupBox :

(The full procedure is just a lot of the exact same types of calls, too much to post here)

  1. Nowhere am I adding or removing items — only changing visibility
  2. There are no events triggered which might be causing some faulty loop
  3. The TPopupBox is located outside of the TListBox
  4. Each TListBoxItem has one or two controls (yet it doesn’t matter which ones are being shown/hidden)
  5. Selecting an item in this TPopupBox may work one time, yet fail the next
  6. Sometimes it occurs the first time I show/hide these items, sometimes it takes 20-30 tries
  7. Never able to reproduce while stepping through in Debug

Why would I be receiving this exception, and how do I fix it?

Давно не было статей об исправлении ошибок, и вот настало время. Разбираться мы будем с ошибкой out of range на мониторе. Поговорим том, что это такое, о причинах возникновения и методах исправления этой ошибки.

Ошибка out of range

Out of range (рус. вне диапазона) – это ошибка указывающая на то, что сигнал получаемый от видеокарты не входит в рабочий диапазон сигналов монитора.

Причины ошибки out of range на мониторе

Существует несколько причин возникновения такой ошибки:

  • Изменение частоты обновления экрана на не поддерживаемую монитором.
  • Изменения разрешения экрана на не поддерживаемое монитором.
  • Проблемы с драйверами видеокарты или монитора.
  • Ошибки в работе видеокарты или монитора.

Самые распространенные причины ошибки out of range – первые две, когда монитор не поддерживает разрешение экрана или частоту установленную видеокартой. Такое часто бывает со старым мониторами, или при ручном изменении частоты экрана. Реже выявляются ошибки с драйверами.

Как исправить ошибку out of range

Вот мы и подошли к самой главной части этой статьи, к решению проблемы с out of range на мониторе. Существует несколько возможных способов исправить эту ошибку. Начнем, пожалуй, сразу с самого действенного.

Как убрать out of range – второй монитор

Да это один из почти 100% методов исправления ошибки out of range, если драйвера не при чем, но не у всех есть возможность им воспользоваться, так как нужен второй монитор или телевизор.

1. Подключаете компьютер к другому монитору или домашнему телевизору.

2. Меняете частоту обновления и разрешение экрана на низкие значения, точно поддерживаемые вашим основным монитором.

3. Подключаете компьютер к первому монитору и проверяете. Если всё в порядке, меняете значения частоты и разрешения экрана на поддерживаемые вашим монитором.

Решение ошибки out of range через безопасный режим

Второй способ это использование безопасного режима Windows.

1. Перезагрузите компьютер в безопасном режиме.

2. Измените частоту и разрешение экрана на поддерживаемые вашим монитором.

3. Перезагрузите компьютер, чтобы проверить решило ли это вашу проблему.

Совет: если изменение параметров не сохраняется при загрузке в обычном режиме, заходите в безопасный режим через «режим VGA» («Базовое видео» в Windows 10).

Out of range из-за проблем с драйверами

Другая причина появления ошибки out of range/вне диапазона, это проблемы с драйверами. И если предыдущие способы не помогают, мы рекомендуем переустановить драйвера видеокарты и монитора.

1. Загрузите компьютер в безопасном режиме.

2. Откройте Диспетчер устройств (нажмите Win+Pause, и в левой верхней части окна выберите нужную нам утилиту).

3. В Диспетчере устройств разверните разделы «Видеоадаптеры» и «Мониторы», затем удалите каждое из устройств находящееся в этих разделах. Это можно сделать, выделив устройство и нажав клавишу Delete или кликнув правой кнопкой мыши и выбрав «Удалить».

4. Далее перезагрузите компьютер и позвольте Windows переустановить драйвера для этих устройств, или установите их вручную.

Out of range из-за неисправности оборудования

Бывает и такое, что оборудование ломается или работает неправильно. Один из способов проверить, что вызывает ошибку, монитор или видеокарта, это подключение вашего монитора к другому компьютеру и подключение вашего компьютера к другому монитору.

Пример из жизни

Напоследок вот вам пример из жизни, который и натолкнул нас на написание этой статьи. К нам обратился пользователь Александр с таким сообщением:

«Задал слишком высокую частоту обновления экрана, в результате чего при запуске Виндовс пишет out of range.

Прочитал что надо в безопасном режиме удалить драйвер видеокарты, так и сделал, все запустилось, но после того как я снова устанавливаю драйвер, снова пишет out of range. Как теперь быть?»

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

Оцените статью