Пишем калькулятор на 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

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

Delphi 7 Создание главного меню для калькулятора. Вкладка Файл

Delphi 7 Создание главного меню для калькулятора. Вкладка Справка

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

Далее переходим на создание объектов при помощи программного кода (жмем 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;). А дальше, как и для обычного объекта, указываем его свойства (координаты, размеры и т.п.).

Например:

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 с соответствующими им кнопками.

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

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" (можно назвать по-своему).


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

Опубликовано:

Читайте также:
Заказывайте товары и услуги:

Комментарии (9)
Оставить комментарий
Олег
Еле дошел до этого пункта: "Добавим на форму объект MainMenu и заполним его следующим образом:...." А где искать тот объект?
Олег
Дошел до этого пункта: "Добавим на форму объект MainMenu и заполним его следующим образом:...." А где искать тот объект? (извините за дубликат, просто предыдущий комент исчез)
Немного о компьютере (администратор)
Панель объектов находится сверху или справа от формы (в зависимости от версии Delphi). В статью мы добавили скриншот этой панели. Большое спасибо за комментарий!
Олег
По чуть двигаюсь. Вставил весь код в Unit1.pas, нажал зеленый треугольник и мне засветилась красным строка: Edit.Text:=’0′; Только там вместо нее отображается так: Edit.Text:=’0?; (т.е. со знаком вопроса) Исправлял - не помогло, не знаю, что там должно стоять. И еще напишите, пожалуйста, как его правильно сохранять и куда, а то у меня на рабочем столе куча файлов получилась. Калькулятора нет :( Я так понял должен получится .ехе файл и его надо запустить?
Немного о компьютере (администратор)
По-идее, в строке Edit.Text:=’0′; — 0 должен засветиться синим цветом. Можно попробовать стереть и заново поставить одиночные кавычки. Тогда ошибка должна пропасть.

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

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

Чтобы появился файл *.exe — используйте клавиши CTRL+F9. Это и есть готовый файл, который будет работать на всех компьютерах. Его и можно спокойно распространять.
Олег
Странно, но не получается. Теперь светит красным 17 строка (синего цвета нет): procedure N4Click(Sender: TObject); Вроде все совпадает. Придется разбираться в теории, что поделаешь... А сразу обрадовался, думал вставлю код и все. Но не тут то было :)
Немного о компьютере (администратор)
Интерфейс калькулятора Вы сделали (часть1)? Всё получилось? Видео (часть2) опубликую немного попозднее. Просто времени катастрофически мало. На самом деле там всё гораздо проще. Эту процедуру писать не обязательно. Она предназначена, в основном, чтобы закрыть программу. Другая процедура "procedure TForm1.N3Click(Sender: TObject);" выводит на экран создателя программы. Ее писать тоже не обязательно.
саша
left:=button[0].Left+Button[9].Width+10; выдает ошибку sigsegv
Немного о компьютере (администратор)
Как и обещал, вот часть2 с видео, исходным кодом и проектом: https://fortran-new.ru/pascaldelphi/pishem-kalkulyator-na-delphi-7-chast2/