FMX.Controls.TControl.EnumControls

De RAD Studio API Documentation
Aller à : navigation, rechercher

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 :

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);

Voir aussi