IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La création dynamique de composants


précédentsommaire

III. La FAQ

J'ai répertorié ici quelques questions que l'on peut se poser, après avoir lu les deux premières pages. J'ai hésité à les incorporer au cours, mais j'ai finalement décidé de les mettre à part pour alléger les pages. De plus, cela permettra d'avoir une réponse plus rapidement, en cas de problème.

Pourquoi Btn.Create(Self) ne « marche » pas ?

Gardez à l'esprit que Btn n'est qu'une variable. On ne peut donc pas le créer, mais plutôt lui assigner une valeur. Ici, la valeur est un peu spéciale : c'est un nouveau bouton qui est créé. Si vous oubliez cette ligne, le compilateur indiquera un avertissement : « La variable 'Btn' n'est peut-être pas initialisée ». Une fois que la ligne est mise, vous pouvez modifier les propriétés de Btn. Mais, surtout pas avant !

Quelle est la différence entre les propriétés Owner et Parent ?

Réponse issue de l'aide de Delphi : Ne confondez pas la propriété Parent déclarée dans TControl avec la propriété Owner déclarée dans TComponent. Le Parent d'un contrôle est toujours un contrôle fenêtré contenant visuellement le contrôle en question et qui est responsable de l'écriture du contrôle dans un flux lorsque la fiche est enregistrée. Le Owner d'un composant est le composant qui a été transmis en paramètre dans le constructeur et qui contrôle quand le composant est libéré.

Quel composant dois-je choisir pour la propriété Parent ?

Réponse issue de l'aide de Delphi : À l'exécution lors de la création d'un nouveau contrôle, affectez une valeur de propriété Parent au nouveau contrôle. C'est généralement une fiche, un volet, une boîte groupe ou tout autre contrôle conçu pour servir de conteneur. Changer le parent d'un contrôle déplace le contrôle à l'écran afin qu'il s'affiche à l'intérieur de son parent. Lorsque le contrôle parent se déplace, l'enfant se déplace avec le parent.

Pourquoi il ne faut pas mettre OnClick := MaProcedure(Sender); pour définir l'événement OnClick du Bouton ?

Le TButton est déjà défini dans l'unité StdCtrls. C'est donc là que se décide de la valeur de Sender. Elle est imposée et ne peut donc pas être modifiée de cette façon. En fait, dans OnClick := MaProcedure(Sender);, Sender renvoie à l'objet qui a appelé la procédure, lors de la création du composant. Or, le Sender de l'événement OnClick renvoie à l'objet qui a appelé la fonction.

Puis-je modifier la propriété Name de mon composant créé dynamiquement ?

OUI ! Changer la propriété Name d'un composant ne change rien. Elle est là uniquement pour se rapporter aux composants, créés en mode conception. Même en mettant Button1 au nom de votre composant créé dynamiquement, vous n'avez pas le droit de modifier ses propriétés par Button1.Top (par exemple). D'ailleurs, deux composants n'ont pas le droit d'avoir le même nom ; ils peuvent cependant ne pas en avoir.

Ça marche comment pour les autres composants ?

De la même façon ! Ce que je vous expliqué peut être adapté à tous les composants (j'ai même essayé avec un TOpenDialog).

Et pour les fiches ?

Ben, c'est pareil ! Juste une petite précision : il ne faut pas oublier d'afficher la fiche avec la procédure Show (ou ShowModal). Si vous mettez Show, pour que la fiche ne reste pas « à l'intérieur » de la fiche principale, il faut mettre la propriété Parent à nil. Si vous essayez de mettre nil au Parent d'un TButton (par exemple), il ne sera pas affiché.


précédentsommaire

Copyright © 2005 Laurent Le Brun. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.