Delphi для начинающих – Урок 6 – Пишем свой калькулятор

Уроки для начинающих   6 Март 2011  Автор статьи: admin 

В этом уроке я покажу, как написать свой простой калькулятор на Delphi.Естественно, писать свой калькулятор мы будем не потому, что аналогичных калькуляторов не существует (взять хотябы стандартный калькулятор Windows), а потому, что сам процесс его написания будет очень познавательным для начинающих программистов. Переодически на сайте Cybern.ru будут появляться практические уроки для новичков и я очень надеюсь, что они помогут и вам в освоении программирования на Delphi.

Наш калькулятор будет несколько отличаться от интерфейса стандартного аналога Windows. В результате урока мы получим такой калькулятор:

Приступим.

Создайте новое приложение Delphi. Измените название формы (свойство Form1.caption) на «Учебный калькулятор».

Создайте на форме 2 компонента: Panel1 и Memo1. Далее присвойте свойству Panel1.align значение «albottom», а для свойства Memo1.align установите значение alclient. Должно получиться следующее:

Свойство align позволяет фиксировать визуальный компонент к какой либо стороне формы или растягивать компонент на всю форму. Поэкспериментируйте с этим свойством.

Теперь установите для Panel1.showcaption значение true, чтобы надпись на панеле исчезла.

В Memo1 у нас будут фиксироваться ход работы калькулятора, т.е. лог. Сотрите значение Memo1.lines, чтобы изначально на memo1 не было никакого текста. Установите значение ssBoth для Memo1.scrollbars. Также можете настроить шрифт у Memo1, это можно сделать благодаря расширенным настройкам шрифта параметра Font:

Открыть такое окно можно, кликнув по кнопке:

Внутри Panel1 расположите два Edit (Edit1 и Edit2) и четыре кнопки с надписями «+», «-«, «/»,»x» соответственно. У меня получилось так:

Два нижних поля ввода нам понадобятся для ввода самих чисел, а 4 кнопки соответственно для выполнения с ними математических операций.

Создадим обработчики OnClick для кнопок «+», «-«, «/»,»x» (button1, button2, button3, button4 соответственно):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var result:real;
a,b:real;
begin
// сохраняем значение дробей в переменных
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
// производим операцию
result:=a+b;
// выводим результат в виде примера в Memo1
memo1.Lines.Add(edit1.Text+' + '+edit2.Text+' = '+floattostr(result));
// очищаем поля ввода
edit1.Clear;
edit2.Clear;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button2Click(Sender: TObject);
var result:real;
a,b:real;
begin
// сохраняем значение дробей в переменных
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
// производим операцию
result:=a-b;
// выводим результат в виде примера в Memo1
memo1.Lines.Add(edit1.Text+' - '+edit2.Text+' = '+floattostr(result));
// очищаем поля ввода
edit1.Clear;
edit2.Clear;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button3Click(Sender: TObject);
var result:real;
a,b:real;
begin
// сохраняем значение дробей в переменных
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
// производим операцию
result:=a/b;
// выводим результат в виде примера в Memo1
memo1.Lines.Add(edit1.Text+' / '+edit2.Text+' = '+floattostr(result));
// очищаем поля ввода
edit1.Clear;
edit2.Clear;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button4Click(Sender: TObject);
var result:real;
a,b:real;
begin
// сохраняем значение дробей в переменных
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
// производим операцию
result:=a*b;
// выводим результат в виде примера в Memo1
memo1.Lines.Add(edit1.Text+' * '+edit2.Text+' = '+floattostr(result));
// очищаем поля ввода
edit1.Clear;
edit2.Clear;
end;

Компилируем приложение, и наш калькулятор готов!

[note]Скачать готовый калькулятор с исходными кодами Delphi[/note]


  • Daswar

    спасибо! просто и познавательно!=)

  • Vitas

    получилось!

  • Владислав

    у меня ошибка
    [Fatal Error] Variants.pas(1034): Program or unit ‘Variants’ recursively uses itself

  • lexagl

    Большое спасибо!

  • lexagl

    Большое спасибо!

  • Макс97

    А почему для a и b постоянно обЪявлять локальные переменные? Не легче ли сделать один раз глобальные переменные, а потом сказать что a:=Edit1 и b:=Edit2 ?

    • http://cybern.ru/ Cyberexpert

      Не сильно легче.

  • Александр

    не учтены региональные настройки разделителя, при использовании другого разделителя, например точки вместо запятой, программа выдаст ошибку. Я решил с помощью StringReplace.
    p:=StringReplace(Edit1.Text,’.’,’,’,[]);
    z:=StringReplace(Edit2.Text,’.’,’,’,[]);
    a:=StrToFloat(p);
    b:=StrToFloat(z);
    c:=a+b;

  • Алексей

    а что если сделать так для вычесления кв.корня, если где не правильно исправьте
    procedure TForm1.Button6Click(Sender: TObject);
    a,res:real;
    begin
    a:=strtofloat(edit1.Text);
    res:=(sqrt(a));
    memo1.Lines.Add(edit1.Text+’SQRT’+’=’+floattostr(res));

    end;

  • Игорь

    Урок 7 не загружается((

  • Виктор

    У меня не работало в Delphi 7 потому что находило ошибку в begin.

  • Vitas

    получилось!

Научиться программировать

  • на Delphi

  • на Java

  • на C++