Код ниже воспроизводится с Toolbar2000. Это часть процедуры, которая считывает позиции панели инструментов и состояния стыковки из файла INI. Я называю эту процедуру во время инициализации. Этот код ниже выполняет итерацию по всем компонентам в главной форме (OwnerComponent) и загружает настройки любых панелей инструментов, которые он находит.
for I := 0 to OwnerComponent.ComponentCount-1 do begin
ToolWindow := OwnerComponent.Components[I]; // <------------------------
....
Эта итерация занимает некоторое время (секунды - в форме 1500 с лишним компонентов), и в указанной точке я получаю ошибку диапазона. Я удостоверился, что один или несколько элементов сбрасываются из компонентов основной формы во время выполнения этого цикла, поэтому в конце концов цикл пытается получить доступ к одному за концом массива, как только это произошло (предположительно, было бы лучше закодировать это как цикл «вниз» для предотвращения этого).
В любом случае, мне нужно выяснить, где основная форма теряет компонент. Кто-нибудь может дать мне какие-либо советы по отладке Delphi 2006 о том, как это сделать? Я не ожидал, что в этой точке моей программы будут освобождены какие-либо основные компоненты формы.
UPDATE
Я обнаружил, что, когда я переставил стандартную позицию панели инструментов во время разработки, я случайно прикрепил ее к другой панели инструментов, а не к месту док-станции, на котором находилась другая панель инструментов. Я исправил проблему, удалив панель инструментов с панели инструментов. панель инструментов, в которую он был закреплен, и вместо этого добавил его в док. Таким образом, договоренность, которая вызвала проблему, была:
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
и исправление было устроить их так:
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
Это все еще указывает на ошибку в коде TB2k - можно было бы предположить, что он сможет обрабатывать вложенные панели инструментов.