Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
LabeledEdit2.Text:= IntToStr(n);
end;
Между прочим, компонент TMaskEdit при установленной маске на ввод только чисел тоже не "ловит" одиночный минус и "молча, проглатывает" пус-
тую строку!
Почему такие ситуации надо контролировать? Представьте себе, что поль-
зователь должен вводить большое количество числовых данных. Спустя неко-
торое время после начала ввода пользователь начинает уставать и, чисто маши-
нально, вводит пустую строку или одиночный минус. Ваша программа аварий-
но завершается из-за ошибки преобразования (EConvertError)! Вся проде-
ланная пользователем работа пошла "коту под хвост". Как же он будет вас про-
клинать! Именно вас – разработчика программы!
Этот пример еще раз демонстрирует, как надо последовательно улучшать и
"доводить" алгоритм и программу до достижения требуемой функционально-
сти. Пусть сам алгоритм, быть может, не является оптимальным. Не в этом суть! Это конкретный (хотя и простой) пример того, как надо разрабатывать ре-
альные программы. Уже неоднократно отмечал, что с первого раза невозможно написать полностью правильно работающую программу. Если можно так выра-
зиться, этот пример показывает метод "последовательных приближений" разра-
ботки программ.
А теперь попробуем реализовать контроль ввода вещественных чисел. Яс-
но, что надо добавить проверку на символы точки (.) и запятой (,). Использова-
ние точки или запятой для отделения целой части числа от дробной зависит от настроек операционной системы Windows. Хотя Lazarus спокойно преобра-
зует строку в число и с точкой, и с запятой. А вот Delphi "ругается", если раз-
делитель не совпадает с настройками Windows. Так что будем учитывать оба разделителя. Для определения какой разделитель используется системой, слу-
жит глобальная переменная DecimalSeparator, значением которой и явля-