将参数传递给delphi TFrame

将参数传递给delphi TFrame,delphi,constructor,tframe,Delphi,Constructor,Tframe,为了避免单例和全局变量,我希望能够将参数传递给TFrame组件。但是,由于TFrame通常在设计时包含在表单中,因此只能使用默认构造函数 当然,父窗体可以在创建TFrame之后在OnCreate回调中设置一些属性。然而,这并不能确保属性不会被遗忘,依赖关系也不像使用构造函数那样清晰 如果可以在读取dfm文件时注册一个工厂来创建组件,那么这将是一个很好的方法。然后,在工厂创建时,可以将所需的参数传递给TFrame构造函数。有没有办法做到这一点 或者有没有人能更好地解决如何将参数传递到TFrame的

为了避免单例和全局变量,我希望能够将参数传递给TFrame组件。但是,由于TFrame通常在设计时包含在表单中,因此只能使用默认构造函数

当然,父窗体可以在创建TFrame之后在OnCreate回调中设置一些属性。然而,这并不能确保属性不会被遗忘,依赖关系也不像使用构造函数那样清晰

如果可以在读取dfm文件时注册一个工厂来创建组件,那么这将是一个很好的方法。然后,在工厂创建时,可以将所需的参数传递给TFrame构造函数。有没有办法做到这一点


或者有没有人能更好地解决如何将参数传递到TFrame的问题?

您能否创建/registercomponent您自己的TFrame组件并
将它放在表单上-它的create可以传递任何内容。

如果工厂可以提供您需要的参数,为什么不重写框架的默认构造函数,并向工厂类请求参数


我通常自己做构造器。无论如何,我不喜欢在设计时创建框架。

所有组件,包括TFrame的后代,都需要能够使用从TComponent继承的构造函数进行构造。否则,它们无法在设计时正确使用。如果您可以接受设计时使用的限制,那么您可以重写该构造函数并引发异常。这将防止在设计时将组件放置在表单上。只需提供一些需要其他参数的其他构造函数

由于设计时的要求,所有组件都需要能够在其部分或全部属性仍处于默认值的情况下存在。这并不意味着组件必须在处于该状态时执行有用的操作,但它们确实需要能够无限期地保持在该状态。例如,在表单上放置一个组件,保存表单,然后关闭Delphi,以便稍后恢复表单设计,这应该是可以的。组件应该允许保存和恢复自身,即使其所有属性尚未设置为最终使用


我的首选选项是仅在运行时强制执行组件的规则。在允许使用这些属性之前,请检查是否已将其设置为合理值。您可以使用断言来强制正确使用组件。如果您的类的使用者尚未在其窗体上完成组件的设置,他们将很快学习。

我通常会添加一个公共的非虚拟初始化或初始化过程,该过程要求提供所有参数。这将设置属性

如果可能的话,将属性设置为受保护的或私有的,这样设置它们的唯一方法就是调用InitialiseAFoo,ABar:integer

然后在TFormXXX.FormCreate或TFormXXX.Create中,具有:

inherited;
Initialise(foo, bar);

框架可以在需要时动态创建,在不需要时销毁

b为框架提供一个带有参数数据类型或数据结构的公共属性,并通过该属性将值传递给窗体

例如: TadAddress—包含地址的常用元素的类。 TAddressFra-带有可视控件的框架,用于显示地址

使用值填充TadAddress的实例 创建TAddressFra的实例 将TAddressFra.address属性与TAddress实例一起分配 使用程序setAddresso_address:TadAddress将TadAddress属性的值分配给TAddressFra上相应的视觉组件
流式处理期间不调用自定义构造函数。只调用CreateTComponent构造函数,因为它是从TComponent继承的构造函数。您能解释一下这些参数的来源吗?如果有一个工厂创建这些TFrame,它如何知道要使用哪些参数?以及作为工厂类?那句话不懂语法。我想这是德尔福的方法。我试图通过使用工厂将对象创建与应用程序的逻辑分离开来