Если нажата ЛКМ и мы находимся в нужной части экрана



 if (mb=1) and (x<100) then

Begin

c:=f.GetPixel(x,y); // считывание цвета этой точки

SetPenColor(c); // установка цвета в обводку рисуемой фигуры (линии или кружка)

end;                

end;

 

// главная часть программы

Begin

SetWindowSize(458,343); // создаём окно 458х343

 

// обработка нажатий мыши

OnMouseDown := MouseDown;

OnMouseMove := MouseMove;

OnMouseUp := MouseUp;

 

// загружаем задний фон и рисуем его

f:=Picture.Create('background.png');

f.Draw(0,0);

 

end.

Игра Doodle jump

Предварительно посмотрим тип данных "запись" (record) - он нам тут пригодится. В него можно объединять данные с разными типами данных. Если ты изучал объектно-ориентированные языки, то там были классы. Или структуры- так вот, это как раз и есть структура.

Например, я создам структуру, которая будет хранить имя человека и его возраст:

type human = record

 name : string;

 age : integer;

end;

Структуру я назвал "человек" - это наш новый тип данных. И я могу создавать уже переменную с таким типом, например:

var p : human;

И присваивать значения так:

p.age := 25;

p.name := 'Петя';

Это нужно чтобы было удобнее работать с разносортными типами данных- в массив их не засунешь, но зато можно сделать такую вот вещь как структура- только в pascalABC это называется запись (record). Можно сделать даже массив таких записей.

...

Теперь сам код игры:

uses graphABC;

 

// тип данных- точка (хранит координаты)

type point = record

 x,y:integer;

end;

 

// поле объявления переменных

Var

pers, plat, bg: Picture; // картинки для персонажа, платформы и заднего фона (background)

i,h,x,y,Left,Right:integer; // вспомогательные переменные

dx,dy:real; // изменение координат или скорость

mass: array [1..10] of point; // массив точек для вывода платформ

 

// клавиша клавиатуры нажата

procedure KeyDown(Key:integer);

Begin

 if key=vk_Left then Left:=1; // если нажата левая клавиша то в переменную Left заложить 1

 if key=vk_Right then Right:=1; // если правая

end;

 

// клавиша клавиатуры отпущена (чтобы персонаж перестал двигаться)

procedure KeyUp(Key:integer);

Begin

 if key=vk_Left then Left:=0;

 if key=vk_Right then Right:=0;

end;

 

 

Begin

SetWindowSize(400,533); // создание окна

LockDrawing; // для избегания мигания при анимации

OnKeyDown := KeyDown; // ожидание нажатия клавиши ВНИЗ

OnKeyUp := KeyUp; // ВВЕРХ

 

x:=100; y:=100; h:=200; // начальные значения

 

// загрузка картинок из файлов

bg :=Picture.Create('background.bmp');

plat:=Picture.Create('platform.bmp');

pers:=Picture.Create('pers.bmp');

pers.Transparent:=true; // сделать картинку персонажа прозрачной

 

// для проставления 10 платформ в случайных местах экрана

for i:=1 to 10 do begin

 mass[i].x:=random(400);

 mass[i].y:=random(533);

end;

 

// бесконечный цикл (главный цикл игры)

while True do

Begin

 if Left=1 then x:=x-1; // если была нажата левая, то уменьшаем координату х

 if Right=1 then x:=x+1;

 

 dy:=dy+0.1; // свободное падение

 y:=y+round(dy);

 if y>500 then dy:=-7; // если достигли пола, дать скорость вверх- будет будто прыжок

 

 

// если достигли некой высоты

 if y<h then

for i:=1 to 10 do begin

y:=h; // останавливаем персонажа на этой высоте

 

// платформы опускаем

mass[i].y:=mass[i].y-round(dy);

 

 // если платформа уехала вниз за экран

if (mass[i].y>533) then begin

  mass[i].y:=0; 

  mass[i].x:=random(400); 

  end;

end;

 

// обработка столкновения с платформами

 for i:=1 to 10 do

if (x+50>mass[i].x) and (x+20<mass[i].x+68) and (y+60>mass[i].y)

and (y+60<mass[i].y+14) and (dy>0) then dy:=-7;

 

 bg.Draw(0,0); // отрисовка фона

 

