我正在将一些数据库访问组件(和相关的数据库功能)从表单移动到另一个单元(而不是数据模块)。特定组件的类型为TIBDatabase
,TIBTransaction
,TIBQuery
,TDataSetProvider
,TClientDataSet
,TDataSource
,TADOConnection
,{{ 1}},TADOTable
。
因此,在设计时这些组件将不再在Object Inspector中可用,因为它们将在运行时创建。创建这些组件后,需要设置它们的一些属性(为了链接它们,将LoginPrompt设置为False等)。
在执行此操作时,我遇到了两难“我如何知道在运行时创建后需要设置哪些属性,除了在设计时将组件放置在表单上之前设置的属性 “?我可以告诉在设计时设置了哪些属性,因为如果已为该属性显式设置了设计时值,则Delphi XE2 IDE中的Object Inspector将以粗体显示属性。
我的问题是, 我是否确定 在运行时创建相同组件时,还强制执行设计时的默认属性值?当然,这取决于该组件的源代码,但也许大多数组件制造商都遵循统一的方法或标准模板。我不知道,我不会研究如何制作组件(因为这是不合理的),所以我正在寻求经验丰富的专家的答案。感谢。
答案 0 :(得分:4)
一些方法(选择任何方法或任何其他方法)
为Delphi安装GExperts。选择你的组件。运行“将组件转换为代码”向导。
为Delphi安装CnWizards。选择你的组件。运行“将组件转换为代码”向导。
右键单击表单,选择“以文本形式查看”(通常是Alt + F12),找到您的组件并进行复制。您将列出所有非标准属性。几乎没有编辑(使用IDE记录宏和文本替换功能),您可以很快地将它们转换为代码。
右键单击表单并确保将其设置为将文本而不是二进制文件保存为DFM文件,然后在记事本或其他文本编辑器中打开DFM文件,找到组件并进行复制。您将列出所有非标准属性。几乎没有编辑(使用IDE记录宏和文本替换功能),您可以很快地将它们转换为代码。
答案 1 :(得分:2)
默认属性值在组件的构造函数中分配,并在DFM流式传输期间被覆盖。只有非默认值存储在DFM中。 RTTI告诉Object Inspector和DFM系统默认值是什么。因此,无论组件是如何创建的,无论DFM是否存在,都可以保证默认值始终相同。
您可以查看现有的DFM,了解哪些属性在设计时更改,但只是因为任何给定的属性确实发生更改并不一定意味着需要明确设置。有时,当另一个属性发生更改时,一个属性会更新,因此您无需同时设置它们。
简而言之,在新的运行时代码中,只设置您确实需要的属性,并将其余属性保留为默认值。