Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Глава 1. Знакомство со средой Delphi

Рисование поля для различных игр | Для построения графиков | Построение графиков элементарных функций | В случайных местах | Движение двоичного образа по фоновой картинке | В динамических приложениях | Перемещение картинок | События от мыши | Движение образа по удерживанию левой кнопки мыши | Код клавиши |


Знакомство со средой Delphi

 

1.1. Использование компонентов общего назначения: TLabel, TButton, TEdit, TShape, TTimer, TPanel

 

1.1.1. Проект «Калькулятор»

Постановка задачи. Создайте простейший калькулятор для выполнения арифметических операций.

Реализация. Положите на форму кнопки TButton для знаков арифметических операций, кнопки для извлечения квадратного корня и возведения в квадрат. Положите три компонента TEdit: один для первого числа, второй – для второго и третий для вывода результата. Положите три надписи TLabel и подпишите их, как указано на рис. 1. При написании кода обработайте случай деления
на нуль и случай извлечения квадратного корня из отрицательного числа.

Создайте папку «Калькулятор» и сохраните проект в ней. Запустите проект на исполнение.

 

Рис. 1. Форма проекта «Калькулятор»

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

a,b:real;

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

edit3.Text:=FloatToStr(a+b);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

edit3.Text:=FloatToStr(a-b);

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

edit3.Text:=FloatToStr(a*b);

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

if b<>0 then

edit3.Text:=FloatToStr(a/b)

else

ShowMessage('Деление на нуль!');

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

edit3.Text:=FloatToStr(a*a);

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

if a>=0 then

edit3.Text:=FloatToStr(sqrt(a))

else

ShowMessage('Корень из отрицательного числа!');

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

edit1.text:='';

edit2.text:='';

edit3.text:='';

end;

end.

 

Задание. Усложните проект, убрав два окна TEdit. Добавьте 10 кнопок для цифр, кнопку для запятой, кнопки для равенства
и «Очистить». Числа вводите поочереди в окно редактора, в нем же должен отображаться результат. Примерный вид калькулятора приведен на рис. 2.

 

 

Рис. 2. Проект «Калькулятор»

1.1.2. Проект «Таймер»

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

Реализация. На форму положите два компонента TEdit для ввода минут и секунд, кнопку TButton с названием «Пуск», три надписи TLabel и таймер TTimer. Компонент TTimer невидим во время работы программы, поэтому его можно положить на любое место формы. В свойстве Timer 1. Interval задается интервал времени, через который работает код, написанный в процедуре Timer1Timer (Sender: TObject). Интервал времени задается в миллисекундах. Если
Timer 1. Interval = 1000, то временной промежуток равен 1 сек. Таймер включен, если его свойство Enabled имеет значение true и выключен, если false. Если таймер выключен, то код в процедуре
Timer1Timer(Sender: TObject) не работает.

Вид формы на этапе разработки приведен на рис. 3. Работающее окно изображено на рис. 4.

 

Рис. 3. Форма «Таймер» Рис. 4. Вид работающего окна

unit1 Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, MPlayer;

 

type

TForm1 = class(TForm)

Timer1: TTimer;

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Label1: TLabel;

Label2: TLabel;

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

{ Во время создания формы свойству Visible надписи Label3 надо присвоить значение False }

var min: integer; // минуты

sec: integer; // секунды

{Процедура ShowTime выводит, сколько времени осталось}

procedure ShowTime;

var buf: string[20];

begin

// Минуты и секунды выводим двумя цифрами

if min < 10 then

buf:= '0' + IntToStr(min) + ':'

else

buf:= IntToStr(min) + ':';

if sec < 10 then

buf:= buf + '0' + IntToStr(sec)

else

buf:= buf + IntToStr(sec);

Form1.Label3.Caption:= buf;

end;

// Сигнал от таймера

procedure TForm1.Timer1Timer(Sender: TObject);

begin

sec:= sec - 1;

ShowTime;

if (min = 0) and (sec = 0) then

// Заданный интервал истек

begin

Timer1.Enabled:= False; // Стоп