// отрисовка платформ

 pers.Draw(x,y);

 for i:=1 to 10 do

plat.Draw(mass[i].x,mass[i].y);

 

 redraw; // перерисовка- для избегания мигания при анимации

 sleep(2); // задержка 2 миллисекунды (чтобы был эффект анимации, т.к. компьютер делает всё быстро)

 end;

 

end.

 

Игра Арканоид

Общие принципы уже похожи с предыдущей игрой, поэтому просто вставим код и разберём его:

uses GraphABC; // подключаем графический модуль

 

// поле объявления переменных

Var

mass: array [0..11,0..11] of integer;

pic: array [0..15] of Picture;

x,y,i,j,n,Left,Right,padX:integer; // padX- координата дощечки, которая отбивает мяч

sizeX,sizeY:integer; // размеры блока кирпичика

dx,dy:real;

 

// проверка столкновения мяча и блока

function check():integer;

var i,j:integer;

Begin

check:=0;

for i:=(x div sizeX) to ((x+12) div sizeX) do

for j:=(y div sizeY) to ((y+12) div sizeY) do

if (i<11) and (j<11) then

if mass[i,j]<>0 then

   begin mass[i,j]:=0; check:=1; end;

end;

 

// процедуры нажатия клавиш

procedure KeyDown(Key:integer);

Begin

 if key=vk_Left then Left:=1;

 if key=vk_Right then Right:=1;

end;

 

procedure KeyUp(Key:integer);

Begin

 if key=vk_Left then Left:=0;

 if key=vk_Right then Right:=0;

end;

 

Begin

// значения по умолчанию

sizeX:=32; sizeY:=20;

SetWindowSize(384,450);

x:=200; y:=400;

dx:=3; dy:=2;

padX:=100;

 

LockDrawing;

OnKeyDown:=KeyDown;

OnKeyUp:=KeyUp;

 

// хранение блоков (которые мы будем сбивать мячиком)

for i:=1 to 10 do

 for j:=1 to 10 do

mass[i,j]:=1;

 

// узор из разного цвета блоков

mass[2,2]:=2;

mass[9,2]:=2;

mass[2,9]:=2;

mass[9,9]:=2;

 

// загружаем картинки

pic[0]:=Picture.Create('images/background.png');

pic[7]:=Picture.Create('images/paddle.png');

pic[6]:=Picture.Create('images/ball.png');

pic[6].Transparent:=true;

 

// отрисовка блоков

for i:=1 to 5 do

 pic[i]:=Picture.Create('images/block'+i.ToString()+'.png');

   

  

while True do

Begin

// движение мячика ( dx,dy- скорости по той или иной координате)

x:=x+round(dx);

if check=1 then dx:=-dx; // отскакивание если налетели на стенку или пол

y:=y+round(dy);

if check=1 then dy:=-dy;

 

if (x<0) or (x>390) then dx:=-dx;

if (y<0) or (y>450) then dy:=-dy;

 

if Right=1 then padX:=padX+3;

if Left=1 then padX:=padX-3;

  

if (y>425) and (x>padX) and (x<padX+80) then dy:=-(random(3)+2);

 

// отрисовка фона, мячика и дощечки

pic[0].draw(0,0); 

pic[7].draw(padX,435);

pic[6].Draw(x,y);

for i:=1 to 10 do

for j:=1 to 10 do

if mass[i,j]<>0 then pic[mass[i,j]].Draw(i*sizeX, j*sizeY);

 

Redraw;

sleep(5);

 end;  

  

end.

 

 

Модуль векторной графики

Векторная графика состоит из сплошных фигур- сколько бы мы ни увеличивали, это будут такие же фигуры, т.е. рисунок состоит из сплошных безразмерных прямых, кругов и т.д.

uses ABCObjects;

begin

// тут будет программа

end.

Теперь что мы можем в этом модуле делать, т.е. команды. Фигуры мы создаём тут как типы данных. Ниже я создам прямоугольник и круг, точнее выделю для них переменные:

Var

a : rectangleABC;

b : circleABC;

Далее на скриншоте показано как эти фигуры создавать уже- всплывает подсказка, по которой можно понять что тут за параметры.

Остаётся только запустить и фигуры будут уже нарисованы. Чтобы использовать цвета, можно подключить ещё graphabc- потому что стандартные цвета типа clRed тут не работают.

