Comprendre le propriétaire et le parent dans les applications Delphi

Chaque fois que vous placez un panneau sur un formulaire et un bouton sur ce panneau, vous établissez une connexion "invisible". Le formulaire devient le propriétaire du bouton, et le panneau est réglé pour être son parent.

Chaque composant Delphi a une propriété Owner. Le propriétaire prend soin de libérer les composants possédés lors de leur libération.

Similaire mais différente, la propriété Parent indique le composant qui contient le composant "enfant".

Parent

Parent fait référence au composant dans lequel un autre composant est contenu, tel que TForm, TGroupBox ou TPanel. Si un contrôle (parent) en contient d'autres, les contrôles contenus sont des contrôles enfants du parent.

Le parent détermine la façon dont le composant est affiché. Par exemple, les propriétés Left et Top sont toutes relatives au Parent.

La propriété Parent peut être affectée et modifiée pendant l'exécution.

Tous les composants n'ont pas le parent. De nombreux formulaires n'ont pas de parent. Par exemple, les formulaires qui apparaissent directement sur le bureau Windows ont Parent défini sur nil. Un composant HasParent renvoie une valeur booléenne indiquant si le composant a été affecté ou non à un parent.

Nous utilisons la propriété Parent pour obtenir ou définir le parent d'un contrôle. Par exemple, placez deux panneaux (Panel1, Panel2) sur un formulaire et placez un bouton (Button1) sur le premier panneau (Panel1). Cela définit la propriété Parent du bouton sur Panel1.

 Button1.Parent: = Panel2; 

Si vous placez le code ci-dessus dans l'événement OnClick pour le deuxième Panel, lorsque vous cliquez sur Panel2, le bouton "saute" de Panel1 à Panel2: Panel1 n'est plus le parent du bouton.

Lorsque vous souhaitez créer un TButton au moment de l'exécution, il est important de ne pas oublier d'affecter un parent - le contrôle qui contient le bouton. Pour qu'un composant soit visible, il doit avoir un parent pour s'afficher dans.

ParentThis et ParentThat

Si vous sélectionnez un bouton au moment de la conception et examinez l'inspecteur d'objets, vous remarquerez plusieurs propriétés "sensibles aux parents". le ParentFont, par exemple, indique si la police utilisée pour la légende du bouton est la même que celle utilisée pour le parent du bouton (dans l'exemple précédent: Panel1). Si ParentFont a la valeur True pour tous les boutons d'un panneau, la modification de la propriété Font du panneau en gras oblige toutes les légendes des boutons du panneau à utiliser cette police (en gras).

Propriété Controls

Tous les composants qui partagent le même parent sont disponibles dans le cadre du Contrôles propriété de ce parent. Par exemple, les contrôles peuvent être utilisés pour itérer sur tous les enfants du contrôle fenêtré.

Le morceau de code suivant peut être utilisé pour masquer tous les composants contenus sur Panel1:

 pour ii: = 0 à Panel1.ControlCount - 1 faire

   Panel1.Controls [ii] .Visible: = false;