Soyez le premier à donner votre avis sur cette source.
Vue 8 254 fois - Téléchargée 836 fois
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button5: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var VertPos:integer; Form1: TForm1; Objects: array of TControl; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if length(Objects)=0 then VertPos:=20; setlength(Objects,length(Objects)+1); Objects[length(Objects)-1]:=TLabel.create(Application); (Objects[length(Objects)-1] as TLabel).Parent:=Form1; (Objects[length(Objects)-1] as TLabel).Name:='Label'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TLabel).Caption:='Label'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TLabel).Top:=VertPos; (Objects[length(Objects)-1] as TLabel).Left:=20; VertPos:=VertPos+20; end; procedure TForm1.Button2Click(Sender: TObject); begin if length(Objects)=0 then VertPos:=20; setlength(Objects,length(Objects)+1); Objects[length(Objects)-1]:=TButton.create(Application); (Objects[length(Objects)-1] as TButton).Parent:=Form1; (Objects[length(Objects)-1] as TButton).Name:='Button'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TButton).Caption:='Button'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TButton).Top:=VertPos; (Objects[length(Objects)-1] as TButton).Left:=20; VertPos:=VertPos+30; end; procedure TForm1.Button3Click(Sender: TObject); begin if length(Objects)=0 then VertPos:=20; setlength(Objects,length(Objects)+1); Objects[length(Objects)-1]:=TMemo.create(Application); (Objects[length(Objects)-1] as TMemo).Parent:=Form1; (Objects[length(Objects)-1] as TMemo).Name:='Memo'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TMemo).Text:='Memo'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TMemo).Top:=VertPos; (Objects[length(Objects)-1] as TMemo).Left:=20; VertPos:=VertPos+95; end; procedure TForm1.Button4Click(Sender: TObject); begin if length(Objects)=0 then VertPos:=20; setlength(Objects,length(Objects)+1); Objects[length(Objects)-1]:=TEdit.create(Application); (Objects[length(Objects)-1] as TEdit).Parent:=Form1; (Objects[length(Objects)-1] as TEdit).Name:='Edit'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TEdit).Text:='Edit'+inttostr(length(Objects)-1); (Objects[length(Objects)-1] as TEdit).Top:=VertPos; (Objects[length(Objects)-1] as TEdit).Left:=20; VertPos:=VertPos+30; end; procedure TForm1.Button5Click(Sender: TObject); var iloop:integer; begin for iloop:=0 to length(Objects)-1 do Objects[iloop].Free; Setlength(Objects,0); end; End.
21 août 2007 à 16:01
27 déc. 2005 à 20:33
Pour les composants TDbEdit, TDbMemo ou TDbCheckbox, il n'y a pas d'ancêtre commun au delà de TWinControl (si tu as le poster de la hiérarchie de la VCL, jettes-y un oeil). Autant dire que c'est quasiment impossible de réaliser un code commun au traitement des différents cas de figure (composants "simples" et composants orientés données).
27 déc. 2005 à 10:04
Dans le même genre, je crée des DBEdit, DBMemo et DBCheckBox. A chaque fois je doit définir leur propriété DataField et DataSource. J'ai voulu centraliser çà au lieu d'avoir un cas particulier pour chaque type de composant DB, mais rien à faire, ils n'ont pas de composant parent avec ces propriétés en commun, et je me retrouve obligé de faire une série de "if ... is ... then".
Bref, je ne réussit à avoir en commun que les propriétés les plus basiques: top, left, parent, tag et name.
26 déc. 2005 à 20:31
Or, la lecture d'un code source devrait suffire pour comprendre quelles actions sont réalisées par les différents composants !
Il est également bien venu d'appliquer un minimum de conventions comme préfixer ses boutons par "btn", les TEdit par "ed", etc.
C'est un conseil que je te donne, après tu en fais ce que tu veux...
Pour le TComponentlist, je crois me souvenir qu'il existait déjà sous Delphi 4.
Pour info : les métaclasses sont également appelées références de classe. D'ailleurs, en consultant l'aide en ligne, tu trouveras un exemple de code exploitant le principe des métaclasses.
Que Delphi soit avec toi. ;o)
26 déc. 2005 à 16:16
TComponentList: C'est récent non? Je me suis remit à Delphi depuis très peu de temps après 5 ans d'absence, et à l'époque il me semble que le tableau dynamique était la seule solution. Maintenant que je sais qu'il existe, je vais explorer un peu ce TComponentList avec grand plaisir =)
MetaClasses: Encore quelque chose que j'ignorais, et le point sur lequel je butais. Je vais de ce pas approfondir, je sens que çà va bien m'aider.
Nommage: oui, un peu de fainéantise de ma part, je l'avoue, mais en même temps il n'y a pas 36k boutons, et leurs captions sont assez explicites.
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.