Можно например поменять ширину прямоугольника: a.Width := 250;

Действует тут всё по принципам объектно-ориентированного программирования. Фигуры это классы (структуры), а ширина, высота и т.д. это атрибуты класса, пишутся они через точку.

Вот тут я создал ещё круг и переместил его в новые координаты:

b:= new circleABC(100,150,20);

b.MoveTo(40,70);

Внутри прямоугольника я могу написать какой-нибудь текст, а внутри круга число:

a.text := 'Привет!';

b.Number := 15;

Если фигуры пересекаются, какую-то из них можно перенести на передний план. Например, круг:

b.ToFront();

Проверить пересечение можно с помощью метода intersect(). Например, если круг пересекается с прямоугольником, я выведу что пересекаются. Если нет, то нет:

if b.Intersect(a) then write('Пересекается') else write('НЕТ');

 

Игра змейка

На примере игры змейка мы лучше освоим взаимодействие векторных графических элементов.

Сначала мы подключаем модули растровой и векторной графики. Растровую будем использовать для создания решётчатого поля.

uses graphabc, abcobjects;

 

procedure sharp ();

begin

for var i:=0 to 6 do line(0,80*i,640,80*i);

for var i:=0 to 8 do line(80*i,0,80*i,480);

end;

 

Т.е. у нас будут квадратные клетки стороной по 80 точек. В них будут рисоваться круги - элементы змеек.

Далее у нас поле объявления переменных и процедура обработки нажатия клавиш лево, право и т.п.

 

var

ball : array [1..4] of circleABC; // 4 куска змейки

head : circleABC; // и ещё голова

xBall, yBall, z : integer; // координаты головы и переменная для процедуры нажатия клавиш

apple : circleABC; // яблоко - то что как бы съедает змейка и прибавляются очки

AppleX, AppleY : integer; // координаты яблока

score : textABC; // очки

 

procedure keydown (key:integer);

begin

if(key=vk_right) then z:=1; // если нажали клавишу ВПРАВО, то спец.переменной даём 1

if(key=vk_left) then z:=2;

if(key=vk_up) then z:=3;

if(key=vk_down) then z:=4;

end;

 

Зачем нужна такая процедура? Она позволяет змейке двигаться непрерывно, как бы самой по себе. Если мы исключим из схемы переменную z, то тогда змейка будет двигаться только если мы нажимаем на клавиши.

Далее идёт главная часть программы.

 

begin

sharp(); // выводим решётчатое поле

 

// начальные координаты головы змейки

xBall := 3*80 - 40;

yBall := 2*80 - 40;

 

// начальные координаты первого яблока

applex := 5*80 - 40;

appley := 4*80 - 40;

 

Нюанс тут такой, что векторные круги создаются в центре, а перемещаются в левый верхний угол - поэтому нужно обращать внимание на эти сдвиги типа +40, -40 и т.д. т.е. это половина от размера клетки. Впрочем, в pascalabc всплывают подсказки при вводе методов (процедур) классов (круглешков) и поэтому можно легко разобраться.

 

// создаём все круглешки туда куда надо (x,y,радиус,цвет) - тут по сути присутствуют конструкторы класса CircleABC

apple := CircleABC.Create(applex,appley,40,clRed);

head := CircleABC.Create(xBall,yBall,40,clBlue);

for var i:=1 to 4 do ball[i] := CircleABC.Create(xBall,yBall+80*i,40,clBlue);

 

// и текст тоже создаём (x,y,размер,сам текст,цвет)

score := TextABC.Create(0,0,20,'0',clGreen);

 

У векторных объектов ещё такая особенность, что они не перерисовываются - вот мы создали эти круги и они будут просто перемещаться куда нам надо, ничего не мерцает. И при этом эти круги в данном процессе не удаляются - мы их создали и они так и останутся.

 

// главный цикл игры

while true do begin

onkeydown := keydown; // ожидание нажатия клавиши

 

// если что-то нажато (т.е. z уже перезаписалась и потому не равна нулю), то тогда сдвигаем змейку так, чтобы её элементы двигались друг за другом

if (z<>0) then begin

for var i:=4 downto 2 do ball[i].MoveTo(ball[i-1].position.x,ball[i-1].position.y);

ball[1].moveto(xBall-40,yBall-40);

end;

 

