SeRvErKrAuCh: 9 лет это уже порядочно. Подозреваю, что материнка дурит. Но Вы пройдитесь по остальным пунктам. Вдруг чего-то выявится. Потом можете и тесты погонять, как Вам в соседнем ответе написали.
TheForgetDragon: У автора ролика совсем отсутствует проверка на все ли вопросы пользователь ответил. Попытавшись её добавить, Вы и столкнулись с этим ляпом в коде - обращением за пределы массива, если на вопрос не отвечено
TheForgetDragon: Кнопки поставлены как надо, а вот используете Вы их неправильно. Допустим человек на первый вопрос не отвечал, т. е. не выбрал ничего. В этом случае radiogroup1.itemIndex будет равен -1. А чему по Вашему будет равен в этом случае otv[1,radiogroup1.itemIndex]? Погоде на Марсе, наверное. Так что поменяйте логику приложения.
Допустим, Вы хотите заставить пользователя ответить на все вопросы. Тогда в начале этой процедуры проверьте - у всех ли радиогрупп ItemIndex >= 0. Если не у всех, то никаких баллов не считаем, а только сообщаем "Ответьте на все вопросы". Если у всех, то как сейчас производим суммирование баллов и вывод результата. Всё.
По крайней мере, работать будет.
Ну почти оно. А файлы "без закорючек" там есть? Не test1.~pas, а test1.pas. Не test1.~dfm, а test1.dfm?
С тильдой это предыдущая версия файла, не самая последняя.
TheForgetDragon: В таких маленьких работах обычно всё в одном каталоге живёт. А у Вас, судя по содержимому Project23.dpr, форма где-то за километр ..\Проектная работа МУЗЕЙ - копия.files\Test\test1.pas. И там же ещё test1.dfm должен быть. Вот это всё давайте сюда. Там все Ваши кнопочки и код.
TheForgetDragon: Я так думаю, что Вы радиогруппы настроили как-то не так. У вас исходно какой-то пункт в них выбран (точка стоит)? Или исходное состояние никакой пункт не выбран (точки нет вообще)? В первом случае у Вас все вопросы всегда "отвечены" и даже если пользователь ничего не менял, правильных по вашей табличке будет как раз 2, а проверка if (ball<1) or (ball>10) смысла не имеет.
Владимир Кай: Т.е. если записей 3 или 4, то у нескольких записей поле меняется, а у одной нет? Или у нескольких нет? А начиная с 5 поле всегда меняется у всех? Чудно. Попробуйте проанализировать, может эта запись чем-то особенная? Последняя добавленная, выделенная курсором, ещё чего-нибудь.
logpol32: Считается, что на эту опцию расходуется много ресурсов. Поэтому готовые программы с ней обычно не компилируют. В основном такие ошибки должны выявляться при разработке и тестировании, что собственно у Вас и происходит. Но главное, на это время не забыть её включить, чтобы не гадать, что же такое с программой происходит.
logpol32: Ну ошибку я по большому счёту даже угадал. Здесь просто больше и быть нечему. Сорри, но я просто забыл, что эта опция компилятора по умолчанию отключена, что и помешало Вам увидеть точную строку ошибки. Надо было про это раньше вспомнить. Включите в свойствах проекта в опциях компилятора Range checking = true. У меня не 7 дельфи, точно по пунктам меню не скажу, но оно там точно есть. Перекомпилируйте проект и отладчик при ошибке Вам покажет точную строку:
SERVICE_SETTINGS_TABLE[SERVICE_SETTINGS_TABLE_records_count, 1] := Text;
Ошибка где-то в алгоритме установки размера SERVICE_SETTINGS_TABLE, и не забудьте, что элементы с 0 считаются.
Разберитесь для начала с этим.
logpol32: Ух, я думал у Вас получится одну процедурку с ошибкой вырезать. Но пускай так. Не так уж там всего и много. Но я хотел бы не просто на код, а на ошибку посмотреть. Т.е. если можно файлики ещё дайте, которые там читаться должны, xml-ка, и экселевый. Тогда всё отладим. А так тяжко в уме-то это всё прокручивать - не вылез ли какой индекс за границу или ещё чего...
Allanian: Что происходит, теперь более-менее понятно. Проблема ещё в том, что используется несколько сторонних компонент, в частности для ком-порта. Как их правильно использовать - я не знаю. В функции Open_ini_file я вижу только присвоение номера порта, а не собственно подключение. Что в компоненте при этом происходит - кто ж его знает. Надо по коду или по инструкции смотреть. Свойство Connected у него в этот момент чему равно? Из приведённого текста это не понятно. Меняется оно в процедурах mig и mig_time.
Не имея этого компонента могу только делать предположения. Их два:
1) Какая-то ошибка в использовании компонента. Например, в дизайнтайме у него установлено свойство Connected = true и какой-то порт. Может перед присвоением порта надо Connected = false делать или ещё что. Но это всё только фантазии и догадки - надо описание компонента глядеть.
2) А это предположение из другой области. Если программа раньше работала, то возможно в ней и всё правильно. Но раньше она работала под какой-нибудь XP, а теперь Вы её запускаете под 7-8-10. И ей каких-нибудь прав не хватает. Попробуйте от администратора её запустить, вдруг поможет.
DarkByte2015: Если в диспетчере устройств он в каком-нибудь виде висит (неизвестное устройство или ещё как) - удалить. В списке Устройства и принтеры его не должно быть. В установке и удалении программ удалите ранее установленные драйвера.
DarkByte2015: Вот попробуйте, в том порядке, как я написал, всё проделать.
Отключить принтер, вычистить все его следы, запустить установку драйверов, принтер включать только когда попросит инсталлятор.