FMX.Controls.TControl.EnumControls
Delphi
procedure EnumControls(const Proc: TFunc<TControl, TEnumControlsResult>); overload;
function EnumControls(Proc: TEnumControlsRef; const VisibleOnly: Boolean = True): Boolean; overload;
C++
void __fastcall EnumControls(const System::DelphiInterface<System::Sysutils::TFunc__2<TControl*,Fmx::Types::TEnumProcResult> > Proc)/* overload */;
bool __fastcall EnumControls _DEPRECATED_ATTRIBUTE1("Use another version of EnumControls") (_di_TEnumControlsRef Proc, const bool VisibleOnly = true)/* overload */;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure function |
public | FMX.Controls.pas FMX.Controls.hpp |
FMX.Controls | TControl |
説明
このコントロールの子であるコントロールについて反復処理を行い、指定された手続きをコントロールごとに 1 回実行します。その際、各呼び出しの第 1 パラメータには異なるコントロールが指定されます。
- 警告: 関数の EnumControls は非推奨です。手続きの方を使用してください。このページでは、EnumControls 手続きの構文と使い方を説明します。
EnumControls では、深さ優先探索アルゴリズムを使用して、このコントロールの直接の子だけでなく、それらの子(孫)などについても反復処理を行います。
EnumControls は、探索中にコントロールを発見するたびに Proc
手続きを実行します。この手続きは、発見されたコントロールを引数として受け取り、型が TEnumControlsResult の値を返します。この戻り値によって、EnumControls が次に何を行うかが決まります。次の値のいずれかを返すことができます。
- Continue: EnumControls では通常どおりコントロールの探索が続けられます。
- Discard: 現在のコントロール(第 1 パラメータのコントロール)の子およびその子(孫)などの探索をスキップします。
- Stop: 探索ループを中断します。EnumControls が言語レベルの制御ループであれば、Stop は Break キーワードになります。
例
以下の例では、EnumControls を呼び出してパネル(Panel1
)の子に対して反復処理を行い、表示されるすべてのコントロールを含むリスト(ListOfVisibleControls
)を作成しています。
Delphi の場合:
Panel1.EnumControls(function (Control: TControl): TEnumControlsResult
begin
if not Control.Visible then
Result := TEnumControlsResult.Discard
else
begin
ListOfVisibleControls.Add(Control);
Result := TEnumControlsResult.Continue;
end;
end);
C++ の場合:
- 1. TFunc__2 インターフェイスを実装するクラスを定義します。
class TMethodReference : public TCppInterfacedObject<TFunc__2<TControl*,TEnumControlsResult> >
{
public:
TEnumControlsResult __fastcall Invoke(TControl* Control)
{
if (!Control->Visible)
return TEnumControlsResult::Discard;
else {
TForm2::ListOfVisibleControls->Add(Control);
return TEnumControlsResult::Continue;
}
}
};
- 2. その後、このクラスのインスタンスを EnumControls に渡します。
Panel1->EnumControls(new TMethodReference);