Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.048 c
1-1092933826
alexts
2004-08-19 20:43
2004.09.05
Парсинг текстовых файлов


1-1093019041
Ragazor
2004-08-20 20:24
2004.09.05
Чтение файла, Pos(x,y,z)


14-1092847934
Undert
2004-08-18 20:52
2004.09.05
Встреча


1-1092975009
SNV-Soft
2004-08-20 08:10
2004.09.05
Преведение к классу


14-1092572376
ПЛОВ
2004-08-15 16:19
2004.09.05
Чем таким глянуть в "недры" ИБП?