Objectif : Effectuer la saisie de 2 entiers et n'autoriser le calcul de leur somme et de leur produit que lorsque les 2 entiers sont entrés, la sécurité sur les données est effectuée au premier niveau par "plan d'action" .
Le graphe événementiel associé à l'énoncé
La fiche principale, le code associé dans la unit
Exécuter
le programme
La fiche principale du projet :
Remonter
Le graphe
événementiel :
Le code de la Unit fiche principale :
unit UFcalcul;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
ButtonCalcul: TButton;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
LabelSomme: TLabel;
LabelProduit: TLabel;
Label3: TLabel;
Label4: TLabel;
Buttoneffacer: TButton;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure ButtonCalculClick(Sender: TObject);
procedure ButtoneffacerClick(Sender: TObject);
private
{ Déclarations privées
}
public
{ Déclarations publiques
}
end;
var
Form1: TForm1;
Som_ok,Prod_ok:boolean;
implementation
// les erreurs de conversion ne sont pas gérées,
on utilisera plus tard
// les exceptions pour effectuer ce traitement.
{$R *.DFM}
{------------------- Utilitaires de service
-------------------}
procedure TestEntrees;
{les 2 drapeaux sont-ils levés}
begin
if Prod_ok and Som_ok then
Form1.ButtonCalcul.enabled:=true //
si oui: le bouton calcul est activé
end;
procedure RAZTout;
begin
with Form1 do
begin
Buttoneffacer.enabled:=false;
// le bouton effacer se désactive
ButtonCalcul.enabled:=false;
//
le bouton calcul se désactive
LabelSomme.caption:='0';
LabelProduit.caption:='0';
Edit1.clear;
Edit2.clear;
Prod_ok:=false;
Som_ok:=false;
end
end;
{---------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
RAZTout;
end;
// les plans d'action sont matérialisés par l'événement OnChange de Edit1 et Edit2
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.text<>'' then
begin
Som_ok:=true; // drapeau de Edit1 levé
TestEntrees; // permet de rentrer
les entiers dans un ordre quelconque
end
else
begin
ButtonCalcul.enabled:=false;
Som_ok:=false; // drapeau de
Edit1 baissé
end
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
if Edit2.text<>'' then
begin
Prod_ok:=true; // drapeau de Edit2
levé
TestEntrees; // permet de rentrer
les entiers dans un ordre quelconque
end
else
begin
ButtonCalcul.enabled:=false;
Prod_ok:=false; // drapeau de
Edit2 baissé
end
end;
procedure TForm1.ButtonCalculClick(Sender: TObject);
var S,P:integer;
begin
S:=strtoint(edit1.text);
P:=strtoint(edit2.text);
LabelSomme.caption:=inttostr(P+S);
LabelProduit.caption:=inttostr(P*S);
Buttoneffacer.enabled:=true
// le bouton effacer est activé
end;
procedure TForm1.ButtoneffacerClick(Sender: TObject);
begin
RAZTout;
end;