// если нажали клавишу, то передвигаем голову змейки куда нам надо

if(z=1) then xBall+=80

else if(z=2) then xBall-=80

else if(z=3) then yBall-=80

else if(z=4) then yBall+=80;

 

// если достигли краёв поля, тогда выходим с другой стороны (неумирающая змейка)

if (xBall>640) then xBall:=40;

if (xBall<0) then xBall:=600;

if (yBall>480) then yBall:=40;

if (yBall<0) then yBall:=400;

 

// если голова оказалась на том же месте, где и яблоко

if (xBall=appleX) and (yBall=appley) then begin

// перемещаем яблоко в случайные координаты (как бы новое яблоко)

applex := random(1,8) * 80 - 40;

appley := random(1,6) * 80 - 40;

apple.MoveTo(applex-40,appley-40);

 

// прибавляем 1 балл

score.Text := ((score.Text).ToInteger + 1).ToString;

end;

 

// двигаем голову змейки куда надо

head.moveto(xBall-40,yBall-40);

 

// задержка (тут можно регулировать скорость змейки)

sleep(500);

end; // конец главного цикла

end. // конец главной части программы

   

 

Можно усовершенствовать эту змейку, сделать поинтереснее. Например, пусть змейка умирает, если мы переходим границы игрового поля. Тогда заменим вот это всё:

if (xBall>640) then xBall:=40;

if (xBall<0) then xBall:=600;

if (yBall>480) then yBall:=40;

if (yBall<0) then yBall:=400;

 

На вот такое условие:

if(xBall>640) or (xBall<0) or (yBall>480) or (yBall<0) then begin

gameover(scores);

goto over;

end;

 

И создадим процедуру окончания игры:

procedure gameover (scores : integer);

begin

ClearWindow(); // очистить экран

SetBrushColor(clWhite); // фон текста обелить

Textout(100,100,'ИГРА ОКОНЧЕНА!'); // вывести что игра окончена

Textout(100,150,scores.ToString); // и вывести сколько баллов было набрано

end;


И нужно эти баллы так же считать и запоминать в отдельную глобальную переменную. Создадим:

scores : integer;

И добавим при пересечении яблока: scores+= 1;

И в начале главной части программы (после begin) зададим начальное значение: scores := 0;

 

И насчёт goto - т.е. прыжок в определённую часть программы. Обычно можно обойтись без него, т.к. многие программисты его не любят из-за того что чрезмерное использование данного оператора сильно запутывает программу и рушит её структурность. Но иногда его наоборот удобно использовать вместо создания лишних условий и логических переменных, т.е. это будет выглядеть более понятно и менее громоздко.

Сначала нужно создать метку: label over;

Это можно сделать наверху после того как мы объявили переменные.

Далее мы пишем в нужном месте переместиться на метку с таким-то названием: goto over;

И далее нужно указать, куда именно перемещаться. В данном случае игра заканчивается, поэтому мы сразу выходим из главного цикла, чтобы змейка там не пыталась продолжать что-то делать. После него и ставим метку и ставим после неё двоеточие:

end; // конец главного цикла

over: // перемещаться будем сюда

end. // конец программы

 

Чтобы было меньше косяков, пусть яблоки на граничных клетках не синтезируются, т.е. сделаем так:

applex := random(2,7) * 80 - 40;

appley := random(2,5) * 80 - 40;

 

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

ball : array of circleABC;

Точнее, он был статический (из 4 элементов) - а мы заменим его на динамический. В начале главной части программы затем пишем:

balls:= 1; // вначале у нас будет 1 кружок (т.е. змейка будет состоять из головы и вот этого 1 тела как бы - т.е. всего из 2 элементов состоит змейка, из 2 кругов)

setlength(ball,balls+1); // выделяем массив нужного размера - нумерация начинается с нуля, поэтому для удобства создадим на 1 элемент больше, а нулевой оставим пустым

Создание змейки в начале заменится на это: for var i:=1 to balls do ball[i] := CircleABC.Create(xBall,yBall+80*i,40,clBlue);

 

Сдвиг змейки с учётом её целостности станет таким:

if (z<>0) then begin

for var i:=balls downto 2 do ball[i].MoveTo(ball[i-1].position.x,ball[i-1].position.y);

ball[1].moveto(xBall-40,yBall-40);

