Смекни!
smekni.com

Объектно-ориентированная разработка программ (стр. 3 из 4)

2.3. Разместить на форме объект “Shape”( эллипс) и кнопку “Button” с названием «Цвет формы». При запуске (выполнении) программы при нажатии на кнопку выводится стандартное диалоговое окно выбора цвета и цвет формы изменяется соответственно.

Для решения этой задачи, мы разработаем форму и интерфейс приложений на языке Delphi. Разработаем форму, которая будет основным меню для решения поставленных задач. Вызова форм colorshape, parray и тugol, которые будут реализовывать задачи. Программа построенна на модальных окнах.

Анализ технического задания и постановка задачи проектирования.

Так, согласно заданию, программа должна быть реализована в среде Delphiи должна выполнять следующие функции:

- вывод на экран информации о задании и назначении программы;

- ввод пользователем значений, определяющих параметры;

- проверка полученного от пользователя значения и вывод результатов работы программы;

Составим следующий алгоритм:

1. По запуску программы вывести диалоговое окно с выбором программ которые нужно выполнить.

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

3. В заданных массивах А и В поменять местами максимальные элементы. Вывести на экран преобразованные массивы.

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

Наиболее важными свойствами формы (всего их 38) являются:

Caption – заголовок, указывающий наименование формы;

Color – цвет фона формы;

Height – высота окна формы в пикселях;

Left – смещение по горизонтали в пикселях левого верхне

Top – смещение по вертикали в пикселях левого верхнего

Width – ширина окна формы в пикселях.

BorderStyle - тип рамки;

Font - шрифт и его атрибуты;

Icon - пиктограмма для изображения свернутой формы;

Visible - задает видимую или невидимую форму;

Для создания интерфейса можно использовать базовые компоненты к ним можно отнести:

Label — поле вывода текста;

Edit — поле ввода/редактирования текста;

Button — командная кнопка;

GroupBox – рамка группы

CheckBox — «флажок», независимая кнопка выбора;

RadioGroup – рамка группы переключателей

RadioButton – радиокнопка , «переключатель»,

ListВox — список выбора;

ComboBox— комбинированный список выбора.

Для построения данного приложения, применялись следующие свойства формы из всех возможных:

Caption заголовок, указывающий наименование формы;

Color цвет фона формы;

Height высота окна формы в пикселях;

Left смещение по горизонтали в пикселях левого верхне

Top смещение по вертикали в пикселях левого верхнего

Width ширина окна формы в пикселях.

BorderStyle - тип рамки;

Font - шрифт и его атрибуты;

Icon - пиктограмма для изображения свернутой формы;

Visible - задает видимую или невидимую форму;

Position - задает расположение формы при выполнении приложения

Событий, которые могут произойти с каким-либо элементом управления не так уж и много. Для кнопки, например, есть два основных события: 1) – одинарный щелчок мышью на ней (click), 2) – двойной щелчок мышью на ней (doubleclick). Программист, если необходимо реакция на нажатие кнопки (а иначе зачем она нужна?), должен написать процедуру-обработчик сообщения (Eventhandler), вызывающую определенные ответные действия.

Визуальный Компонент TLabel представляет собой статический текст и применяется для идентификации других объектов приложения. Он располагается рядом с полями редактирования, флажками, переключателями и помогает пользователю сориентироваться в их назначении. Обычно компонент TLabel события не обрабатывает.

Визуальный Компонент TEdit позволяет пользователю ввести с клавиатуры строку символов, или вывести в их поле редактирования. При вводе-выводе данных изменяется значение свойства Text компонента типа TEdit. Заметим, что введенный текст будет типа string, и выводимый текст должен быть типа string. Для преобразования строки символов в число и обратно существуют специальные функции, например, некоторые из них:

1) StrToInt(Text_String) – преобразует строку Text_String в целое число (конечно, если она состоит из символов, которые соответствуют цифрам, иначе, преобразование бессмысленно);

2) IntToStr(Number_Integer) – преобразует целое число Number_Integer в строку эквивалентных символов;

· Листинг программы содержится в приложении А.

· Результат тестового запуска приведен в приложении В.

· Программа разработана с использованием языка Delphi.

Приложение А

Листинг программ:

unit tmain;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

implementation

uses Tugol, parray, colorshape;

{ TForm1 }

procedure TForm1.Button1Click(Sender: Tobject);

begin

Form1.Hide; // закрытьобъект 1

Form2.ShowModal; // открытьобъект 2

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form1.Hide;

Form3.ShowModal; // открытьобъект 3

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form1.Hide;

Form4.ShowModal; // открытьобъект 4

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form1.Close; // закрытьобъект 1

end;

initialization

{$I tmain.lrs}

end.

unit Tugol;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

StdCtrls;

type

{ TForm2 }

TForm2 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: char);

procedure Edit2KeyPress(Sender: TObject; var Key: char);

procedure Edit3KeyPress(Sender: TObject; var Key: char);

procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

private

