tichau4
Messages postés27Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention14 février 2006 15 nov. 2005 à 20:46
OOOOOKKKK j'ai compris !
en tout cas MERCI BEAUCOUP ! tres enrichissant.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 15 nov. 2005 à 14:50
j'ai oublier d'ajouter :
quand tu click sur l'une des cellules des colones R1 ou R2 aprés calcul,
c'est la que la procedure StringGrid1SelectCell intervient.
cela permet de visualiser la resistance correspondante au resultat.
et pour eviter de refaire toute une methode qui modifie le dessin,
j'ai fait une procedure qui apel "dynamiquement" si je puis dire les procedures
existante deja assignée aux diverse combobox.
Proc est donc un pointeur sur procedure.
un petit bricolage qui fonctionne bien.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 15 nov. 2005 à 14:43
la procedure ChangeResistance permet d'appeler la methode "click" de l'un des combobox.
cela permet d'eviter de faire ungros bloc de traitement.
cette procedure permet en fait de modifier le dessins de la resistance, qui ne reagis que sur les OnClick des combobox.
parametres :
Liste : correspond au combobox que l'on souhaite modifier
Comptext : correspond a la chaine a rechercher dans le combobox
liste.itemindex := liste.items.IndexOf(comptext)
cette ligne permet de positionner l'index du combobox sur la chaine que l'on veux.
@proc := form1.MethodAddress(liste.name+'Proc');
on assigne a Proc la methode qui vas appeler la procedure "OnClick" de la combobox.
if @proc <> nil then proc;
si proc est different de "rien" alors on apel Proc (la procedure en fait).
les procedures assignée a Proc sont les procedures declarée en zone published :
LstE03Proc
LstE06Proc
LstE12Proc
ect...
c'est procedure appel les procedure OnClick de la combobox correspondante :
LstE03Proc apel la procedure ListE03Click();
LstE06Proc apel la procedure ListE06Click();
ect...
mais y'aurais eu d'autre methodes certainement mieux ... la je me suis basé surtout sur ton programme en essayant de respecter au maximum ta methode.
tichau4
Messages postés27Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention14 février 2006 8 nov. 2005 à 20:20
Maintenant, je comprend pourquoi mon code était pas bien !!!
j'ai pas trop pigé cette procedure :
// QUAND ON CLICK SUR LE TABLEAU
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean);
procedure ChangeResistance(var liste : tcombobox;comptext : string);
{ Proc sert a appeler les procedures lstExPROC }
var Proc : procedure of object;
begin
// on recherche l'index et on assigne le resultat a itemindex
liste.ItemIndex := liste.Items.IndexOf(comptext);
// Appel de la procedure correspondante pour rafraichir le dessin
// on recherche la methode dans Form1 grace au nom du composant
// et on lui ajoute "proc" pour correspondre a la procedure LstExProc
@Proc := Form1.MethodAddress(liste.Name+'Proc');
// si on a trouver la methode on l'execute
->> ?? If @Proc <> Nil Then Proc;
end;
tichau4
Messages postés27Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention14 février 2006 8 nov. 2005 à 19:22
MERCI BEAUCOUP fOxi
je croi que sa m'aidera beaucoup !!!!!
l'erreur dont je parlai est entre la serie E24 et E48, le prog trouvai 0% dans la E24 et 0.24% dans la E48 alors kil était possible de faire avec 0%.
Je reposerai un message apres avoir décortiqué le code ! lol vu que pas mal de fonction me sont inconnue !
Merci encore
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 7 nov. 2005 à 18:33
quel est le probleme exactement avec les erreurs de dixieme de % ?
ps : dans mon message precedent je dis :
- remplacement des groupbox d'affichage des resultats par un tstringlist avec en bonus des "gauges" pour la colone "difference" (gain de place, gain de poids, gain de methodes)
il fallait bien sur lire TStringGrid et pas TStringList (bug lol)
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 7 nov. 2005 à 18:27
salut, pas mal du tout!
j'ai regarder a ton code, en effet y'avait besoin d'un gros coups de menage.
Optimisation du code :
- suppression des methodes abusives et lourde pour des methodes plus legere et simple notament sur les calculs devant retourner des valeurs absolue grace a Abs() et sur le formatage du texte en retour des calculs grace a Format() (qui est pour moi la meilleure fonction de convertion Valeur vers Chaine)
- ajout de nombreux commentaires dans le code pour expliquer la plupart des methodes
- utilisation de CASE OF au lieu des longues serie de IF THEN
- ecriture de la variable "tableau de couleur" en Constante
- voir egalement l'apel de methodes publiées (zone Published), par leur nom avec un pointeur, passage interressant car trés pratique.
- utilisation de la fonction StrToFloatDef plutot que StrToFloat qui peu generer des erreur de convertion.
- Suppression de plusieurs variables inutile et rectification de la plupart des types de variables notament le type Single (32bit float signed) a la place de Real (64bit float signed) et Integer (32bits signed) pour tout les entiers a la place de shortint (8bits signed) et smallint (16bits signed).
Optimisation de l'interface :
- remplacement des listbox par des combobox (gain de place sur la fiche)
- remplacement des groupbox d'affichage des resultats par un tstringlist avec en bonus des "gauges" pour la colone "difference" (gain de place, gain de poids, gain de methodes)
- amelioration du dessin de la resistance et de la position des tshape sur celle ci, placement du dessin dans un TPanel pour que tout reste groupé.
- Ajout d'un "About box" pour les infos
- modification de certaines couleur dans le tableau de couleur, notament pour la couleur Argent (Argent = Gris-Bleutée comme la plupart des meteaux "blanc") mais c'est la une nuances presque invisible (gain of nuance ^^)
- l'interface retrouve sa propriété BackgroundColor a clBtnFace au detriment de clWhite (moche!)
- suppression des contraintes de taille de Form1 pour la propriété BorderStyle a BsSingle (non redimensionable) et boutton "maximize" desactivé.
- remplacement du "ShowMessage" dans cmdChercheClick par un "MessageDlg" de type avertissement.
- remise en etat de l'affichage des decimales (2) pour la colone "rapport" dans les resultats pour obtenir une meilleur precision de lecture.
bon heu ... je crois que j'ai tout expliquer ...
j'attend avec impatiente ton verdict.
tichau4
Messages postés27Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention14 février 2006 4 nov. 2005 à 22:10
Merci d'avoir repondu.
C'est vrai que j'ai fait le programme un peut n'importe comment (pas de commentaire). Comment faire pour optimiser le code ?
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 3 nov. 2005 à 22:09
Si je me souvient bien un pont diviseur c'est ( U1 * R2 ) / (R1 + R2) !? c'est tellement loin tous çà ...
Sinon parlon programme :
- Interface simple, pas de couleur criarde, jolie, nikel
( Prise en compte de la series du composant, çà c'est rarement fait, bien )
- Code.. alors la c'est moin bien, deja çà marche c'est le principal, mais
çà manque de commentaires, et surtout tu n'as pas bien découpé ton projet ;
ta mis 300 lignes de code derrieres ton bouton, çà peut etre largement plus
optimiser (surtout pour le calcul en fonction des combo des series ..etc.).
(et plus lisible).
15 nov. 2005 à 20:46
en tout cas MERCI BEAUCOUP ! tres enrichissant.
15 nov. 2005 à 14:50
quand tu click sur l'une des cellules des colones R1 ou R2 aprés calcul,
c'est la que la procedure StringGrid1SelectCell intervient.
cela permet de visualiser la resistance correspondante au resultat.
et pour eviter de refaire toute une methode qui modifie le dessin,
j'ai fait une procedure qui apel "dynamiquement" si je puis dire les procedures
existante deja assignée aux diverse combobox.
Proc est donc un pointeur sur procedure.
un petit bricolage qui fonctionne bien.
15 nov. 2005 à 14:43
cela permet d'eviter de faire ungros bloc de traitement.
cette procedure permet en fait de modifier le dessins de la resistance, qui ne reagis que sur les OnClick des combobox.
parametres :
Liste : correspond au combobox que l'on souhaite modifier
Comptext : correspond a la chaine a rechercher dans le combobox
liste.itemindex := liste.items.IndexOf(comptext)
cette ligne permet de positionner l'index du combobox sur la chaine que l'on veux.
@proc := form1.MethodAddress(liste.name+'Proc');
on assigne a Proc la methode qui vas appeler la procedure "OnClick" de la combobox.
if @proc <> nil then proc;
si proc est different de "rien" alors on apel Proc (la procedure en fait).
les procedures assignée a Proc sont les procedures declarée en zone published :
LstE03Proc
LstE06Proc
LstE12Proc
ect...
c'est procedure appel les procedure OnClick de la combobox correspondante :
LstE03Proc apel la procedure ListE03Click();
LstE06Proc apel la procedure ListE06Click();
ect...
mais y'aurais eu d'autre methodes certainement mieux ... la je me suis basé surtout sur ton programme en essayant de respecter au maximum ta methode.
8 nov. 2005 à 20:20
j'ai pas trop pigé cette procedure :
// QUAND ON CLICK SUR LE TABLEAU
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean);
procedure ChangeResistance(var liste : tcombobox;comptext : string);
{ Proc sert a appeler les procedures lstExPROC }
var Proc : procedure of object;
begin
// on recherche l'index et on assigne le resultat a itemindex
liste.ItemIndex := liste.Items.IndexOf(comptext);
// Appel de la procedure correspondante pour rafraichir le dessin
// on recherche la methode dans Form1 grace au nom du composant
// et on lui ajoute "proc" pour correspondre a la procedure LstExProc
@Proc := Form1.MethodAddress(liste.Name+'Proc');
// si on a trouver la methode on l'execute
->> ?? If @Proc <> Nil Then Proc;
end;
8 nov. 2005 à 19:22
je croi que sa m'aidera beaucoup !!!!!
l'erreur dont je parlai est entre la serie E24 et E48, le prog trouvai 0% dans la E24 et 0.24% dans la E48 alors kil était possible de faire avec 0%.
Je reposerai un message apres avoir décortiqué le code ! lol vu que pas mal de fonction me sont inconnue !
Merci encore
7 nov. 2005 à 18:33
ps : dans mon message precedent je dis :
- remplacement des groupbox d'affichage des resultats par un tstringlist avec en bonus des "gauges" pour la colone "difference" (gain de place, gain de poids, gain de methodes)
il fallait bien sur lire TStringGrid et pas TStringList (bug lol)
7 nov. 2005 à 18:27
j'ai regarder a ton code, en effet y'avait besoin d'un gros coups de menage.
plutot que de citer les modif a apporter j'ai modifier directement ta version,
voila l'archive : http://darklineteam.free.fr/calculresist.rar
tu pourrat noter ces modifs :
Optimisation du code :
- suppression des methodes abusives et lourde pour des methodes plus legere et simple notament sur les calculs devant retourner des valeurs absolue grace a Abs() et sur le formatage du texte en retour des calculs grace a Format() (qui est pour moi la meilleure fonction de convertion Valeur vers Chaine)
- ajout de nombreux commentaires dans le code pour expliquer la plupart des methodes
- utilisation de CASE OF au lieu des longues serie de IF THEN
- ecriture de la variable "tableau de couleur" en Constante
- voir egalement l'apel de methodes publiées (zone Published), par leur nom avec un pointeur, passage interressant car trés pratique.
- utilisation de la fonction StrToFloatDef plutot que StrToFloat qui peu generer des erreur de convertion.
- Suppression de plusieurs variables inutile et rectification de la plupart des types de variables notament le type Single (32bit float signed) a la place de Real (64bit float signed) et Integer (32bits signed) pour tout les entiers a la place de shortint (8bits signed) et smallint (16bits signed).
Optimisation de l'interface :
- remplacement des listbox par des combobox (gain de place sur la fiche)
- remplacement des groupbox d'affichage des resultats par un tstringlist avec en bonus des "gauges" pour la colone "difference" (gain de place, gain de poids, gain de methodes)
- amelioration du dessin de la resistance et de la position des tshape sur celle ci, placement du dessin dans un TPanel pour que tout reste groupé.
- Ajout d'un "About box" pour les infos
- modification de certaines couleur dans le tableau de couleur, notament pour la couleur Argent (Argent = Gris-Bleutée comme la plupart des meteaux "blanc") mais c'est la une nuances presque invisible (gain of nuance ^^)
- l'interface retrouve sa propriété BackgroundColor a clBtnFace au detriment de clWhite (moche!)
- suppression des contraintes de taille de Form1 pour la propriété BorderStyle a BsSingle (non redimensionable) et boutton "maximize" desactivé.
- remplacement du "ShowMessage" dans cmdChercheClick par un "MessageDlg" de type avertissement.
- remise en etat de l'affichage des decimales (2) pour la colone "rapport" dans les resultats pour obtenir une meilleur precision de lecture.
bon heu ... je crois que j'ai tout expliquer ...
j'attend avec impatiente ton verdict.
4 nov. 2005 à 22:10
C'est vrai que j'ai fait le programme un peut n'importe comment (pas de commentaire). Comment faire pour optimiser le code ?
3 nov. 2005 à 22:09
Si je me souvient bien un pont diviseur c'est ( U1 * R2 ) / (R1 + R2) !? c'est tellement loin tous çà ...
Sinon parlon programme :
- Interface simple, pas de couleur criarde, jolie, nikel
( Prise en compte de la series du composant, çà c'est rarement fait, bien )
- Code.. alors la c'est moin bien, deja çà marche c'est le principal, mais
çà manque de commentaires, et surtout tu n'as pas bien découpé ton projet ;
ta mis 300 lignes de code derrieres ton bouton, çà peut etre largement plus
optimiser (surtout pour le calcul en fonction des combo des series ..etc.).
(et plus lisible).
Sinon je trouve ce prog sympa !
Damien