![]() |
|
|
#1
|
|||
|
|||
|
Как объявить ошибку ввода.
Т.е. например вводя число 20, а переменная от 1 до 10, делфи выбьет ошибку, но мне надо ее убрать и вывести MessageDlg('Ошбка ввода данных. проверьте корректность параметров', mtInformation, [mbOk], 0) , как зафиксировать и перехватить ошибку? Эдитов для считывания у меня много, мне надо как-то все сразу обработать и ловить ошибки любые которые может сделать пользователь.. Мне надо что-то типа того, если после нажатия кнопки в ее процедуре произошла ошибка ввода какая-то, тогда вывести что произошла ошибка ввода.. |
|
#2
|
||||
|
||||
|
Код:
try //действия except //сообщение об ошибке end; |
|
#3
|
|||
|
|||
|
Я чет никак не пойму эти ошибки, сделал вот так(код ниже). Включил в обработчике range checking, то оно работало но при том еще и в других местах ошибки выдавало где не было их, потом вдруг перестало и не там ни там не выдает, уже запутался, сеейчас вот этот код(вырезал кусок потому что прога очень большая) уже не выдает ошибки если я введу в эдитах 11 иди 50
Подскажите пожалуйста в чем дело..Код:
type
T10 = 0..10;
.....
procedure TForm1.Button1Click(Sender: TObject);
var
kc, kv, kq: real;
c, v, q: real; //cena, ydobstvo, cena
kv1, kv2, kv3, kv4, kv5, kv6: real;
kq1, kq2, kq3, kq4, kq5, kq6: real;
kvv1, kvv2, kvv3, kvv4, kvv5, kvv6: T10; //dla normirovania
kqq1, kqq2, kqq3, kqq4, kqq5, kqq6: T10;
kvv0, kqq0, kcc0: T10; //dla norm glob koeficientov
kvs, kqs , kcvq:integer;
begin
Try
kcc0:=strtoint(edit11.text);
kvv0:=strtoint(edit12.text);
kqq0:=strtoint(edit13.text);
kcvq:=kcc0+kvv0+kqq0;
kc:=kcc0/kcvq;
kv:=kvv0/kcvq;
kq:=kqq0/kcvq;
kvv1:=strtoint(edit1.text);
kvv2:=strtoint(edit2.text);
kvv3:=strtoint(edit3.text);
kvv4:=strtoint(edit4.text);
kvv5:=strtoint(edit5.text);
kvv6:=strtoint(edit15.text);
kqq1:=strtoint(edit6.text);
kqq2:=strtoint(edit7.text);
kqq3:=strtoint(edit8.text);
kqq4:=strtoint(edit9.text);
kqq5:=strtoint(edit10.text);
kqq6:=strtoint(edit16.text);
except
on E : Exception do
ShowMessage(E.ClassName+' ошибка, с сообщением : '+E.Message);
end;
........ |
|
#4
|
|||
|
|||
|
Да у тебя там полный бардак.
Тебе проще сделать свою функцию конвертирования заместо StrToInt: Код:
function StrtoIntRange(AString : String; AMin, AMax : Integer) : Integer;
begin
Result := StrToInt(AString);
If Result > AMin Then Raise Exception.Create('Value less than min value.');
If Result > AMax then Raise Exception.Create('Value greater than max value.');
end;А ловить эти ошибки именно в Try..Except |
|
#5
|
||||
|
||||
|
Я так понял тебе просто надо вывести твое сообшение. Мне кажется лутче будет так:
Событие по вводу символа в едит: PHP код:
Конструкция try except тут используется для вывода сообщения если было введен символ место цыфри |
|
#6
|
|||
|
|||
|
спасибо за помощь
![]() |
|
#7
|
|||
|
|||
|
еще хотел бы узнать как ограничить тип real, имеется в виду как по другому задать этот тип
Код:
type T10 = 0..10; Код:
ppv0:=strtofloat(edit1.text); потому что логично что при таком переводе выдает:Incompatible types: 'T10' and 'Extended' т.е. весь диапазаон чисел от 0 до 10, включая 5,1 , 0,2 и т.д. Последний раз редактировалось mantikora, 19.05.2010 в 20:59. |
|
#8
|
|||
|
|||
|
никто не знает или слишком глупый вопрос?
![]() |