Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 12:56   #1
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию Ошибка Delphi 7.

Здравствуйте все. Подскажите пожалуйста. При обработке события Edit1Change вылазит ошибка "is not a valid integer value" и выделяется строка с текстом Edit1.Text:=''.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  n:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  n:=strtoint(Edit1.Text);      //Âîçðàñò ÷åëîâåêà
  //Êîëè÷åñòâî óäàðîâ ñåðäöà ïðè ìàêñèìàëüíîé íàãðóçêå
  Edit2.Text:=inttostr(220-n);
  //Êîëè÷åñòâî óäàðîâ ñåðäöà ïðè îïòèìàëüíîé íàãðóçêå
  Edit3.Text:=inttostr(Round((220-n)/100*75));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //Î÷èñòèòü ïîëÿ ââîäà
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  m:integer;
begin
  try
    if (strtoint(Edit1.Text)<0) or (strtoint(Edit1.Text)>220) then
      Edit1.Text:=''
  except
    MessageDlg('Недопустимый диапазон ввода!',mtError,[mbOk],0);
  end;
end;

end.
stas45rus вне форума Ответить с цитированием
Старый 30.09.2012, 13:48   #2
kuli4ok
Пользователь
 
Регистрация: 23.09.2012
Сообщений: 32
По умолчанию

А edit1change зачем обрабатываешь?
Если его обрабатывать не обязательно, то можно так
Код:
unit Unit1;

interface

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

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

var
  n: integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if (strtoint(Edit1.Text)<0) or (strtoint(Edit1.Text)>220) then
begin
Edit1.Text:=#0;
MessageDlg('Invalid value!',mtError,[mbOk],0);
exit;
end;
 n:=strtoint(Edit1.Text);
 Edit2.Text:=inttostr(220-n);
 Edit3.Text:=inttostr(Round((220-n)/100*75));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if CloseQuery then close;
end;

end.
Как я понял если edit1.text не соответствует нужному диапазону, то вывести ошибку? Тогда лучше так, ИМХО.
Я помог вам? Помогите и вы мне:
WMZ: Z401849412998
WMR: R251473869576
kuli4ok вне форума Ответить с цитированием
Старый 30.09.2012, 15:20   #3
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию

спасибо, но мне нужно отдельный обработчик организовать для правильности ввода чисел.
stas45rus вне форума Ответить с цитированием
Старый 30.09.2012, 15:59   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

Цитата:
При обработке события Edit1Change вылазит ошибка "is not a valid integer value"
Вам прямо так и гооврят
''(пустая строка) не явлется числом.

Код:
var
  n:  integer;

if edit1.Text <>'' then n:=strtoint(edit1.Text) else n:=0;

if (n<0) or (n>220) then begin 

//изменять данные введенные пользователем 
//    Edit1.Text:=''; 
// и заставлять его набирать число по новой когда может быть достаточно стереть одну единственную цифру 
// да еще и не показать ему это неправильное число 

    MessageDlg('Недопустимый диапазон ввода!',mtError,[mbOk],0);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.09.2012 в 16:04.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в DELPHI V.OX Общие вопросы Delphi 7 21.12.2009 04:03
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
Ошибка с БД в Delphi TaYgA БД в Delphi 5 10.10.2009 14:25
Ошибка Delphi Ruska882009 Помощь студентам 1 05.10.2009 12:39
Ошибка Delphi Степа Верхозин Помощь студентам 2 31.05.2009 11:45