end;

 

Если мы съели яблоко, надо создать новый элемент змейки в нужном месте:

balls+=1;

setlength(ball,balls+1); // добавляем новое пространство в массиве (старое сохраняется)

ball[balls] := circleabc.create(ball[balls-1].Position.x+40,ball[balls-1].Position.y+40,40,clBlue);

 

И можно ещё сделать, чтобы скорость змейки росла с увеличением её длины, так сказать. Поэтому чем больше кружков змейки, тем меньше должна быть задержка:

sleep(trunc(700/balls));

 

________________________________________________________________________

Раздел 3. Стандартные окна ОС Windows

Как создать окно

В этом разделе на примере программы "калькулятор" мы посмотрим как создавать приложения со стандартными окнами операционной системы Windows (что в переводе тоже "окна" - интересная тавтология). Для этого при создании нового проекта в pascalABC нужно выбрать уже Windows Forms.

Файл -> Новый проект -> Приложение Windows Forms и жмём ОК

...

Открылся редактор. У него 2 вкладки: дизайнер и код. В дизайнере мы будем видеть форму, а в коде- ну понятно что- собственно сам код всего этого добра.

Вот так выглядит код:

Unit Unit1;

 

Interface

uses System, System.Drawing, System.Windows.Forms;

 

Type

Form1 = class(Form)

{$region FormDesigner}

Private

{$resource Unit1.Form1.resources}

{$include Unit1.Form1.inc}

{$endregion FormDesigner}

Public

constructor;

Begin

InitializeComponent;

end;

end;

 

Implementation

end.

 

Слева есть палитра- оттуда ты можешь легко как в конструкторе добавлять всякие кнопки и прочее- это называется "стандартные элементы управления". Там же есть контейнеры, меню и т.д.

Справа в инспекторе объектов мы можем управлять всеми этими добавляемыми элементами.

У тебя сразу же создалось 2 файла. Файл формы ты видишь перед собой. Главный же выглядит так:

uses Unit1;

 

Begin

System.Windows.Forms.Application.EnableVisualStyles();

System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);

System.Windows.Forms.Application.Run(new Form1)

end.

..... ...... .....

Добавим, например, кнопку и текст. И чтобы при нажатии на эту кнопку выводился какой-то текст. Кнопка это button, текст- label.

Щёлкаем дважды по кнопке и попадаем в код этой кнопки. И то что мы там напишем, будет выполняться при нажатии этой кнопки.

Мы хотим изменить текст, тогда пишем:

label1.Text:= 'Привет!';

И запускаем программу, нажимаем на кнопку и убеждаемся что всё работает.

...

Можно изменить параметры кнопки с помощью инспектора справа, там можно видеть то что мы можем сделать.

Можно также все эти параметры прописывать в коде. Например, нажмём на label1 и посмотрим какие у неё есть параметры. Я хочу например чтобы при нажатии кнопки у меня в этой метке (label1) менялся задний фон (backcolor). Двойным нажатием ЛКМ на кнопку попадаю в код. Прописываю:

 label1.BackColor := color.Blue;

Аналогично можно изучить остальные настройки, их там очень много. Часть из них будет рассмотрено в программе "калькулятор" в следующей главе.

 

Программа калькулятор

Сначала мы в форме рисуем поля и кнопки- кнопки с цифрами, поле для ввода-вывода- выглядеть это всё будет как-то так:

Далее для каждой кнопки нужно прописать то что она делает. Например, если мы нажмём на циферные кнопки, код там будет такой:

textbox1.Text+='4'; // это для цифры 4

И для других кнопок тоже:

 

a:=StrToInt(textbox1.Text);

textbox1.Text:='';

s:='+'; // для кнопки +


 b:=StrToInt(textbox1.Text); // для кнопки =

 if s='+' then res:=a+b;

 if s='-' then res:=a-b;

 textbox1.Text:=IntToStr(res);

Это калькулятор простейший, работает он коряво, но в качестве примера сойдёт.

...

Вот такой будет код всего файла Unit1.pas

Unit Unit1;

 

Interface

uses System, System.Drawing, System.Windows.Forms;

 

Type

Form1 = class(Form)

procedure button1_Click(sender: Object; e: EventArgs);

procedure button2_Click(sender: Object; e: EventArgs);

