2012-09-04 22 views
0

我們正在創建一個組件,並且想要模仿Designer.GetComponentNames背後的概念,我們提供的概念可以獲取表單上可用組件的列表或用途中的任何形式。我們無法找到GetComponentNames的根。任何輸入將不勝感激。 LE:其實我回來了。我從設計時間方面需要這個。通過形式搜索和使用

+0

投票結果爲不是真正的Q.您在設計時要求提供與GetComponentNames等效的值。這是一個非sequiter。 –

回答

1

運行時間?您擁有所有顯示錶單的Vcl.Forms.TScreen.Forms數組,並且您擁有包含所有表單IIRC的Vcl.Forms.Application.Components。然後,每個表單都有一個Components數組。

0

如果我理解了您的問題的第一部分,您想在設計時獲取表單(按名稱)擁有的組件列表。

作爲背景,我有一個非可視組件(稱爲TColorEdits),它在運行時管理窗體上選定的TWinControls的顏色。該組件具有一個TStrings屬性,其中包含窗體上所選TWinControls的名稱。可以在設計時使用包含幾個列表框的對話框(dlgEditColors)來選擇要管理的TWinControls的名稱,其中一個列表框被命名爲DstList並顯示可由TColorEdits管理的所有TWinControls。

因此,下面是一些(簡化)代碼,用於在設計時在窗體上獲取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); 

您應該可以將上述代碼調整爲組件的自定義屬性編輯器的一部分。希望這對你的問題的第一部分有所幫助。