Та проблема, которую пытался разобрать отсюда: http://freepascal.ru/forum/viewtopic.ph ... 26#p111891
Проблема начинается с версий
FPC>=3.0.2 Lazarus>=1.6.4
На FPC 3.0.0 и lazarus 1.6.2 всё в порядке.
Прошу помочь как это изложить на буржуйском:
tema писал(а):zub писал(а):попытка обращения к несозданому TStrings
Именно так.
Я поставил writelnы в нескольких местах в lcl .inc связаных с лукапом. Так вот, когда он перебирает лукапкомбобоксы после Cancel он имена полей получает позже, чем данные каким-то образом. Т.е. в объекте имя указывается одно а данные от следующего имени. Т.е. у него до момента падения распечатываются так:
имя лукапа 1, а данные из лукапкомбобокса 2
имя лукапа 2, а данные из лукапкомбобокса 3
.....
имя лукапа N, а данные из лукапкомбобокса N+1, которого не существует и ссылка ушла на обычный TEdit который существует, поэтому не nil, но у которого просто нету свойства Count
Причём, при загрузке формы он тоже перечисляет, но правильно. Там всё совпадает. Это начинается только при Cancel.
Волшебство, описанное выше, оказалось в следующем.
Когда я удалил на этой форме обычный комбобокс, который даже не DB, а простой у меня на форме один есть и создал его в последнюю очередь, то при перечислении:
имя лукапа N, а данные из обычного комбобокса
Ничего после этого не падает, но это какой-то зверский глюк. Я не нашёл где идёт опережение получения данных.
Тут: http://freepascal.ru/forum/viewtopic.ph ... 15#p112120 всё печатается как надо без опережения.
Могу предположить, что если я удалил бы на форме и пересоздал ВСЕ комбобоксы заново, то ошибка бы тоже ушла, но это было бы как раз волшебство компилятора и/или лазаруса при переходе с версии на версию.