Calculatrice convertisseur franc - euro avec dll dynamique

Description

Pour les débutants en Delphi, voici une application toute simple pour vous : une calculatrice convertisseur Franc euro avec dll dynamique.

Une application toute simple pour vous faire la main et surtout pour vous montrer une astuce toute simple sur l'utilisation de la propriété Sender de la classe TObject que vous n'avez qu'à déclarer en classe TButton. En effet, tout débuttant programme de cette façon :
ecran.text := ecran.text + '1'; pour le bouton 1 et ainsi de suite alors qu'on peut faire plus court.

Enfin, vous n'avez qu'à prendre connaissance du code ci-dessous et aussi de télécharger le zip ci-joint.

Source / Exemple :


----------------------
 // Création de la dll \\

Pour cela, lancer delphi puis faites fermer tout. Puis dans le menu, faites fichier, nouveau. Choississez dll. Puis faites fichier, nouveau et cette fois choississez unité. Sauvegarder votre projet l'unité. Par défaut, mon projet se prénomme "conversion_dll.dpr" et l'unit" en "convertfct_dll.pas" Dans convertfct_dll.pas, vous devez saisir les fonctions nécéssaires pour la conversion. ATTENTION, vous devez le saisir dans le second onglet ou se trouve les mots UNIT, INTERFACE, IMPLEMENTATION et non celle contenant le mot LIBRARY et USES. Voici la source : unit convertfct_dll; interface implementation // fonction qui convertit une somme entrée en euro en franc function euro_franc(devise, interm : real):real; begin euro_franc := devise * interm; end; // fonction qui convertit une somme entrée en franc en euro function franc_euro(devise, interm : real):real; begin franc_euro := devise / interm; end; // on exporte les fonctions de la dll pour que le ou les programmes puisse les utiliser exports euro_franc, franc_euro; end. Maintenant, revenez sur le premier onglet dont le mot "LIBRARY" et "USES" apparaissent. Vous devez effacez les ces 2 instructions SysUtils et Classes. Il vous reste uniquement dans USES ceci : convertfct_dll in 'convertfct_dll.pas' ; Maintenant, enregistrer ce projet et compiler le dans le menu "PROJET - COMPLILER" ou par le raccourci CTRL + F9. Ne l'exécuter surtout pas car vous aurez un message d'erreur. Votre dll est crée, passons à la calculatrice. ------------------------------- // Création de la calculatrice\\
Créez un nouveau projet. Par défaut, je l'ai nommé "Convertisseur_dll.dpr" et le ficher unit sous "convertisseur.pas". Placez vos labels et boutons comme sur la photo ci-joint et présent dans le zip. Pour coder les boutons des chiffres (de 0 à 9), de la virgule et des opérateurs, nous allons utiliser la propriété SENDER de la classe TButton. De cette façon, au lieu d'avoir des lignes de codes pour chaque chiffre car seul diffère les nombre, il est interessant d'utiliser un objet de la classe TButton. Pour cela, on utilisera : (Sender as TButton).caption. Par cette méthode, les boutons de chiffres (0 à 9) utilisent la même procédure (dans mon exemple, le nom de la méthode "procedure chiffreClick(Sender: TObject)". Pensez à ajouter, la procédure à l'événement OnClick(). Les opérateurs (sauf le égal)utilisent eux aussi utilisent la même procédure "procedure operateurClick(Sender: TObject);". Maintenant, je vous laisse la source ci-dessous : unit convertisseur; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tcalculette = class(TForm) GroupBox: TGroupBox; btn0: TButton; btnpoint: TButton; btnegal: TButton; btn1: TButton; btn2: TButton; btn3: TButton; btn4: TButton; btn5: TButton; btn6: TButton; btn7: TButton; btn8: TButton; btn9: TButton; btndivise: TButton; btnmultiplie: TButton; btnmoins: TButton; btnplus: TButton; btneuro: TButton; btnfranc: TButton; btnquitter: TButton; Label1: TLabel; Label2: TLabel; convecran: TLabel; ecran: TLabel; btnC: TButton; btnCE: TButton; procedure btnquitterClick(Sender: TObject); procedure chiffreClick(Sender: TObject); procedure operateurClick(Sender: TObject); procedure btnegalClick(Sender: TObject); procedure btnCClick(Sender: TObject); procedure btnCEClick(Sender: TObject); procedure btneuroClick(Sender: TObject); procedure btnfrancClick(Sender: TObject); private { Déclarations privées } // déclaration du nombre entrée après une opération ou un résultat appelé "mémoire" memoire,actuel : real; // actuel correspond à la valeur de l'affichage du label avant l'opérateur '=' // déclaration de l'opérateur choisi (+, -, *, /, =) operateur : char; {déclaration de type booleenne permettant de savoir si l'utilisateur a utilisé l'opérateur '=' ou non } egal : boolean; // renvoi une réponse de type oui non si l'opérateur a appuyer sur '=' nbconvert : boolean; // renvoie une réponse de type oui non si l'utilisateur a converti un nombre public { Déclarations publiques } end; TEuro_franc=function(euro,constante:real):real; TFranc_euro=function(fr,constante:real):real; var calculette: Tcalculette; implementation {$R *.DFM} procedure Tcalculette.btnquitterClick(Sender: TObject); begin // Fin de l'application, on quitte le programme application.terminate; end; {Tous les boutons des chiffres utilisent cette procédure en utilisant la le paramètre "Sender" associé au caption du bouton cliqué en question } procedure Tcalculette.chiffreClick(Sender: TObject); begin // Initialise l'écran lorsque l'opérateur a demandé d'exécuter une égalité // et qu'il recommence de nouveaux calculs if egal = true then begin ecran.caption := ''; egal := false; end; // Si l'utilisateur a effectué une conversion alors on efface la valeur if nbconvert = true then begin convecran.caption := ''; ecran.caption :=''; label1.visible := false; label2.visible := false; convecran.visible := false; nbconvert := false; end; // Cas ou le nombre est égal à zéro if ecran.caption='0' then begin // Lorsque l'on clique sur la ',' if (Sender as TButton).caption =',' then begin ecran.caption := ecran.caption + (Sender as TButton).caption; end; // On empêche l'utilisateur de saisir plusieurs 0 en début de nombre if ecran.caption = '' then begin ecran.caption := '0' + (Sender as TButton).caption; end; end; // On exécute la condition à savoir si l'utilisateur à saisi le point auparavant if (Sender as TButton).caption =',' then begin // On recherche la position du point dans le label if pos(',', ecran.caption) > 0 then exit ;// si présence du ',' alors on ne met pas une autre virgule end; // S'il n'y a pas d'entier devant alors on ajoute un zéro devant la virgule if ecran.caption ='' then begin if (Sender as TButton).caption =',' then begin ecran.caption := '0' + (Sender as TButton).caption; exit; end; end ; // affichage sur le label de droite (en Franc) ecran.caption := ecran.caption + (Sender as Tbutton).caption; end; procedure Tcalculette.operateurClick(Sender: TObject); begin { on verifie qu'il y est au moins une valeur saisie dans le label alors que la mémoire est NULL} if ecran.caption = '' then begin // si vide alors on sort et on exécute les autres instructions exit; end; {on stocke la valeur contenue dans l'edit de droite lorsque l'opérateur cliqué sur un des 5 opérateurs au choix} memoire := StrToFloat(ecran.caption); // conversion de string en float {mise en mémoire de l'opérateur choisi par l'utilisateur dans un tableau d'une valeur} operateur := (Sender as TButton).caption[1]; // on efface l'écrand pour saisir un autre nombre ecran.caption := ''; end; procedure Tcalculette.btnegalClick(Sender: TObject); begin // on récupère la valeur présente dans le label lorsque l'utilisateur clique sur '=' actuel := StrToFloat(ecran.caption); // Effectuer le calcul du résultat selon le nombre présent dans la mémoire puis l'opération précédemment effectuée et le nombre actuel case operateur of '-': ecran.caption := FloatToStr(memoire-actuel); '+': ecran.caption := FloatToStr(memoire+actuel); '*': ecran.caption := FloatToStr(memoire*actuel); '/': { si l'utilisateur calcul un nombre et divisé par zéro ce qui est interdit, alors envoyé un message d'erreur } if actuel = 0 then begin ShowMessage('ATTENTION : il est interdit de diviser un nombre par 0. Veuillez consulter vos cours de MATHS'); ecran.caption := ''; end else // si autre valeur que divisé par zéro ecran.caption := FloatToStr(memoire/actuel); end; {on affecte la valeur VRAIE pour que le prochain nombre écrit, on efface le champ du label} egal := true; end; procedure Tcalculette.btnCClick(Sender: TObject); begin // on efface uniquement le nombre saisi, pas celle de la mémoire (dans ce cas, l'utilisateur devra se servir de la touche 'CE' ecran.caption := ''; end; procedure Tcalculette.btnCEClick(Sender: TObject); begin // On efface le nombre saisi, le nombre converti ET celui contenu dans la mémoire memoire := 0; ecran.caption := ''; convecran.caption := ''; end; procedure Tcalculette.btneuroClick(Sender: TObject); var euro, fr, constante : real; streuro, strfr, nomdll : string; hdll : HINST; euro_franc : TEuro_franc; begin // On convertit le chiffre de string en un flottant euro := StrToFloat(ecran.caption); constante := 6.55957; nomdll := 'conversion_dll.dll'; // nom de la DLL hdll := loadlibrary(PChar(nomdll)); // chargement de la DLL if hdll=0 then ShowMessage('Erreur, vous ne pouvez pas effectuez cette action car une DDL ' + nomdll + ' est manquante.'); @euro_franc:=getprocaddress(hdll,'euro_franc'); //affectation de la fonction euro_franc de la dll à la fonction euro_franc du programme fr := euro_franc(euro,constante); // utilisation de la fonction euro_franc freelibrary(hdll); // libération de la mémoire // On formate l'affichage à 2 chiffrs après la virgule streuro := FormatFloat('0.00', euro); strfr := FormatFloat('0.00', fr); // Rend visible les labels cachés label1.Visible := true; label2.Visible := true; convecran.visible := true; // on renvoie le résultat aux labels convecran.caption := streuro; ecran.caption := strfr; // on a convertit donc vrai nbconvert := true; end; procedure Tcalculette.btnfrancClick(Sender: TObject); var euro, fr, constante : real; streuro, strfr, nomdll : string; hdll : HINST; franc_euro : TFranc_euro; begin // On convertit le chiffre de string en un flottant fr := StrToFloat(ecran.caption); constante := 6.55957; nomdll := 'conversion_dll.dll'; // nom de la DLL hdll := loadlibrary(PChar(nomdll)); // chargement de la DLL if hdll=0 then ShowMessage('Erreur, vous ne pouvez pas effectuez cette action car une DDL ' + nomdll + ' est manquante.'); @franc_euro:=getprocaddress(hdll,'franc_euro'); //affectation de la fonction franc_euro de la dll à la fonction convertFREU du programme euro :=franc_euro(fr,constante); // utilisation de la fonction franc_euro freelibrary(hdll); // libération de la mémoire // On formate l'affichage à 2 chiffrs après la virgule strfr := FormatFloat('0.00', fr); streuro := FormatFloat('0.00', euro); // Rend visible les labels cachés label1.Visible := true; label2.Visible := true; convecran.visible := true; // on renvoie le résultat aux labels convecran.caption := streuro; ecran.caption := strfr; // on a convertit donc vrai nbconvert := true; end; end.

Conclusion :


J'espère que cette source vous satisfait.

Bonne prog @ tous.

Et mes sincères salutations à Nix pour ses fabuleux sites... Bonne continuation !!!
ps : à Nix >> à quand un site sur PowerBuilder ?

Codes Sources

A voir également

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.