procedure button3_Click(sender: Object; e: EventArgs);

procedure button10_Click(sender: Object; e: EventArgs);

procedure button4_Click(sender: Object; e: EventArgs);

procedure button5_Click(sender: Object; e: EventArgs);

procedure button6_Click(sender: Object; e: EventArgs);

procedure button7_Click(sender: Object; e: EventArgs);

procedure button8_Click(sender: Object; e: EventArgs);

procedure button9_Click(sender: Object; e: EventArgs);

procedure button15_Click(sender: Object; e: EventArgs);

procedure button12_Click(sender: Object; e: EventArgs);

procedure toolStripMenuItem2_Click(sender: Object; e: EventArgs);

procedure toolStripMenuItem3_Click(sender: Object; e: EventArgs);

procedure toolStripMenuItem8_Click(sender: Object; e: EventArgs);

procedure button14_Click(sender: Object; e: EventArgs);

procedure button11_Click(sender: Object; e: EventArgs);

procedure textBox1_TextChanged(sender: Object; e: EventArgs);

{$region FormDesigner}

Private

{$resource Unit1.Form1.resources}

button1: Button;

button2: Button;

button3: Button;

button4: Button;

button5: Button;

button6: Button;

button7: Button;

button8: Button;

button9: Button;

button10: Button;

button11: Button;

button12: Button;

button14: Button;

textBox1: TextBox;

menuStrip1: MenuStrip;

toolStripMenuItem1: ToolStripMenuItem;

toolStripMenuItem2: ToolStripMenuItem;

toolStripMenuItem3: ToolStripMenuItem;

toolStripMenuItem5: ToolStripMenuItem;

toolStripMenuItem6: ToolStripMenuItem;

toolStripMenuItem7: ToolStripSeparator;

toolStripMenuItem8: ToolStripMenuItem;

toolStripMenuItem9: ToolStripMenuItem;

toolStripMenuItem10: ToolStripMenuItem;

button15: Button;

{$include Unit1.Form1.inc}

{$endregion FormDesigner}

Public

constructor;

Begin

InitializeComponent;

end;

end;

 

Implementation

var a,b,res:integer; s:string;

 

 

procedure Form1.button1_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='1';

end;

 

procedure Form1.button2_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='2';

end;

 

procedure Form1.button3_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='3';

end;

 

procedure Form1.button10_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='0';

end;

 

procedure Form1.button4_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='4';

end;

 

procedure Form1.button5_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='5';

end;

 

procedure Form1.button6_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='6';

end;

 

procedure Form1.button7_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='7';

end;

 

procedure Form1.button8_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='8';

end;

 

procedure Form1.button9_Click(sender: Object; e: EventArgs);

Begin

textbox1.Text+='9';

end;

 

 

procedure Form1.button15_Click(sender: Object; e: EventArgs);

Begin

a:=StrToInt(textbox1.Text);

textbox1.Text:='';

s:='+';

end;

 

 

procedure Form1.button12_Click(sender: Object; e: EventArgs);

Begin

b:=StrToInt(textbox1.Text);

if s='+' then res:=a+b;

if s='-' then res:=a-b;

textbox1.Text:=IntToStr(res);

end;

 

 

procedure Form1.toolStripMenuItem2_Click(sender: Object; e: EventArgs);

Begin

end;

 

procedure Form1.toolStripMenuItem3_Click(sender: Object; e: EventArgs);

Begin

end;

 

procedure Form1.toolStripMenuItem8_Click(sender: Object; e: EventArgs);

Begin

form1.ActiveForm.Close();

end;

 

procedure Form1.button14_Click(sender: Object; e: EventArgs);

Begin

a:=StrToInt(textbox1.Text);

textbox1.Text:='';

s:='-';

end;

 

procedure Form1.button11_Click(sender: Object; e: EventArgs);

Begin

end;

 

procedure Form1.textBox1_TextChanged(sender: Object; e: EventArgs);

Begin

end;

 

end.

 

В параметрах поля ввода-вывода (TextBox) указываем RightToLeft как Yes (справа в инспекторе) - чтобы писалось справа налево.

После слова implementation создаются вручную вспомогательные переменные, которые используются при обработке сложения и вычитания.

 

________________________________________________________________________

Конец.


Дата добавления: 2018-09-23; просмотров: 222; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!