{ private declarations }

public

{ public declarations }

end;

var

Form2: TForm2;

implementation

uses tmain;

{ TForm2 }

procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

Form1.Show;

end;

procedure TForm2.Button1Click(Sender: TObject);

var a,b,c,max,min,srd:integer; //переменные для сторон прямоугольника и вычислений

begin

// преобразование строковых значений в числовые

a:=StrToInt(Edit1.Text);

b:=StrToInt(Edit2.Text);

c:=StrToInt(Edit3.Text);

//Находим максимальную по длине стророну

max:=a;

if b>max then max:=b;

if c>max then max:=c;

// Находим минимальную по длине сторону

min:=a;

if b<min then min:=b;

if c<min then min:=c;

// Находим среднию по длине сторону

srd:=a+b+c-min-max;

if (sqr(max)=sqr(srd)+sqr(min)) then //Проверяем теорему Пифагора a2 + b2 = c2

Showmessage('Это прямоугольный треугольник!'

+' Стороны в порядке возрастания их длины: '

+IntToStr(min)+' '

+IntToStr(srd)+' '

+IntToStr(max))

else ShowMessage('Это не может быть прямоугольный треугольник!');

end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: char);

begin

case key of

'0'..'9': ; //можно вводить только цифры

',': ; //или дробный числа

#8 : ; // клавиша Back Space

#13 : Edit2.SetFocus ; // клавиша Enter, и переход на другое окно ввода

// Остальные символы - запрещены !

else key := Chr(0); // запрещаем отображать символ

end;

end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: char);

begin

case key of

'0'..'9': ; //можно вводить только цифры

',': ; //или дробный числа

#8 : ; // клавиша Back Space

#13 : Edit3.SetFocus ; // клавиша Enter, и переход на другое окно ввода

// Остальные символы - запрещены !

else key := Chr(0); // запрещаем отображать символ

end;

end;

procedure TForm2.Edit3KeyPress(Sender: TObject; var Key: char);

begin

case key of

'0'..'9': ; //можно вводить только цифры

',': ; //или дробный числа

#8 : ; // клавиша Back Space

#13 : Button1.SetFocus ; // клавиша Enter, и переход на кнопку вычисления

// Остальные символы - запрещены !

else key := Chr(0); // запрещаем отображать символ

end;

end;

initialization

{$I tugol.lrs}

end.

unit parray;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

Grids, StdCtrls;

type

{ TForm3 }

TForm3 = class(TForm)

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

procedure FormShow(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

const

size = 6;

var

Form3: TForm3;

a:array [1..size] of integer;

b:array [1..size] of integer;

max_a,max_b,buf:integer;

i:integer;

implementation

uses tmain;


{ TForm3 }

procedure TForm3.FormShow(Sender: TObject);

begin

with StringGrid1 do

for i:=1 to size do

begin

Cells[i-1,0]:='';

Cells[i-1,1]:='';

end;

with StringGrid2 do

for i:=1 to size do

begin

Cells[i-1,0]:='';

Cells[i-1,1]:='';

end;

for i := 1 to size do

begin

a[i] := 1 + Random(99); // заполняем массив случайными числами

b[i] := 1 + Random(99); // заполняем массив случайными числами

end;

Label7.Visible:=False;

Label8.Visible:=False;

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

with StringGrid1 do

for i:=1 to size do

begin

Cells[i-1,0]:=IntToStr(a[i]);

Cells[i-1,1]:=IntToStr(b[i]);

end;

max_a :=1;

max_b :=1;

for i:=2 to size do

begin

if a[i] > a[max_a] then max_a := i;

if b[i] > b[max_b] then max_b := i;

end;

Label7.Visible:=True;

Label7.Caption:='МаксимальныйэлементмассиваА :'+IntToStr(a[max_a])

+#13+'Номер элемента в массиве А :'+ IntToStr(max_a)

+#13+'Максимальный элемент массива В :'+IntToStr(b[max_b])

+#13+'Номер элемента в массиве В :'+ IntToStr(max_b);

buf:= a[max_a];

a[max_a]:= b[max_b];

b[max_b]:= buf;

with StringGrid2 do

for i:=1 to size do

begin

Cells[i-1,0]:=IntToStr(a[i]);

Cells[i-1,1]:=IntToStr(b[i]);

end;

max_a :=1;

max_b :=1;

for i:=2 to size do

begin

if a[i] > a[max_a] then max_a := i;

if b[i] > b[max_b] then max_b := i;

end;

Label8.Visible:=True;

Label8.Caption:='МаксимальныйэлементмассиваА :'+IntToStr(a[max_a])

+#13+'Номер элемента в массиве А :'+ IntToStr(max_a)

+#13+'Максимальный элемент массива В :'+IntToStr(b[max_b])

+#13+'Номер элемента в массиве В :'+ IntToStr(max_b);

end;

procedure TForm3.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

Form1.Show;

end;

initialization

{$I parray.lrs}

end.


unit colorshape;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,