CREATION ET GESTION DYNAMIQUE D'UN COMPOSANT TSHAPE

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 10 nov. 2008 à 11:02
lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 mai 2009 - 19 nov. 2008 à 14:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48408-creation-et-gestion-dynamique-d-un-composant-tshape

lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 mai 2009
19 nov. 2008 à 14:01
(Offlake)
désolé mais je ne voit pas l'utilité de ton commentaire.
merci de préciser
offlake Messages postés 190 Date d'inscription mercredi 3 septembre 2008 Statut Membre Dernière intervention 17 janvier 2009
14 nov. 2008 à 11:12
Revaliser sans doute pas!!
By Offlake
lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 mai 2009
11 nov. 2008 à 10:19
Merci beaucoup pour m’avoir accordé autant de temps a corrigé mes bourdes, et puis rien a dire , j’espère au moyen qu’un jour je pourrai rivalisé avec sa
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 nov. 2008 à 23:37
Lol JulioDelphi :

"http://diabloporc.free.fr/delphi/lord948.zip garantie sans virus :]"

Le petit sourire à la fin n'est pas fait pour renforcer l'idée de ta phrase ^^
Je veux dire on va se douter d'un truc là ...

:]

Cordialement, Bacterius !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 nov. 2008 à 20:48
ps : lien vers mon .zip :
http://diabloporc.free.fr/delphi/lord948.zip garantie sans virus :]
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 nov. 2008 à 20:47
Main.pas :
----------
1) Renommer TOUS les composants afin de savoir à quoi sert le Button1 ou le RadioButton2 ...
2) Réindentation du code.
3) Modification des 'cast' ex: (Source as TShape).Machin -> TShape(Source).Machin
4) Suppression du OnFormResize qui est inutile car les propriétés "Anchors" des composants servent à ça.
5) Modification de ... :
case Shape1.Shape of
stCircle: ComboBox1.ItemIndex := 0;
stEllipse: ComboBox1.ItemIndex := 1;
stRectangle: ComboBox1.ItemIndex := 2;
stRoundRect: ComboBox1.ItemIndex := 3;
stRoundSquare: ComboBox1.ItemIndex := 4;
stSquare: ComboBox1.ItemIndex := 5
end;
--> ... en une seule ligne :
cb_Shape.ItemIndex := Ord(ShapeDemo.Shape); // Ord() : ordinal d'un type énuméré par exemple.
Pour cela, j'ai dû retrier le contenu de la ComboBox dans le même ordre que le type énuméré.
6) Ajout d'un petite vérif : "if (Objet is TShape) then"

Propr.pas :
-----------
1) Renommer TOUS les composants
2) Modification de ... :
case ComboBox1.ItemIndex of
0:Shape1.Shape := stCircle;
1:Shape1.Shape := stEllipse;
2:Shape1.Shape := stRectangle;
3:Shape1.Shape := stRoundRect;
4:Shape1.Shape := stRoundSquare;
5:Shape1.Shape := stSquare
end
--> ... en une seule ligne :
ShapeDemo.Shape := TShapeType(cb_Shape.ItemIndex);
Hop, un cast avec le type énuméré !
3) Modification de :
procedure TPagesDlg.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.GetTextLen > 0) and (not (key in #8,'0'..'9')) then key:=#0
end;

procedure TPagesDlg.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.GetTextLen > 0) and (not (key in #8,'0'..'9')) then key:=#0
end;

procedure TPagesDlg.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.GetTextLen > 0) and (not (key in #8,'0'..'9')) then key:=#0
end;

procedure TPagesDlg.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.GetTextLen > 0) and (not (key in #8,'0'..'9')) then key:=#0
end;

Déjà il y a une erreur de copié/collé car tu vérifie toujours "Edit1.GetTextLen", puis quand tu fais 4 procédure identiques, tu ne trouves pas ça un peu inutile ?
Voici une seule ligne :
if (TEdit(Sender).GetTextLen > 0) and (not (key in #8,'0'..'9')) then key:=#0
Tu mets cette procédure pour les 4 TEdit ! Le sender s'occupe du reste.
4) Supression des 2 RadioButton dont tu détournais l'utilisation pour ajouter des ColorBox. Code :
if Sender=color_Fond then
ShapeDemo.Brush.Color := color_Fond.Selected
else ShapeDemo.Pen.Color := color_Contour.Selected;
5) Suppression du Close; dans la procedure du bouton OK, tu es en ShowModal et ton bouton retourne le code mrOK ! A quoi sert le close !?
6) Ajout d'une petite touche perso : une case a cocher pour mettre le shape en pointillé, Code :

procedure TFormPagesDlg.chk_dottedClick(Sender: TObject);
const Styles: array[Boolean] of TPenStyle = (psSolid, psDot);
begin
ShapeDemo.Pen.Style:= Styles[chk_dotted.Checked]
end;

J'ai aussi modifié les DFM, pour réorganiser un peu, renommer, etc etc
Qu'en penses tu ?
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 nov. 2008 à 11:02
Salut !
Source sans grand intérêt mais qui peut etre sympa si tout est bien géré. Pas mal de personnes se posent des questions sur la création dynamique.
Je n'ai pas encore testé, juste lu le code en travers et je vois un peu trop de procedures identiques, on peut simplifier tout ça à mon avis :]
Je regarde ce soir, bon courage.
Rejoignez-nous