0

コンポーネントを作成していて、Designer.GetComponentNames の背後にある概念を模倣したいと考えています。ここで、フォームまたは使用中の任意のフォームで使用可能なコンポーネントのリストを取得できます。GetComponentNames のルートに到達できませんでした。任意の入力をいただければ幸いです。

LE: 実際、私はそれを取り戻します。設計時の観点からこれが必要です。

4

2 に答える 2

1

ランタイム?表示されたすべてのフォームの Vcl.Forms.TScreen.Forms 配列があり、すべてのフォーム IIRC を含む Vcl.Forms.Application.Components があります。次に、各フォームには Components 配列があります。

于 2012-09-04T15:02:44.417 に答える
0

あなたの質問の最初の部分を理解できれば、設計時にフォームが (名前で) 所有するコンポーネントのリストを取得したいと考えています。

背景として、実行時にフォーム上で選択された TWinControls の色を管理する非ビジュアル コンポーネント (TColorEdits と呼びます) があります。このコンポーネントには、フォーム上で選択された TWinControls の名前を含む TStrings プロパティがあります。管理する TWinControl の名前は、設計時に、2 つのリストボックスを含むダイアログ (dlgEditColors) を使用して選択できます。そのうちの 1 つは DstList という名前で、TColorEdits で管理できるすべての TWinControl を表示します。

そこで、設計時にフォーム上の 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);

コンポーネントのカスタム プロパティ エディタの一部として、上記のコードを調整できるはずです。これが質問の最初の部分に役立つことを願っています。

于 2012-09-05T04:53:32.540 に答える