我们正在创建一个组件,并希望模仿 Designer.GetComponentNames 背后的概念,在这里我们可以获取表单上可用组件的列表或使用中的任何表单。我们无法到达 GetComponentNames 的根目录。任何输入将不胜感激。
LE:实际上我收回了这一点。我从设计时方面需要这个。
我们正在创建一个组件,并希望模仿 Designer.GetComponentNames 背后的概念,在这里我们可以获取表单上可用组件的列表或使用中的任何表单。我们无法到达 GetComponentNames 的根目录。任何输入将不胜感激。
LE:实际上我收回了这一点。我从设计时方面需要这个。
运行?您拥有所有显示表单的 Vcl.Forms.TScreen.Forms 数组,并且您拥有包含所有表单 IIRC 的 Vcl.Forms.Application.Components。然后,每个表单都有一个 Components 数组。
如果我理解您问题的第一部分,您希望在设计时获取表单(按名称)拥有的组件列表。
作为背景,我有一个非可视组件(称为 TColorEdits。),它在运行时管理窗体上选定 TWinControls 的颜色。该组件有一个 TStrings 属性,该属性包含窗体上选定 TWinControls 的名称。可以在设计时使用包含几个列表框的对话框 (dlgEditColors) 选择要管理的 TWinControls 的名称,其中一个名为 DstList 并显示所有可用于 TColorEdits 管理的 TWinControls。
因此,这里有一些(简化的)代码,我用来在设计时获取表单上的 TWinControl 名称并将 TWinControl 名称加载到 DstList 中。
{ Load names of TWinControls owned by a form into TListBox DstList }
for i := 0 to TColorEdits(GetComponent(0)).Owner.ComponentCount - 1 do
if ((TColorEdits(GetComponent(0)).Owner.Components[i] is TWinControl) then
dlgEditColors.DstList.Items.Add(TColorEdits(GetComponent(0)).Owner.Components[i].Name);
您应该能够将上述代码作为组件自定义属性编辑器的一部分进行调整。希望这对您问题的第一部分有所帮助。