Пишем калькулятор на Delphi 7 (часть1)

В этой статье мы подробно рассмотрим создание простого стандартного калькулятора с помощью среды разработки Borland Delphi 7. Основные объекты калькулятора будем создавать программным способом.

Итак, меняем свойства главного окна (в окошке слева Object Inspector) Form1, в соответствии со следующей таблицей (остальные поля не трогаем):

Свойства Form1 Значение
 Caption  Калькулятор
 AutoScroll  false
 BorderIcons  [biSystemMenu,biMinimize]
 BorderStyle  bsSingle
 Position  poScreenCenter
 Height  292
 Width  286

Добавим на форму объект MainMenu (вверху или справа на панеле).

Delphi MainMenu

Кликнем на него два раза мышкой и заполним следующим образом:

Чтобы подчеркнуть букву в названии определенного пункта меню, необходимо перед ней поставить знак &. (Например, «&Справка»).

Далее переходим на создание объектов при помощи программного кода (жмем F12).

Попробуем сначала добавить текстовое поле, где будут выводиться все цифры и вычисления калькулятора (все, что записано ниже после слова «Например» — пишем в Delphi).

Для создания объекта программным способом, выполним следующие действия:

1.   В uses пропишем модуль объектов.

Например: StdCtrls

2.   Перед строкой implementation и после ключевого слова var создадим новую переменную, а в качестве типа переменной укажем класс объекта (класс объекта всегда начинается с буквы «Т» — вероятно, произошло от названия программы Turbo Pascal).

Например:

Edit: TMemo;
Button: array[0..22] of TButton;

3.   В событии (например, при создании формы) сначала создаем новый объект (Edit:=TMemo.Create(form1);), затем отображаем его на Form1 (Edit.Parent:=form1;). А дальше, как и для обычного объекта, указываем его свойства (координаты, размеры и т.п.).

Например:

1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit:=TMemo.Create(form1);
Edit.Parent:=form1;
Edit.Text:='0';
Edit.Width:=250;
Edit.Height:=21;
Edit.Left:=10;
Edit.Top:=20;
Edit.Alignment:=taRightJustify;
end;

Свойство Alignment выравнивает текст в крайнее правое положение.

Таким же образом создадим на форме кнопки. Но создавать их не будем по-отдельности. Создадим массив кнопок, который и выведем в определенном порядке на форму. У нас будет несколько групп кнопок (для ввода цифр и для вычислений). Так как у нас используется массив, соответственно каждый объект необходимо смещать таким образом, чтобы не получилось так, что один объект лежит на другом. Так не должно быть! Поэтому обязательно используйте свойства Top и Left для расположения объекта на форме Form1 в определенных координатах. Чтобы проще было программировать, мы создали массив кнопок от 0 до 9 с соответствующими им кнопками.

Должно получиться что-то вроде этого:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ComCtrls;
 
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form1: TForm1;
Edit: TMemo;
Button: array[0..22] of TButton;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var i,left,width,top:integer;
begin
left:=10;
width:=40;
// Создаем объект поля ввода
Edit:=TMemo.Create(form1);
Edit.Parent:=form1;
Edit.Text:='0';
Edit.Width:=244;
Edit.Height:=21;
Edit.Left:=left;
Edit.Top:=20;
Edit.Alignment:=taRightJustify;
// Создаем объекты кнопок для стандартного калькулятора
for i:=0 to 22 do
begin
Button[i]:=TButton.Create(form1);
Button[i].Parent:=form1;
case i of
10..12:
begin
if i=10 then
left:=10;
Button[i].Left:=left;
Button[i].Top:=51;
Button[i].Width:=75;
left:=left+83;
end;
1..9:
begin
if i=1 then
begin
left:=10;
top:=176;
end;
left:=left+width+10;
if i mod 3 =1 then
begin
left:=10;
top:=top-30;
end;
Button[i].Width:=width;
Button[i].Left:=left;
Button[i].Top:=top;
Button[i].Caption:=inttostr(i);
end;
13..20:
begin
if i=13 then
begin
left:=button[9].Left+button[9].Width+10;
top:=206;
width:=40;
end;
left:=left+width+10;
if i mod 2 =1 then
begin
left:=button[9].Left+button[9].Width+10;
top:=top-30;
end;
Button[i].Width:=width;
Button[i].Left:=left;
Button[i].Top:=top;
end;
0:
begin
Button[0].Width:=width;
Button[0].Left:=10;
Button[0].Top:=176;
Button[i].Caption:=inttostr(i);
end;
21,22:
begin
left:=left+width+10;
if i mod 2 =1 then
left:=button[0].Left+button[9].Width+10;
Button[i].Width:=width;
Button[i].Left:=left;
Button[i].Top:=button[13].Top;
end;
end;
end;
// Даем названия каждой кнопке
button[10].Caption:='Backspace';
button[11].Caption:='CE';
button[12].Caption:='C';
button[13].Caption:='+';
button[14].Caption:='=';
button[15].Caption:='-';
button[16].Caption:='1/x';
button[17].Caption:='*';
button[18].Caption:='%';
button[19].Caption:='/';
button[20].Caption:='sqrt';
button[21].Caption:='+/-';
button[22].Caption:=',';
end;
 
