Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi_jak ošetřit špatné zadání

Ahoj lidi, začínám s Delphi a nepřišel jsem na to, jak ošetřit:
- nezadání proměné (a1 - a3)
- zadání proměné (a1 - a3) ve špatném tvaru

Děkuji za radu
Martin

unit aaa;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a1,a2,a3,a4: Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  a1:=StrToInt(Edit1.Text);
  a2:=StrToInt(Edit2.Text);
  a3:=StrToInt(Edit3.Text);
  a4:=a1+a2+a3;
  Edit4.Text:=IntToStr(a4);
end;

end.
Předmět Autor Datum
tak si predtim nez zacnes prirazovat tohle "a1:=StrToInt(Edit1.Text);", zkontroluj co v tom Editu ma…
RedMaX 19.12.2010 21:15
RedMaX
Funkce IntToStrDef() umoznuje zkontrolovat zadani a v pripade spatneho vstupu vrati tebou preddefino…
Jan Fiala 20.12.2010 07:59
Jan Fiala
Díky všem za radu. Ještě mě vrtá hlavou, kde se k těmto informacím dostat (na netu jsem prohledal co…
Martin008 21.12.2010 01:08
Martin008
Tohle jsou tak základní informace z programování, že je snad ani nenajdeš ;-) Zakladni programovani… poslední
Jan Fiala 21.12.2010 06:28
Jan Fiala

tak si predtim nez zacnes prirazovat tohle "a1:=StrToInt(Edit1.Text);", zkontroluj co v tom Editu mas. proste nejakou podminku (IF ... THEN ... ELSE), ze pokud v tech editech neni cislo, tak se to provadeni tech prikazu preskoci a nechas tam vyhodit nejakou hlasku.

Funkce IntToStrDef() umoznuje zkontrolovat zadani a v pripade spatneho vstupu vrati tebou preddefinovanou hodnotu. Napr. pokud se maji zadavat pouze kladna cisla, pak:

a1 := IntToStrDef(Edit1.Text, -1);  // vraci -1 pri zadani neceho jineho nez cislo

Uzivateli bys mel zavranit vlozit neco chybne, takze do OnKeyPress vsech editu dat (napises jednu udalost a ostatnim ji priradis):

if not (Key in [#0..#31, '0'..'9'] then Key := #0;

A na konci pak osetris pred scitanim, napr. zda a1 nebo a2 nebo a3 neni zaporne:

if (a1<0) or (a2<0) or (a3<0) then
begin
  Edit4.Text := 'chyba';
  ShowMessage('Chyba v zadani. Zadejte pouze kladna cela cisla!');
end
else
begin
  a4 := a1 + a2 + a3;
  Edit4.Text := IntToStr(a4);
end;

Zpět do poradny Odpovědět na původní otázku Nahoru