我们正在创建一个组件,并希望模仿Designer.GetComponentNames背后的概念,我们给出的可以获取表单上的可用组件列表或使用中的任何表单。我们无法找到GetComponentNames的根。任何意见都会非常感激。
LE:其实我把它拿走了。我从设计时间方面就需要这个。
答案 0 :(得分:1)
运行?您拥有所有显示表单的Vcl.Forms.TScreen.Forms数组,并且您拥有包含所有表单IIRC的Vcl.Forms.Application.Components。然后,每个表单都有一个Components数组。
答案 1 :(得分:0)
如果我理解您问题的第一部分,您希望在设计时获得表单所拥有的组件列表(按名称)。
作为背景,我有一个非可视组件(称之为TColorEdits。),它在运行时管理表单上所选TWinControls的颜色。此组件具有TStrings属性,该属性包含表单上所选TWinControl的名称。可以在设计时使用包含几个列表框的对话框(dlgEditColors)选择要管理的TWinControls的名称,其中一个列表框名为DstList,并显示可供TColorEdits管理的所有TWinControl。
因此,这里是一些(简化的)代码,用于在设计时在表单上获取TWinControls的名称,并将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);
您应该能够将上述代码作为组件的自定义属性编辑器的一部分进行调整。希望这有助于你的问题的第一部分。