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 */;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
procedure function |
public | FMX.Controls.pas FMX.Controls.hpp |
FMX.Controls | TControl |
Description
Parcourt en boucle les contrôles qui sont des enfants de ce contrôle, et exécute la procédure spécifiée une fois par contrôle avec un contrôle différent comme premier paramètre dans chaque appel.
- Avertissement : EnumControls est une fonction obsolète. Elle peut toutefois être utilisée en tant que procédure. Cette page décrit la syntaxe et l'utilisation de la procédure EnumControls.
EnumControls parcourt en boucle non seulement les enfants directs de ce contrôle, mais également leurs enfants (les petits-enfants), et ainsi de suite, en utilisant un algorithme de parcours en profondeur (DFS ou Depth First Search)..
Chaque fois que EnumControls visite un contrôle lors de la recherche, il exécute la procédure Proc
. Cette procédure reçoit le contrôle visité en tant qu'argument, et renvoie une valeur de type TEnumControlsResult. La valeur de retour définit ce que EnumControls effectue ensuite. L'une quelconque des valeurs suivantes peut être renvoyée :
- Continue laisse EnumControls continuer la recherche des contrôles, comme d'habitude.
- Discard demande à la recherche d'ignorer les enfants du contrôle en cours (le contrôle mentionné dans le premier paramètre), ainsi que leurs enfants (les petits-enfants), etc.
- Stop interrompt la boucle de recherche. Si EnumControls était une boucle de contrôle de niveau langage, Stop serait le mot clé Break.
Exemple
Voici un exemple d'appel à EnumControls qui effectue une boucle à l'intérieur des enfants d'un volet (Panel1
) et remplit une liste (ListOfVisibleControls
) avec tous les contrôles qui sont visibles :
Dans 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);
Dans C++ :
- 1. Définir une classe qui implémente l'interface 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. Puis transmettre une instance de cette classe à EnumControls :
Panel1->EnumControls(new TMethodReference);