Урок 10 - Знакомство с компонентами (часть 1/12)

   Здравствуйте, дорогие друзья! В этом, десятом уроке, мы начинаем подробное знакомство с компонентами. Всего будет 11 уроков на эту тему. В этом уроке мы будем знакомиться с компонентами на вкладке Standard.

Открываем Delphi, и кидаем на форму компонент Edit. У этого компонента есть свойство Text. Всё, что написано в этом свойстве, отображается в самом Edit'е. Отчистим свойство Text.

Следующий компонент, который оказывается у нас на форме прямо над Edit'ом, называется Label. Этот компонент является подписью для других компонентов. Так же в него удобно выводить какую-нибудь динамическую информацию. Напишем в свойство Caption значение Результат = .

Еще один компонент, который нам нужен - кнопка, тобишь Button. Располагаем его под Edit'ом.

Теперь давайте напишем простенькую программу, которая будет работать с этими компонентами. Программа называется "Калькулятор". Вы можете назвать заголовок формы соответствующе. Нашему калькулятору не хватает еще одного компонента Edit, пожалуйста разместите его ниже первого эдита.

Общий вид калькулятора вы можете увидеть на скриншоте.

Калькулятор


Теперь, когда мы закончили с настройкой компонентов, погружаемся в код программы и создаем обработчик события Button1Click. В нем пишем код, который будет складывать числа первого эдита и второго.
Label1.Caption:='Результат = '+IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text));
Я надеюсь вам не нужно объяснять, что такое IntToStr и с чем его едят.

После компиляции, мы вводим в первый эдит число 10, а во второй 5 и после нажатия на кнопку видим, что в лейбле отображается Результат = 15. Это значит, что программа работает и правильно складывает числа, а если работает, то требует совершенства.

Попробуйте сложить в нашей программе дробные числа. Ничего не выйдет, так как значение из эдитов мы преобразовываем в числовой тип Integer, а он работает только с целыми числами. Если же вы все таки попробовали, то наверняка увидели похожую ошибку:

Ошибка


Она как раз и сообщает о том, что тип Integer не может работать с дробными числами.
Но как же быть?! Что делать? А вот тот, кто хорошо читает уроки, знает, что с целыми и дробными числами работает тип Real. Что бы преобразовать значение из эдита в тип Real, нужно изменить операторы IntToStr и StrToInt на FloatToStr и StrToFloat соответственно.

В итоге мы получим вот такой код:
Label1.Caption:='Результат = '+FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
Далее учим программу вычитать, умножать и делить. Для этого поместим на форму компонент RadioButton в количестве четырех штук и изменим у них свойство Caption на Сложить, Вычесть, умножить, Разделить.

Компонент RadioButton вы могли видеть на сайтах или в других программах, он представляет из себя кружочек (темный или светлый, в зависимости от выбора) и рядом подпись к этому кружочку. У этого компонента есть свойство Checked. Оно может принимать значения True или False, что определяет выбор радиокнопки. Поставьте в свойстве Checked значение True у радиокнопки с именем Сложить.

Общий вид программы:

Калькулятор


Теперь нам нужно изменить код, в событии Button1Click. Работать он будет так: если выбрана радиокнопка 'сложить' - складываем, если выбрана радиокнопка 'вычесть' - вычитаем. И дальше по аналогии.

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (RadioButton1.Checked = True) Then //если выбрано 'сложить'
Label1.Caption:='Результат = '+FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text)); //складываем

if (RadioButton2.Checked = True) Then //если выбрано 'вычесть'
Label1.Caption:='Результат = '+FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text)); //вычитаем

if (RadioButton3.Checked = True) Then //если выбрано 'умножить'
Label1.Caption:='Результат = '+FloatToStr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text)); //умножаем

if (RadioButton4.Checked = True) Then //если выбрано 'разделить'
Label1.Caption:='Результат = '+FloatToStr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text)); //делим
end;
Компилируем и пробуем! У меня работает ;)

В следующем уроке мы будем модернизировать калькулятор, поэтому, пожалуйста, сохраните проект в надежное место.

Ну вот и всё! Удачи!
Встретимся в следующем уроке!




Добавил(а): Programer Дата: 2012-08-10
Давно мечтал написать калькулятор спасибо за урок!



Добавил(а): Тимыч Дата: 2013-05-04
при изменении оператора на FloatToStr ошибка остается но место 'not a valid integer...'-'not a valid Floating...'



Добавил(а): Тимыч Дата: 2013-05-04
И еще о языке делфи в целом:Как вы считаете можно-ли на Delphi создовать программы типа cmd т.е. способные улавливать все движения информации; или другие мощные программы. Я ища информацию методом тыка часто встречал выражения типа "Бросте Dlelphi он усторел он слаб переходите на C++, C#" и другую критику спрашиваю как у профиссионала есть ли капли правды в этих словах или это рекламодеятели. Сам начал с Paskal почему предпочту С-Delphi но все-же интересны границыю



Добавил(а): Admin Дата: 2013-05-04
Конечно, капля правды в этом есть. Говорят что и Delphi и C++ скоро будут не так востребованы как C#. Delphi больше всего подходит для новичков, так как он более удобен, логичен и схож с человеческим мышлением, то есть как ты думаешь, так ты и пишешь код. На C++ сложнее писать программы, так как он ближе к ассемблеру. Но если на Delphi легче писать, это не значит, что на нем можно создавать только простенькие программы. Есть куча примеров, когда на Delphi создавали шедевры. На нем можно создавать мощные программы и это факт, но для cmd больше подходит C++ сами знаете почему... Я думаю, что все зависит от самого программиста, а не от среды разработки



Добавил(а): Programer Дата: 2013-05-04
Полностью согласен с Админом сайта ! Полностью поддерживаю вашу точку зрения !



Добавил(а): delfiSkin Дата: 2013-05-19
как вернуть обратно окна objest treeView и objest inspector(если они закрылись), иногда их можно вернуть нажав на run->program reset ну а если эта кнопка горит серым приходится выключать и включать.Как их восстановить не выключая дэлфи?



Добавил(а): delfiSkin Дата: 2013-05-19
спасибо за урок,код написал сам,не смотря на уже готовый. Значит отложилось в голове информация)



Добавил(а): String Дата: 2014-01-11
С "FloatToStr", как оказалось, можно использовать лишь запятую (не точку).



Добавил(а): Кайлан Дата: 2015-01-18
А как работать с отрицательными числами подскажите)(не используя переменные)



Добавил(а): ortmaer Дата: 2016-08-05
Подскажите. Мне не понятно вот это. Допустим в начале урока было в коде: IntToStr(StrToInt После добавили возможность дробных чисел и код стал: +FloatToStr(StrToFloat Получается заменили int на float, но ведь команда на дробные числа у нас: Real а в коде она ни где не встречается. Получается весь этот список с командами вообще не используется?


  1. Sasha
    Sasha 2 years ago
    Когда буду ДЗ делать пригодиться
Отменить.