end.

Затем, по-желанию, добавим на форму объект StatusBar (с вкладки Win32). В свойстве Panels откроем новое окно, создадим новую панель и назовем ее «Copyright @ 2013 FORTRAN NEW Company» (можно назвать по-своему).


<<Предыдущая статья                                     Следующая статья >>

Автор

admin

Программист - техник, разработчик сайтов и программного обеспечения, владелец сервера, администратор сайта "Немного о компьютере..."

Пишем калькулятор на Delphi 7 (часть1): 8 комментариев

  1. Еле дошел до этого пункта: «Добавим на форму объект MainMenu и заполним его следующим образом:….»
    А где искать тот объект?

  2. Дошел до этого пункта: «Добавим на форму объект MainMenu и заполним его следующим образом:….»
    А где искать тот объект?
    (извините за дубликат, просто предыдущий комент исчез)

  3. Панель объектов находится сверху или справа от формы (в зависимости от версии Delphi). В статью мы добавили скриншот этой панели. Большое спасибо за комментарий!

  4. По чуть двигаюсь. Вставил весь код в Unit1.pas, нажал зеленый треугольник и мне засветилась красным строка:
    Edit.Text:=’0′;
    Только там вместо нее отображается так:
    Edit.Text:=’0?;
    (т.е. со знаком вопроса)
    Исправлял — не помогло, не знаю, что там должно стоять.

    И еще напишите, пожалуйста, как его правильно сохранять и куда, а то у меня на рабочем столе куча файлов получилась. Калькулятора нет 🙁
    Я так понял должен получится .ехе файл и его надо запустить?

    1. По-идее, в строке Edit.Text:=’0′; — 0 должен засветиться синим цветом. Можно попробовать стереть и заново поставить одиночные кавычки. Тогда ошибка должна пропасть.

      Попробую сейчас полный код калькулятора поставить в статью с помощью специального плагина. Может тогда будет копироваться без ошибок…

      Каждый новый проект лучше хранить в новой папке. Для сохранения проекта используйте клавиши CTRL+SHIFT+S. В появившемся окне создайте новую папку и затем можно спокойно сохранять. Появится множество файлов. Для запуска проекта используйте файл с расширением *.dpr или *.dprproj (более новая версия Delphi).

      Чтобы появился файл *.exe — используйте клавиши CTRL+F9. Это и есть готовый файл, который будет работать на всех компьютерах. Его и можно спокойно распространять.

  5. Странно, но не получается. Теперь светит красным 17 строка (синего цвета нет):
    procedure N4Click(Sender: TObject);
    Вроде все совпадает.
    Придется разбираться в теории, что поделаешь… А сразу обрадовался, думал вставлю код и все. Но не тут то было 🙂

    1. Интерфейс калькулятора Вы сделали (часть1)? Всё получилось? Видео (часть2) опубликую немного попозднее. Просто времени катастрофически мало. На самом деле там всё гораздо проще. Эту процедуру писать не обязательно. Она предназначена, в основном, чтобы закрыть программу. Другая процедура «procedure TForm1.N3Click(Sender: TObject);» выводит на экран создателя программы. Ее писать тоже не обязательно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *