FS 1.4 - проблема с AddForm
Привет !
Попытаюсь в меру своих способностей объяснить суть проблемы.
Создаем динамически
1.
xpseudoform:=TDataModule.Create(nil);
xpseudoform.name:='mdata';
xfsScript:= TfsScript.Create(xpseudoform);
xfsScript.SyntaxType:='PascalScript';
xfsScript.Parent:=fsGlobalUnit;
xfsScript.AddedBy:=self; (self - главная форма)
компонент скрипта у меня создается динмически, но я думаю если он создан в DesignTime - проблема останется.
2.
затем в Runtime добавляю на модуль данных несколько компонентов
и делаю
xfsScript.AddForm(xpseudoform);
3. запускаю припомощи TfsScript скрипт который активно использует компоненты на модуле данных. Все работает.
4.
удаляю компоненты с формы
удаляю экземпляры клаcсов TDataModule и TfsScript
xfsScript.RemoveItems(self);
xfsScript.Clear;
xfsScript.AddedBy:=nil;
xfsScript.free;
xfsScript:=nil;
xpseudoform.free;
xpseudoform:=nil;
Все замечательно почищено :-)))
А вот если второй раз пройтись по цепочке, то появляется проблема.
На 2-ом шаге (AddForm) выясняется, что описания переменных на модуле данных так и остались сидеть в скриптовом движке, а именно в списке Fmembers объекта TfsClassVariable для моего модуля данных. При этом все компоненты при вызове AddForm добавляются повторно,
а при запуске скрипта движок пытается работать с удаленными на первой итерации компонентами датамодуля и вылетает с exception. Что делать ? Как заставить TfsClassVariable.FMembers очищаться :-)))
Попытаюсь в меру своих способностей объяснить суть проблемы.
Создаем динамически
1.
xpseudoform:=TDataModule.Create(nil);
xpseudoform.name:='mdata';
xfsScript:= TfsScript.Create(xpseudoform);
xfsScript.SyntaxType:='PascalScript';
xfsScript.Parent:=fsGlobalUnit;
xfsScript.AddedBy:=self; (self - главная форма)
компонент скрипта у меня создается динмически, но я думаю если он создан в DesignTime - проблема останется.
2.
затем в Runtime добавляю на модуль данных несколько компонентов
и делаю
xfsScript.AddForm(xpseudoform);
3. запускаю припомощи TfsScript скрипт который активно использует компоненты на модуле данных. Все работает.
4.
удаляю компоненты с формы
удаляю экземпляры клаcсов TDataModule и TfsScript
xfsScript.RemoveItems(self);
xfsScript.Clear;
xfsScript.AddedBy:=nil;
xfsScript.free;
xfsScript:=nil;
xpseudoform.free;
xpseudoform:=nil;
Все замечательно почищено :-)))
А вот если второй раз пройтись по цепочке, то появляется проблема.
На 2-ом шаге (AddForm) выясняется, что описания переменных на модуле данных так и остались сидеть в скриптовом движке, а именно в списке Fmembers объекта TfsClassVariable для моего модуля данных. При этом все компоненты при вызове AddForm добавляются повторно,
а при запуске скрипта движок пытается работать с удаленными на первой итерации компонентами датамодуля и вылетает с exception. Что делать ? Как заставить TfsClassVariable.FMembers очищаться :-)))
Комментарии
В принципе можно еще перетерпеть , что форма в контексте FS->AddForm
не может быть динамической, а вот с компонентами на форме сложнее.
Думаю не только у меня в будущем возникнет желание их удалять,
добавлять динамичекси вне FS, а ссылки уже на убитые объекты при этом будут оставаться в движке . Все равно спасибо !