![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
В процессе "написания" программы возникает целая куча вопросов. И мне как начинающему любителю не решить их своими силами.
Так вот моя простенькая программка производит некоторые вычисления, но иногда возникают исключительные ситуации, такие как деление на 0 или значение из пустого edit-а попадает в знаменатель дроби, что тоже, наверное расценивается как деление на 0. Какие предлагают решения: Код:
try .... except ... end; Я же "планирую" чтобы все расчеты происходили при событии OnChange в Edit. И мне эти сообщения не нужны. Вопрос, возможно ли обрабатывать эти исключения без вывода всяких сообщений, чтобы пустой Edit не выдавал ошибку is not a valid floating point value. И в случае деления на ноль просто не происходили никакие вычисления и все. Надеюсь понятно расписал. Задавайте наводящие вопросы |
|
#2
|
||||
|
||||
|
Код:
TryStrToInt(Edit1.Text, <переменная куда вывести результат>); |
| Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
Ogurcofff (28.04.2012)
| ||
|
#3
|
||||
|
||||
|
Цитата:
Код:
if (Edit1.Text = '') or (Edit1.Text = '0') then Abort; |
| Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение: | ||
Ogurcofff (28.04.2012)
| ||
|
#4
|
||||
|
||||
|
Код:
try .... except end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Ogurcofff (28.04.2012)
| ||
|
#5
|
|||
|
|||
|
Цитата:
Цитата:
Цитата:
Может у кого есть отлаженный код, рабочий, так сказать для анализа. |
|
#6
|
||||
|
||||
|
Цитата:
Stop on Delphi Exception отключать надо Последний раз редактировалось NumLock, 28.04.2012 в 13:21. |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Ogurcofff (28.04.2012)
| ||
|
#7
|
|||
|
|||
|
Цитата:
А теперь понял ошибку и исправился!. Вот так должно быть? Код:
procedure TRIP.Edit1Change(Sender: TObject);
begin
try
a:=StrToFloat(edit1.Text);
b:=strtofloat(edit2.Text);
c:=StrToFloat(edit3.Text);
d:=strtofloat(edit4.Text);
e:=strtofloat(edit5.Text);
F:=b+((e-a)/(c-a)*(d-b));
edit6.Text:=floattostr(f);
except
end;
end;Последний раз редактировалось Ogurcofff, 28.04.2012 в 14:12. |
|
#8
|
||||
|
||||
|
Цитата:
Для окончательного понимания: Программа пытается выполнить, то что находиться в блок try. Если возникает любая ошибка, то программа незамедлительно переходит в блок except. То есть если возникнет ошибка во время дебага программы (запуска с делфи), то вы увидите сообщение об ошибке, нажмете F9 и программа пойдет выполняться дальше. Если же вы запустите exe'шник, то никаких предупреждение на экран не вылезет. |
| Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение: | ||
Ogurcofff (28.04.2012)
| ||
|
#9
|
|||
|
|||
|
Цитата:
Спасибо за терпение и понимание!!! |
|
#10
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#11
|
||||
|
||||
|
Если версия Дельфи не позволяет яно указать, что Edit может воспринимато только цифры, то имеется обходной путь:
Код:
procedure TForm1FormCreate(Sender: TObject);
var
I : Integer;
begin
// Устанавливаем для всех Edit-ов только цифры,
// в старших версиях дельфи имеется в свойствах контрола.
for I := 0 to ComponentCount - 1 do
if (Components[i] is TEdit) then
with (Components[i] as TEdit) do
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or ES_NUMBER);
end; |
|
#12
|
|||
|
|||
|
Цитата:
|
|
#13
|
||||
|
||||
|
Пустой строки уже быть не может
, про 0 я и не думал. Всего лишь показал, как штатными средствами создать Edit, понимающий только цифры. |
|
#14
|
||||
|
||||
|
Вот реально как дети - чес-слово...
Думать мозгом не пробовали (это к ТС)? У меня тож есть пользовательские интерфейсы (полная жо..), но суть не в этом. Я умею "гасить" любые действия пользователя, однако это не главное. Ну "вставили" в поле ввода (Edit) что-то отличное от цифр, и что... все умерло??? Можно рассмотреть поле, получить ошибку, сказать юзверу и... ну там по желанию (я ставлю значение по умолчанию). |
|
#15
|
|||
|
|||
|
или updown прицепить, у него min, max, position есть
|