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
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.