0/5 (14 avis)
Vue 5 784 fois - Téléchargée 393 fois
unit Unit1; interface uses Windows, Messages, StdCtrls, Classes, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1 : TPanel; Btn_Creer : TButton; Btn_Ecrire: TButton; procedure Btn_CreerClick(Sender: TObject); procedure Btn_EcrireClick(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Btn_CreerClick(Sender: TObject); var NewEdit : TEdit; begin if Panel1.ComponentCount=0 then begin NewEdit := TEdit.Create(Panel1); NewEdit.Parent := Panel1; NewEdit.Left := 4; NewEdit.Top := 4; end else ShowMessage('L''Edit est déjà créé!'); end; procedure TForm1.Btn_EcrireClick(Sender: TObject); begin if Panel1.ComponentCount = 1 then begin {Le TEdit est identifié en tant que compos indexé du TPanel} (Panel1.Components[0] as TEdit).Text := 'Bonjour !'; end else ShowMessage('L''Edit n''est pas encore créé!'); end; end.
8 janv. 2009 à 02:59
22 avril 2006 à 21:29
Je ne proposait cette méthode que pour la faire coonnaitre. J'utilise régulièrement la création dynamique et quand ce n'est que pour quelques objets j'utilise bien sur le transtypage et les objet existants ( TComponent.Components, TWinControl.Controls ).
Mais dans le cas d'un grand nombre avec des besoin particulier un héritage est bien mieux adapté.
PS : je viens te voir ici vu que l'on ne te vois pas beaucoup là ba. :wink:
21 avril 2006 à 23:31
Comme la création dynamique de composants, leur sauvegarde et leur restauration à partir d'un flux fichier est un sujet sur lequel nous avons collaboré, j'invite les curieux à se rendre à cette adresse : http://tinyurl.com/k72zj
Toutefois, voici un point sur lequel je suis un peu moins d'accord quand il écrit "Tu dérives une classe descendante de TObjectList ou même un TComponentList et tu n'as plus rien à transtyper non plus."
Je trouve que c'est se donner beaucoup de mal quand on n'a besoin que de deux ou trois méthodes de TObjectList, TComponentList ou autres semblables. Il faut pratiquement surcharger toutes les méthodes alors qu'elles ont été définies comme statiques par les concepteurs de la VCL.
Dans ces cas là, je vous conseille d'opter pour la composition et non l'héritage.
Caribensila a écrit : "j'avais rencontré des problèmes pour traiter les événements des compos créés après un 'ReadComponentResFile' dans le code"
Quand tu affectes une méthode à un évènement, tu affectes en réalité un pointeur de méthode. Si au cours de la session courante de ton logiciel tu affectes Nil puis que tu affectes de nouveau une méthode à un évènement, pas de problème. Mais comme les exe sont relogeables et rien ne permet de dire que la session suivante s'effectuera avec les mêmes adresses mémoire, je te laisse imaginer les dégâts que cela pourrait causer si tu affectais une adresse qui ne serait alors plus valide !...
GPF garantie 8-S
21 avril 2006 à 19:21
Moi, j'avais rencontré des problèmes pour traiter les événements des compos créés après un 'ReadComponentResFile' dans le code...
Par exemple, on 'Read' un TPanel contenant un TImage et :
MyImage.OnMouseDown := Action1Execute; // ne fonctionne pas!
Par contre, ça, ça fonctionne:
(MonPanel.Components[0] as TImage).OnMouseDown := Action1Execute;
Je ne comprends très bien pkoi.
Un exemple pourrait aider des débutants, je pense...
21 avril 2006 à 18:37
je vais vous poster un exemple , faites moi svp un cahier des charges -- serieux je rigole pas !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.