Avis

Comprendre le propriétaire par rapport au parent dans les applications Delphi

Comprendre le propriétaire par rapport au parent dans les applications Delphi



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Chaque fois que vous placez un panneau sur un formulaire et un bouton sur ce panneau, vous établissez une connexion "invisible". La forme devient la propriétaire du bouton, et le panneau est configuré 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 la libération.

De manière similaire, mais différente, la propriété Parent indique le composant contenant le composant "enfant".

Parent

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

Parent détermine comment 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 nombreuses formes n'ont pas de parent. Par exemple, les formulaires qui apparaissent directement sur le bureau Windows ont Parent défini sur nil. D'un composant HasParent La méthode retourne une valeur booléenne indiquant si le parent a été attribué au composant.

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 du second Panel, lorsque vous cliquez sur Panel2, le bouton "saute" de Panel1 à Panel2: Panel1 n'est plus le parent du bouton.

Lorsque vous voulez 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 consultez l'inspecteur d'objets, vous remarquerez plusieurs propriétés "compatibles avec les parents". le ParentFont, par exemple, indique si la police utilisée pour la légende du bouton est identique à 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, le passage de la propriété Font du panneau à Gras fait que la légende de Button du panneau utilise cette police (en gras).

Propriété Controls

Tous les composants qui partagent le même parent sont disponibles dans le cadre de la Les 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 code suivant peut être utilisé pour masquer tous les composants contenus dans Panel1:

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

Panel1.Controlsii.Visible: = false;

Tricks Tricks

Les contrôles fenêtrés ont trois caractéristiques de base: ils peuvent recevoir le focus d’entrée, ils utilisent les ressources système et peuvent être les parents d’autres contrôles.

Par exemple, le composant Button est un contrôle fenêtré et ne peut pas être le parent d'un autre composant. Vous ne pouvez pas y placer un autre composant. Le fait est que Delphi nous cache cette fonctionnalité. Un exemple est la possibilité cachée pour un TStatusBar d'avoir certains composants tels que TProgressBar.

La possession

Tout d'abord, notez qu'un formulaire est le propriétaire général de tous les composants qui y résident (positionné sur le formulaire au moment du design). Cela signifie que lorsqu'un formulaire est détruit, tous les composants du formulaire sont également détruits. Par exemple, si nous avons une application avec plusieurs formulaires lorsque nous appelons la méthode Free ou Release pour un objet de formulaire, nous n'avons pas à nous préoccuper de la libération explicite de tous les objets de ce formulaire, car le formulaire en est le propriétaire. toutes ses composantes.

Chaque composant que nous créons, à la conception ou à l'exécution, doit appartenir à un autre composant. Le propriétaire d'un composant (la valeur de sa propriété Owner) est déterminé par un paramètre transmis au constructeur Create lors de la création du composant. Le seul autre moyen de réaffecter le propriétaire consiste à utiliser les méthodes InsertComponent / RemoveComponent pendant l'exécution. Par défaut, une fiche possède tous les composants qu'elle contient et appartient à son tour à l'application.

Lorsque nous utilisons le mot-clé Self comme paramètre pour la méthode Create, l'objet que nous sommes en train de créer appartient à la classe dans laquelle la méthode est contenue. Il s'agit généralement d'un formulaire Delphi.

Si, par contre, nous désignons un autre composant (et non la forme) comme le propriétaire du composant, nous le responsabilisons pour qu'il dispose de l'objet lorsqu'il est détruit.

Comme tout autre composant Delphi, un composant TFindFile personnalisé peut être créé, utilisé et détruit au moment de l'exécution. Pour créer, utiliser et libérer un composant TFindFile lors de son exécution, vous pouvez utiliser l'extrait de code suivant:

les usages Trouver un fichier;

var Ffile: TFindFile;

procédure TForm1.InitializeData;

commencer // form ("Self") est le propriétaire du composant // il n'y a pas de parent puisque ce // est un composant invisible.

FFile: = TFindFile.Create (Self);

 …

fin;

Remarque: comme le fichier FFile est créé avec un propriétaire (Form1), nous n'avons rien à faire pour libérer le composant. Il sera libéré lorsque le propriétaire sera détruit.

Composants Propriété

Tous les composants qui partagent le même propriétaire sont disponibles dans le cadre de la Propriété des composants de ce propriétaire. La procédure suivante permet d'effacer tous les composants d'édition du formulaire:

procédure ClearEdits (après forme: TForm);

var

ii: entier;

commencer

  pour ii: = 0 à AForm.ComponentCount-1 faire

  si (AForm.Componentsii est TEdit) puis TEdit (AForm.Componentsii) .Text: = ";

fin;

"Orphelins"

Certains contrôles (tels que les contrôles ActiveX) sont contenus dans des fenêtres non-VCL plutôt que dans un contrôle parent. Pour ces contrôles, la valeur de Parent est néant et le Fenêtre Parent propriété spécifie la fenêtre parente non VCL. La définition de ParentWindow déplace le contrôle afin qu'il soit contenu dans la fenêtre spécifiée. ParentWindow est défini automatiquement lorsqu'un contrôle est créé à l'aide de la commande CreateParented méthode.

La vérité est que dans la plupart des cas, vous n'avez pas besoin de vous soucier de vos parents et de vos propriétaires, mais lorsqu'il s'agit de la programmation orientée objet et du développement de composants ou lorsque vous souhaitez faire avancer Delphi d'un pas en avant, les instructions de cet article vous aideront à agir plus rapidement. .