Главная страница
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.039 c
11-1080404565
user
2004-03-27 19:22
2004.09.05
а можноли какнибуть узнать текущее состояние таймера???


6-1088788913
Dextor
2004-07-02 21:21
2004.09.05
Файлы на IP адресе


1-1092845156
Чувак
2004-08-18 20:05
2004.09.05
Компонента Calendar


1-1092834830
Phoenix
2004-08-18 17:13
2004.09.05
Индивидуальные иконки в TreeView


1-1093090976
Станислав
2004-08-21 16:22
2004.09.05
удаление записи в типизированном файле