delphi – 何时调用在表单上创建组件的代码和设置其属性的代码?
发布时间:2020-12-15 09:21:10 所属栏目:大数据 来源:网络整理
导读:如果我在表单上放置一个组件,我在单元代码中看不到像MyComp:= TMyComponent.Create这样的代码.我认为组件是自动创建的,但什么时候?我将组件放在表单上后,我配置的属性也发生了同样的情况.在运行时应用它们? 解决方法 表单的属性以及表单上的所有设计时组
如果我在表单上放置一个组件,我在单元代码中看不到像MyComp:= TMyComponent.Create这样的代码.我认为组件是自动创建的,但什么时候?我将组件放在表单上后,我配置的属性也发生了同样的情况.在运行时应用它们?
解决方法
表单的属性以及表单上的所有设计时组件在构建表单期间由框架流式传输.该过程是从TCustomForm.Create中的表单构造函数触发的.那里的相关代码看起来像这样:
Include(FFormState,fsCreating); try if not InitInheritedComponent(Self,TForm) then raise EResNotFound.CreateFmt(SResNotFound,[ClassName]); finally Exclude(FFormState,fsCreating); end; 关键是调用InitInheritedComponent.这是在Classes单元中定义的一个函数,可以完成繁重的工作.在非常广泛的概述中,它执行以下操作: >查找表单类的名称,并查找该名称的RT_RCDATA资源.该资源是.dfm文件. 为了使所有这些工作,流式传输框架依赖于RTTI.它在您的类和组件的编译时完全不知道.因此需要RTTI.流式传输框架使用旧式RTTI,事实上这就是旧式RTTI存在的原因.如果你想知道为什么老式的RTTI就是这样,那么试着从设计用于支持流媒体的角度来看它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |