CALCUL DE RÉSISTANCES

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 3 nov. 2005 à 22:09
tichau4 Messages postés 27 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 14 février 2006 - 15 nov. 2005 à 20:46
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/34474-calcul-de-resistances

tichau4 Messages postés 27 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 14 février 2006
15 nov. 2005 à 20:46
OOOOOKKKK j'ai compris !
en tout cas MERCI BEAUCOUP ! tres enrichissant.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 27 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 14 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és 27 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 14 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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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.

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.
tichau4 Messages postés 27 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 14 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és 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
3 nov. 2005 à 22:09
Ah delire un programme de calcul de resistance, j'en avait fait un quand j'etait en electronique, mais moi c'etait juste pour trouver la valeur ou la couleur du composant http://www.01net.com/telecharger/windows/Loisirs/electronique/fiches/18767.html (paye ta pub)

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
Rejoignez-nous