Convertisseur ?uro-francs

Contenu du snippet

convertisseur complet:
gere la gestion des deux zero apres la virgule(roundto)
bloc le clavier (editkeytext)
utlise des variable pour selectionner les editText
utlisitation dun label pour lancer une url sur le net
traitement de fichier help avec racourcci sur exe
form sous xp(xpman dans les uses)
fome a propos
modification du taux de change (form2)
bouton tspeedbutton pour donner de la couleur a votre txt.
Voila jai essaye de le faire simple et fonctionnel pour les utilisateurs et quelque explication dans le pas.
@++++++++
bopi

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, xpman, shellapi, math, Menus, Buttons;

type
  TMain = class(TForm)
    MainMenu1: TMainMenu;
    Fichiers1: TMenuItem;
    Apropos1: TMenuItem;
    Apropos2: TMenuItem;
    N1: TMenuItem;
    Lisezmoi1: TMenuItem;
    Quitter1: TMenuItem;
    Edit2: TEdit;
    Label1: TLabel;
    StatusBar1: TStatusBar;
    Label2: TLabel;
    Label3: TLabel;
    SpeedButton1: TSpeedButton;
    Edit1: TEdit;
    Quitter2: TMenuItem;
    SpeedButton2: TSpeedButton;
    Label4: TLabel;
    PopupMenu1: TPopupMenu;
    QU1: TMenuItem;
    procedure SpeedButton1Click(Sender: TObject);
    procedure Quitter2Click(Sender: TObject);
    procedure Quitter1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure Lisezmoi1Click(Sender: TObject);
    procedure Label4Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char); 
    procedure QU1Click(Sender: TObject);
    procedure Apropos2Click(Sender: TObject);
  private

  public
  convstr:string;
  end;
var
Main: TMain;
resultat:string;
{ Variable permettant de connaître l'Edit que l'on modifie}
ChampEditer:Integer;

{ J'ai rajouter une test supplémentaire pour savoir quel Edit on modifie pour
éviter que l'un provoque l'événement OnChange par rapport à l'autre.
}

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TMain.Edit1KeyPress(Sender: TObject; var Key: Char);
  begin  
    If Not(Key in ['0'..'9',#8,',','.']) Then Key := #0;
  { Indique au programme que l'on modifie l'Edit1}
  ChampEditer:=1;
  end;

procedure TMain.Edit2KeyPress(Sender: TObject; var Key: Char);
 begin
     If Not(Key in ['0'..'9',#8,',','.']) Then Key := #0;
  { Indique au programme que l'on modifie l'Edit2}
  ChampEditer:=2;
  end;
procedure TMain.SpeedButton1Click(Sender: TObject);
begin
close;
end;

procedure TMain.Quitter2Click(Sender: TObject);
begin
 close;
end;

procedure TMain.Quitter1Click(Sender: TObject);
begin
  Form2.show;
end;

procedure TMain.Edit1Change(Sender: TObject);
var
ch:char;
x:integer;
begin
{ici convertion du point en virgule}
if edit1.text<>'' then begin
convstr:=edit1.text;
x:=1;
while (convstr[x]<>'')do
begin
if convstr  [x]='.'then
begin
ch:=(',');
convstr[x]:=ch;
end;
x:=x+1
end;
{ On test si on modifie Edit2 car ce qui suit ne doit pas être exécuter du fait
que l'événement OnChange va s'exécuter vers Edit2 car on envoi le résulat vers
Edit2, donc changement de la valeur de Edit2}
if ChampEditer<>2 then
  begin
  { On teste si la longueur est vide pour mettre à zéro la valeur de Edit2.
  Cela est plus propre et évite que le programme conserve la dernière conversion
  effectuée.}
  if length(edit1.Text)=0 then edit2.Text:='';
  if edit1.text<>''then
  begin
    resultat:=floattostr(strtofloat(convstr)*strtofloat( form2.edit1.Text));
    resultat:=floattostr(roundto(strtofloat(resultat),-2));//ROUNDTO CONVERTI LES DEUX CHIFFRES APRES LA VIRGULE(ne pas oublier de mettre math dans uses}
    edit2.Text:=resultat;
  end;
  end;
  end;
  end;
procedure TMain.Edit2Change(Sender: TObject);
var
ch:char;
x:integer;
begin
if edit2.text<>'' then begin
convstr:=edit2.text;
x:=1;
while (convstr[x]<>'')do
begin
if convstr[x]='.'then
begin
ch:=(',');
convstr[x]:=ch;
end;
x:=x+1
end;
{ On test si on modifie Edit1 car ce qui suit ne doit pas être exécuter du fait
que l'événement OnChange va s'exécuter vers Edit1 car on envoi le résulat vers
Edit1, donc changement de la valeur de Edit1}
if ChampEditer<>1 then
  begin
  { On teste si la longueur est vide pour mettre à zéro la valeur de Edit1.
  Cela est plus propre et évite que le programme conserve la dernière conversion
  effectuée.}
  if length(edit2.Text)=0 then edit1.Text:='';
  if edit2.text<>'' then
  begin
    resultat:=floattostr(strtofloat(convstr)/strtofloat( form2.edit1.Text));
    resultat:=floattostr (roundto(strtofloat(resultat),-2));
    edit1.Text:=resultat;

end;
end;
end;
end ;
procedure TMain.SpeedButton2Click(Sender: TObject);
begin
 edit2.TEXT:='';
 Edit1.text:='';
end;
procedure TMain.Lisezmoi1Click(Sender: TObject);
begin
application.ShowMainForm:=false;
aboutbox.show;
end;

procedure TMain.Label4Click(Sender: TObject);
begin
ShellExecute(0,nil,'http://www.delphi.com',nil,nil,sw_maximize);
end;

procedure TMain.QU1Click(Sender: TObject);
begin
Application.helpjump('sommaire');
end;

procedure TMain.Apropos2Click(Sender: TObject);
begin
ShellExecute(Handle,'open','EURO_FRANC.HLP',nil,nil,SW_SHOWDEFAULT );
end;

end.

Conclusion :


Ceci est mon logiciel fini ,je pense que sa peut s ameliorer sur le fonctionnent ,si vous avez des astuces plus simple,envoier moi vos sources theobulck@msn.com,sinon pas de bug connu,merci
@++++++++++bopi

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.