CONVERTISSEUR MULTI DEVISES

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 9 juin 2002 à 10:56
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 9 juin 2002 à 10:56
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/11971-convertisseur-multi-devises

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 juin 2002 à 10:56
Une dernière chose mais qui a son importance :
Au démarrage de l'appli, tu crées un Tbitmap :
fond := tbitmap.create;
fond.LoadFromResourceName(hinstance, 'Bitmap1');
form1.Brush.Bitmap := fond;

Seulement voilà, "Fond" n'a pas de propriétaire et donc personne chargé de le détruire à la sortie !
= fuite mémoire
Quand tu fermes ton application, libères les ressouces allouées à Fond par un appel à sa méthode Free.
Ouf !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 juin 2002 à 10:18
Aurais tu oublié de protéger contre les erreurs de division par zéro ?
> nb1 : strtofloat(edit1.text) / tdevise[5].valeur;
Or TDevise[5] est égal à zéro au démarrage. Désactives les boutons pour lesquels le champ valeur du tableau TDevise est à zéro.

Sinon, que se passe-t-il si le fichier devise.dat est manquant ou endommagé ? Je n'ai vu aucun traitement dans ce cas (If FileExists('Devise.Dat') then...)

Pour le style, tu peux facilement traiter plusieurs composants dans une boucle au lieu de coder du genre :
if ed_val1.Text = '' then
ed_val1.text := '0';
if ed_val2.Text = '' then
ed_val2.text := '0';
if ed_val3.Text = '' then
ed_val3.text := '0';
if ed_val4.Text = '' then
ed_val4.text := '0';
if ed_val5.Text = '' then
ed_val5.text := '0'; ,etc

et remplacer plus élégamment par :
//Initialisations
for i:= 1 to 5 do
begin
With TEdit(FindComponent('ed_val'+IntToStr(i))) do
if Text = '' then
begin
Text := '0';
tdevise[i].valeur := 0;
end;
With TEdit(FindComponent('ed_decimal'+IntToStr(i))) do
if Text = '' then
begin
Text := '0';
tdevise[i].decimal := 0;
end;
With TEdit(FindComponent('ed_nom'+IntToStr(i))) do
tdevise[i].nom := Text;

tdevise[i].cle := i;
end;
Tu remarqueras que quand tu mets :
Editxx.Text := '0'
et que, juste aprés, tu écris :
TDevise[n].Decimal := StrToInt(Editxx.Text);
il y a de l'optimisation possible.
Puisque tu connais la valeur contenue dans le contrôle, il est inutile de faire des conversions. Affectes directement la valeur.

Ce ne sont là que quelques pistes de réflexion et STP, inutile de joindre les .exe, les .DCU et les .~* dans ton fichier zip. On est capables de les recréer...

Terminons par un point positif : le design est pas mal.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 juin 2002 à 09:34
Aurais tu oublié de protéger contre les erreurs de division par zéro ?
Rejoignez-nous