ShowMessage(Заданный интервал истек!');

Button1.Caption:= 'Пуск';

Label3.Visible:= False; // Скрыть индикатор

// Сделать видимыми поля ввода интервала

Label1.Visible:= True;

Edit1.Visible:= True;

Label2.Visible:= True;

Edit2.Visible:= True;

exit;

end;

if (sec = 0) and (min > 0) then

begin

sec:= 60;

min:= min - 1;

end;

end;

 

// Щелчок на кнопке пуск-стоп

procedure TForm1.Button1Click(Sender: TObject);

begin

if Form1.Timer1.Enabled then

// Таймер работает, надо остановить

begin

Timer1.Enabled:= False; // Стоп

Button1.Caption:= 'Пуск';

Label3.Visible:= False; // Скрыть индикатор

// Сделать видимыми поля ввода интервала

Label1.Visible:= True;

Edit1.Visible:= True;

Label2.Visible:= True;

Edit2.Visible:= True;

end

else

// Таймер стоит, надо запустить

begin

min:= StrToInt(Edit1.Text);

sec:= StrToInt(Edit2.Text);

if (sec = 0) and (min = 0) then

begin

ShowMessage('Надо задать интервал!');

exit;

end;

Timer1.Enabled:= True; // Запустить таймер

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

Label1.Visible:= False;

Edit1.Visible:= False;

Label2.Visible:= False;

Edit2.Visible:= False;

Label3.Visible:= True;

Button1.Caption:= 'Стоп';

ShowTime;

end;

end;

end.

Задание. Вместо компонентов TEdit положите на форму два компонента TUpDown. Эти компоненты позволяют нажатием на стрелочки задавать минуты и секунды, как показано на рис. 5.

Напишите для компонентов TUpDown соответствующие обработчики, сохраните проект в папке и запустите его.

 

 

Рис. 5. Проект «Таймер»

1.1.3. Проект «Светофор»

Постановка задачи. Три шарика, перекрашиваясь поочередно, имити-руют работу светофора.

Реализация. Положите на форму компонент TPanel. Он является несущей конструкцией для компонентов, лежащих на нем. Расположите на нем три компонента типа TShape. Задайте для них свойство StCircle, чтобы они имели форму круга. Свойство Brush.Color компонента TShape используется для задания цвета круга. Расположите два компонента TButton – кнопки «Пуск» и «Стоп». Также положите компонент TTimer. Форма этого проекта приведена на рис. 6.

Рис. 6. Форма проекта «Светофор»

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

 

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Panel1: TPanel;

Shape1: TShape;

Shape2: TShape;

Shape3: TShape;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

down:boolean;

i:integer;

implementation

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

down:=true;

i:=1;

timer1.enabled:=false;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled:=true;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

timer1.Enabled:=false;

close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if i=2 then

begin

shape2.Brush.Color:=clyellow;

if down then

begin

shape1.Brush.Color:=clgray;

i:=3;

end

else

begin

shape3.Brush.Color:=clgray;

i:=1;

end;

end

else

begin

if i=1 then

begin

shape1.Brush.Color:=clred;

shape2.Brush.Color:=clgray;

i:=2;

down:=true;

end

else

begin

shape3.Brush.Color:=clgreen;

shape2.Brush.Color:=clgray;

i:=2;

down:=false;

end;

end;

end;

end.

Задание. Положите на форму регулятор TTrackBar для увеличения или уменьшения времени свечения светофора.

В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор

if (TrackBar1.Position=0) then

ShowMessage(‘Задайте интервал’);

В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор

Timer1.Interval:=TrackBar1.Position*100;

Множитель 100 не обязателен.

1.1.4. Проект «Движение шарика TShape с отражением»

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

Реализация. Положите на форму панель, на нее три кнопки TBitBtn со страницы Additional: Start, Retry, Close. На эти кнопки можно поместить готовые надписи с соответствующими рисунками.

Положите на форму TShape в виде не очень большого кружка
и TTimer со страницы System. Вид формы приведен на рис. 7.

 

Рис. 7. Форма проекта «Движение шарика с отражением»

 

В разделе var опишем глобальные переменные:

var cw, ch, dx, dy, r: integer;

Переменные cw, ch хранят ширину и высоту рабочей (клиентской) области формы, т. е. без учета ее границ. Ниже приведен код.

 

unit Unit1;

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

 

type

TForm1 = class(TForm)

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Shape1: TShape;

Timer1: TTimer;

procedure BitBtn1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

dx,dy,cw,ch,r:integer;

implementation

{$R *.dfm}

 

procedure TForm1.BitBtn1Click(Sender: TObject);

begin // Кнопка “Start”

timer1.Enabled:=true;

end;

// Зададим начальные данные

procedure TForm1.FormCreate(Sender: TObject);

begin

cw:=clientwidth;

ch:=clientheight;

randomize;

repeat

dx:=-10+random(21);

dy:=-10+random(21);

until (dx<>0)and(dy<>0);

r:=shape1.Width div 2; // Радиус шарика

shape1.Left:=cw div 2; // Начальное положение в центре

shape1.Top:=ch div 2; // формы

timer1.Enabled:=false;

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

shape1.Left:=shape1.Left+dx;

shape1.Top:=shape1.Top+dy;

if (shape1.Left<0)or(shape1.Left+2*r>=cw) then

dx:=-dx;

if (shape1.top<0)or(shape1.top+2*r>=ch-panel1.Height) then

dy:=-dy;

end;

 

procedure TForm1.BitBtn2Click(Sender: TObject);

begin // Кнопка “Retry”

cw:=clientwidth;

ch:=clientheight;

repeat

dx:=-10+random(21);

dy:=-10+random(21);

until (dx<>0)and(dy<>0);

shape1.Left:=cw div 2;

shape1.Top:=ch div 2;

timer1.Enabled:=true;

end;

 

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

Timer1.Enabled:=false;

Close;

end;

end.

 

Задание. Усовершенствуйте проект так, чтобы цвет шарика задавался случайным образом, радиус тоже менялся случайно в заданном интервале.

Для задания цвета можно использовать функцию RGB:

Shape1.Brush.Color:= RGB(random(256), random(256), random(256));


Дата добавления: 2015-08-20; просмотров: 67 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Введение| Рисование узоров

mybiblioteka.su - 2015-2024 год. (0.043 сек.)