![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контроль превышения размера числа
Первокурсница © (2010-03-13 15:14:00)Как сделать так чтобы если мы вводим в Edit любое число превышающее диапазон Integer (-2147483648..2147483647) программа не вылетала бы а показывала бы сообщение "Превышен размер числа"?
Пишу вот так:
procedure TForm1.Edit2Change(Sender: TObject);
begin
If (StrToInt(Edit2.Text)>2147483646) OR (StrToInt(Edit2.Text)<-2147483647)
then begin ShowMessage('Выход за границы массива!');
Edit1.Text:='20';
end;
end;
Но если набираю допустим 9999999999 или 6768435794357 то прога вылетает :( Может это вообще невозможно сделать?
Virgo_Style (2010-03-14 23:11:00) [1]
> до сих пор не вернулась.
Один только первый пункт сколько времени займет, а их три
KSergey (2010-03-14 19:41:00) [2]> Плохиш © (13.03.10 17:28) [21]
плохой ты человек
смотри, как далеко послал девушку - до сих пор не вернулась.
MonoLife (2010-03-14 15:56:00) [3]
> И заставить пользователя прокрутить от нуля до максимума,
> он тебя навек запомнит
и от максимума до минимума))
Fenik (2010-03-14 14:25:00) [4]maxlength := 11; + код из [25].
И всё корректно.
Anatoly Podgoretsky (2010-03-14 14:24:00) [5]> MonoLife (14.03.2010 14:12:35) [35]
И заставить пользователя прокрутить от нуля до максимума, он тебя навек запомнит
Anatoly Podgoretsky (2010-03-14 14:23:00) [6]> Ega23 (14.03.2010 14:07:34) [34]
Да длина вообще не применима.
MonoLife (2010-03-14 14:12:00) [7]Тогда, как вариант, может подойти SpinEdit с настройками max и min value
Ega23 (2010-03-14 14:07:00) [8]
> зачем 10, хватит и 8 символов)
8 в любом случае не хватит. Минимум 9, если в hex-формате
MonoLife (2010-03-14 14:03:00) [9]
> Т.е. '2147483800'
зачем 10, хватит и 8 символов)
хм.. опять же, зависит от задачи.. чет, я не подумал..
Ega23 (2010-03-14 13:23:00) [10]
> Т.е. '2147483800' отличается длиной от '2147483100'?
С точки зрения TEdit.MaxLength - нет. Более того, оно спокойно и '$FFFFFFFFF' сожрёт.
Хотя фиг его знает, что MonoLife © имел ввиду...
Демо (2010-03-14 13:19:00) [11]
> MonoLife © (14.03.10 05:55) [30]
> > Как сделать так чтобы если мы вводим в Edit любое число
> > превышающее диапазон Integer...задать maxlength в Edit,
> чтоб не было возможности вводить "превышающее диапазон"
Т.е. '2147483800' отличается длиной от '2147483100'?
MonoLife (2010-03-14 05:55:00) [12]
> Как сделать так чтобы если мы вводим в Edit любое число
> превышающее диапазон Integer...
задать maxlength в Edit, чтоб не было возможности вводить "превышающее диапазон"
Ega23 (2010-03-13 20:40:00) [13]
> Ты это к чему? В [0] вопрос про Integer.
Это к тому, что очень аккуратно надо.
Fenik (2010-03-13 20:23:00) [14]> Ega23 ©
Ты это к чему? В [0] вопрос про Integer.
Ega23 (2010-03-13 19:58:00) [15]почувствуй разницу между
c : Cardinal;иc : Integer;
Ega23 (2010-03-13 19:56:00) [16]
> Fenik © (13.03.10 19:28) [25]
procedure TForm1.Button1Click(Sender: TObject);
var
c : Cardinal;
Code : Integer;
begin
Val('$FFFFFFFF', c, Code);
if Code <> 0 then
ShowMessage('Out of range')
else
ShowMessage(IntToStr(c));
end;
Fenik (2010-03-13 19:28:00) [17]> Демо © (13.03.10 18:42) [23]
procedure TForm1.Button1Click(Sender: TObject);
var
ValueInt64: Int64;
ValueInt32: Integer;
Code: Integer;
begin
Val(Edit1.Text, ValueInt64, Code);
if Code = 0 then
begin
Val(Edit1.Text, ValueInt32, Code);
if Code <> 0 then
ShowMessage('Range out!')
else
ShowMessage('Everything is OK.');
end
else
ShowMessage('Invalid value!');
end;
Ega23 (2010-03-13 18:59:00) [18]
> Kinder, Küche, Kirche
+1
Демо (2010-03-13 18:42:00) [19]
> Fenik © (13.03.10 18:35) [22]
В условии задачи не было проверки на прочую корректность ввода числа кроме превышения границ Integer-)
Fenik (2010-03-13 18:35:00) [20]
procedure TForm1.Button1Click(Sender: TObject);
var
Value, Code: Integer;
begin
Val(Edit1.Text, Value, Code);
if Code <> 0 then
ShowMessage('range out!')
else
ShowMessage('Everything is OK');
end;