Текущий архив: 2004.09.05;
Скачать: CL | DM;
Вниз
Проблема с фиксингом глобальных ссылок при десериализации формы Найти похожие ветки
← →
far © (2004-08-21 13:17) [0]Доброе утро, уважаемые.
Никто не в курсе, почему при чтении формы из бинарного потока, программа на Delphi не фиксит ссылки на глобальные объекты в свойствах компонентов так, как это делается при чтении формы из *.dfm?
Насколько я грешный смог разобраться, при чтении из *.dfm, если компонент имеет ссылки на глобальные объекты, то метод Loaded для него вызывается уже после выполнения GlobalFixupReferences. При чтении из потока этого почему-то не происходит... :(
← →
@Ujin (2004-08-21 13:20) [1]А каким образом Вы читаете форму?
← →
far © (2004-08-21 13:25) [2]Спасибо за ответ.
AForm.DestroyComponents;
stm := TFileStream.Create("D:\!\1.txt", fmOpenRead);
stm.ReadComponent(AForm);
← →
@Ujin (2004-08-21 13:32) [3]Таким образом у Вас ничего не выйдет. Т.к. при записи в поток типа stm.WriteComponent(AForm) ссылка сохраняется, но при последующей загрузке она будет уже не действительна, т.к. находиться вне формы. А из dfm грузится без вопросов, но если ссылка на объект описанный в var разделе юнита, то Вас ничего не спасет, кроме как явное присвоение ссылок заново.
← →
far © (2004-08-21 14:11) [4]Надо же, немного неправильно описал сабж.
Вообще-то ссылки (имеются в виду ссылки на компоненты, сохраняющиеся в поток в виде имени компонента) правильно привязываются и при чтении из потока, но проблема в том, что это делается уже после загрузки всех компонентов формы.
При чтении из *.dfm, для компонентов, имеющих глобальные ссылки, метод Loaded вызывается не сразу, а уже после выполнения GobalFixupReferences.
А при чтении из моего файла, Loaded вызывается сразу после считывания компонента, что приводит к аварийной ситуации.
Я не могу понять почему это происходит. В конце концов, в обоих случаях для чтения используются одни и те же процедуры :(
Страницы: 1 вся ветка
Текущий архив: 2004.09.05;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.026 c