Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управление и оптимизация / Osnovi informatsionnikh i komputernikh tekhnologiy 2011

.pdf
Скачиваний:
50
Добавлен:
02.09.2019
Размер:
2.13 Mб
Скачать

Done и тем самым завершить выполнение цикла, потребуется еще один метод

– обработчик события OnClose главной формы.

Код, который необходимо ввести внутри этого метода очень прост: procedure TForm1.FormClose (Sender: TObject; var Action:

TCloseAction); begin

Done := True;

end;

Единственная строка кода внутри обработчика событий, которую требуется ввести, устанавливает переменную формы Done в True, вызывая тем самым завершение цикла repeat внутри метода FormActivate.

Практическая часть 2

Построение своей формы «О программе…» Доработаем программу из лабораторной работы 3 практическая часть 2

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

1.Разместим еще одну кнопку Button3 с заголовком «О программе».

2.Выберем в главном меню Delphi пункт File | New. В появившемся диалоговом окне перейдите на закладку Forms. Появится «галерея шаблонов». Выберите здесь шаблон About Box, приспособленный для вывода информации о программе. Нажмите OK. В среде разработки Delphi появится дополнительное окно. Видоизмените его, занеся в компоненты TLabel сведения о разработчике: учебная группа, ФИО, дата создания, ФИО преподавателя. Запомните название формы (свойство Name) - AboutBox. Сохраните модуль (пункт File | Save As) под именем, например uAbout.pas.

3.Теперь надо созданною форму подключить к основной форме программы. Перейдите на первую (основную) форму. Допишите в список модулей в начале модуля Unit1 основной формы в директиве Uses еще один -

Ваш модуль: Uses Windows, SysUtil, ..., uAbout. Теперь идентификатор

AboutBox станет доступен в модуле Unit1.

4.Создайте обработчик события для кнопки О программе:

procedure TForm1.Button3Click(Sender: TObject); begin

AboutBox.ShowModal; {Метод ShowModal изображает форму на экране}

end;

Комментарий. Здесь Вы можете воспользоваться двумя методами – ShowModal и Show. При использовании первого метода образуется так называемое модальное окно. Пока Вы его не закроете, Вы не сможете переключиться ни на одно другое окно. Такие окна удобны для создания диалога, требующего обязательного ответа. При использовании метода Show образуется обычное окно, из которого свободно можно выйти, не закрывая

151

его (эти окна используются, например, при создании справки). Как запрограммировать закрытие окна?

При использовании метода Show обязательно вставьте в обработчик события закрывающей кнопки вызванного окна известный Вам метод Close.

При использовании метода ShowModal либо поступите аналогично, либо задайте через Инспектор объектов для закрывающей окно кнопки свойство ModalResult, равное константе mrOK, mrCancel (по названию кнопки). Главное – не задавать константу ноль, обозначаемую mrNone . Дело в том, что форма закрывается, когда ее одноименное свойство ModalResult принимает ненулевое значение, а при нажатии кнопки автоматически происходит присваивание Form.ModalResult:=Button.ModalResult.

Заметим, что в использованных Вами шаблонах форм свойство ModalResult кнопок заранее установлено ненулевым. Однако можно и не использовать готовые шаблоны, создавая формы выбором меню File | New Form. Тогда о значении ModalResult следует позаботиться.

Вы сейчас создали информационное окно AboutBox. При создании диалоговых окон для ввода исходных данных необходимо, во-первых, разместить на форме диалога необходимые для ввода компоненты и закрывающие кнопки (задав для кнопок свойство ModаlResult) и, во-вторых, проверить, какую кнопку пользователь использовал для ее закрытия, например кнопку OK или Cancel. Последнее легко сделать, т.к. метод ShowModal работает как функция, возвращая значение свойства ModalResult закрывающей кнопки. Примерный фрагмент кода для вызова диалогового окна имеет вид

if Form2.ShowModal =mrOk then begin

Val (Form2.Edi1.Text, x, code);

...

end;

Выполните проект, используя разные методы открытия (ShowModal и Show) и закрытия окна (через Close или ModalResult).

Лабораторная работа: «Построение программы перемножения матриц».

Цели работы:

научиться использовать компонент StringGrid;

приобрести практические навыки работы с компонентом

StringGrid;

создать программу перемножения двух матриц.

Технические средства: ПЭВМ с установленной операционной системой

Windows.

Программные средства: Delphi 7.

152

Теоретическое введение

Для представления входных или выходных данных в виде таблиц в Delphi может использоваться компонент TStringGrid - таблица, состоящая из переменных типа String. Важнейшими свойствами являются ColCount - число столбцов в таблице и RowCount - число строк. Для доступа к ячейкам таблицы предназначено индексированное свойство Cells, обращение к которому происходит как к двумерному массиву.

Практическая часть

Напишем программу для умножения двух матриц.

1.Разместим на форме три компонента TStringGrid и установим их свойство Name в A,B,C, соответственно. Таблица C будет содержать результат умножения. Для всех таблиц установим в инспекторе объектов значения свойств ColCount и RowCount, равные 3, ScrollBars - ssNone, FixedRows - 0, FixedCols=0, Options.GoEditing - True. Добавим Label с надписью X и Button с надписью = (см. рис.) .

2. Напишите обработчик события

procedure TForm1.Button1Click(Sender: TObject); var i,j,k,n, Sum: integer;

begin n:=A.ColCount-1; for i:=0 to n do for j:=0 to n do begin

Sum := 0;

for k:=0 to n do

Sum := Sum + StrToInt(A.Cells[k,i])*StrToInt(B.Cells[j,k]); С.Сells[j,i]:=IntToStr(Sum);

end;

end;

153

Лабораторная работа: «Динамическое создание интерфейсных элементов».

Цели работы:

научиться использовать методы Create и Destroy;

написать программу, создающую кнопку в процессе своей работы.

Технические средства: ПЭВМ с установленной операционной системой

Windows.

Программные средства: Delphi 7.

Практическая часть

Интерфейсные элементы (кнопки, меню и т.п.) можно создавать не только визуально (на этапе проектирования), но и в процессе работы программы (динамически). Для этого потребуется использовать метод конструктор класса этого интерфейсного элемента. Проделайте следующие действия.

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

procedure TForm1.Button1Click(Sender: TObject); begin

{Экземпляр новой кнопки создается методом-конструктором Create. Адрес экземпляра заносится в переменную MyButton. Аргументом

Create является компонент-владелец кнопки, т.е. форма} MyButton := TButton.Create(Form1);

{Далее указывается местонахождение кнопки} MyButton.Parent := Form1;

MyButton.Left := 60; {Расстояние от левого края формы} MyButton.Top := 15; {Расстояние от верхнего края формы} MyButton.Caption := “Привет!”;

end;

Саму переменную класса TButton объявите как глобальную в секции

Implementation модуля:

var MyButton: TButton;

Комментарий: Каждый компонент имеет, во-первых, предка, у которого он наследует свойства и методы, во-вторых, владельца (Owner), который может автоматически создавать и уничтожать данный компонент (вызывает его конструкторы и деструкторы при своем создании и уничтожении), в-третьих, родительский компонент (Parent), на котором данный компонент расположен визуально. При динамическом создании необходимо задавать имя владельца Owner параметром метода Create и имя родителя в свойстве Parent компонента, что выше и было сделано.

154

Владельцем компонентов обычно является форма, а родителями могут быть формы, панели и группы.

Заметьте, что метод деструктор Destroy для уничтожения кнопки здесь не использовался. Кнопку уничтожит владелец-форма «вместе с собой». Если же требуется уничтожить кнопку раньше, до закрытия формы, можно поступить следующим образом. Предусмотрите, например, еще одну кнопку с надписью Удалить и в обработчик события OnClick для нее занесите строку:

If MyButton.ComponentState <> [csDestroying] then MyButton.Destroy;

Лабораторная работа: «Создание собственных классов».

Цели работы:

1.Научиться создавать свои классы.

2.Написать программу, осуществляющую построение графиков.

Технические средства: ПЭВМ с установленной операционной системой

Windows.

Программные средства: Delphi 6.

Практическая часть

Создадим класс TGrafik, включающий поля, свойства и методы, и пригодный для изображения произвольных функций. В качестве базового класса (непосредственного предка) выберем класс TPaintBox, поддерживающий через свойство Canvas основные графические функции. Класс TGrafik будет дополнительно содержать свойства PenColor (цвет линии), BrushColor (цвет заливки фона), Border (цвет рамки), Series (индексированное свойство, набор значений по оси Y), поле NX (число точек по оси X). Переопределим унаследованный от TControl метод SetParent (прикрепление к родительскому визуальному компоненту, добавив в него выравнивание графика по всей области родительского компонента). Итак, для этого надо проделать следующие шаги.

1. Откройте новый проект. В разделе реализации модуля после строк implementation и {$R *.DFM} запишите объявление класса:

type TGrafik = class(TPaintBox)

private {Поля «для служебного пользования»}

fc: Tcolor;

{Цвет линии}

fbc: Tcolor;

{Цвет фона}

public {Общедоступные свойства и методы} nx: integer; {Число точек}

procedure SetParent(Pn: TWinControl);override; procedure SetColor(c: TColor);

procedure SetBColor(c: TColor); procedure SetBorder(c: Tcolor);

155

procedure SetSeries(i: integer; y: real);

property Border: TColor write SetBorder; {Цвет рамки} property PenColor: TColor read Fc write Setcolor; property BrushColor: TColor read fbc write SetBcolor; property Series[i: integer]: real write SetSeries;

end;

{Свойство описывается следующим образом: служебное слово property, затем название и тип свойства. После служебных слов read и write записываются имена методов чтения и записи свойства, соответственно. Метод чтения описывается как функция. Если потребности в специальном методе чтения нет, то вместо имени метода чтения указывается имя поля, хранящего значения свойства. Если свойство используется только для чтения или только для записи, то соответствующий метод может быть опущен.}

procedure TGrafik.SetParent (Pn: TWinControl); begin

Inherited SetParent(Pn); {Вызывается унаследованный метод} Align:=alclient; {Выравнивание по всей области компонента Pn} Visible:=true;

end;

procedure TGrafik.SetColor (c: TColor); { Метод записи свойства} begin

fc:=c;

Canvas.pen.color:=fc;{Кроме записи сразу происходит установка

цвета} end;

{Разумеется, проще установить цвет, обращаясь непосредственно к свойству Canvas объекта Grafik. Поэтому данный пример носит несколько искусственный характер. Цель его - продемонстрировать методику создания и использования свойств}

procedure TGrafik.SetBcolor (c: TColor); begin

fbc:=c;

Canvas.Brush.color:=fbc;

end;

procedure TGrafik.SetBorder(c: Tcolor); begin

Canvas.Pen.Color:=c;

Canvas.Rectangle(0,0,width,height); {Рисуется прямоугольник} Canvas.Pen.Color:=fc;

end;

{Запись значений в свойство Series автоматически приводит к появлению этих значений на графике}

procedure TGrafik.SetSeries(i: integer; y: real); var ix, iy: integer; {Экранные координаты} begin

156

if i<=1 then begin

iy := round(y*height); {height и width - унаследованные от TPaintBox

свойства} Canvas.MoveTo(1,height-iy-1); end

else begin

ix := round(i/nx*width); iy := round(y*height);

Canvas.LineTo(ix,height-iy-1); end;

end;

2. Создайте на форме следующие интерфейсные элементы: кнопку Button1 c надписью Рисовать, панель Panel1, группу GroupBox1, в которой находятся шесть строк редактирования с приглашениями (см. рис.)

3. Создайте обработчик события OnClick для кнопки Рисовать. Непосредственно перед обработчиками, но после описаний методов класса объявите переменную типа TGrafik.

var g: TGrafik;

procedure TForm1.Button1Click(Sender: TObject); var i,n,code: integer;

x,x0,xk,dx,w: real; YMax, YMin: real; function sinc(x: real): real;

begin

if x<>0 then sinc:=sin(x)/x else

sinc:=1;

157

end; begin

Val(NtEdit.Text, n, code); Val(WEdit.Text, W, code); Val(InitTEdit.Text, x0, code); Val(FinalTEdit.Text, xk, code); Val(MaxEdit.Text, Ymax, code); Val(MinEdit.Text, Ymin, code); dx:=(xk-x0)/n;

with g do {Обращение к графику здесь происходит через свойства} begin

nx:=n;

BrushColor:=clWhite;

Border:=clRed;

PenColor:=clRed; for i:=1 to n do begin x:=i*dx+x0;

Series[i]:=(sinc(w*x)-YMin)/(YMax-YMin);

end; {Разумеется, вместо sin здесь может находиться вызов любой функции, например, sinc(x)=sin(x)/x или обращение к массиву}

OnPaint:=Button1Click; {Событию перерисовки графика назначается обработчик Button1Click}

Form1.WEdit.OnChange:=OnPaint;

{При изменении частоты график будет сразу перерисован} end;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

{Создание экземпляра класса TGrafik и привязка его к панели} g:=TGrafik.create(Form1); {Владелец - форма}

g.SetParent(Form1.Panel1); {Родитель - панель} {Предок - PaintBox}

end;

158

ЛИТЕРАТУРА

1.Гаврилов М.В. Информатика и информационные технологии./ М.В. Гаврилов., В.А. Климов. М.: Юрайт, 2011. – 350 с.

2.Таненбаум, Э. Архитектура компьютера./ Э. Таненбаум. СПб. и

др. : Питер , 2007. — 848 с.

3.Голицына О.Л. Языки программирования./ О.Л. Голицына, Т.Л. Партыка, И.И. Попов. М.: Инфра-М, 2008. — 400 с.

4.Олифер В.Г. Компьютерные сети. Принципы, технологии, протоколы./ В.Г. Олифер, Н.А. Олифер. СПб. И др.: Питер, 2006. – 956 с.

5.Дронов В.А. HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов./ В.А. Дронов. СПб.: БХВ-Петербург, 2011. – 416 с.

6.Бутузов С.Ю. Алгоритмизация и программирование. Учебнометодическое пособие./ С.Ю. Бутузов, Б.М. Пранов, Р.Ш. Хабибуллин.– М.: Академия ГПС МЧС России, 2009. − 57 с.

7.Системы связи, оповещения, автоматизации и безопасности МЧС России (юбилейный сборник). [Электронный ресурс]. – Режим доступа – http://www.mchs.informost.ru/, свободный. – Загл. с экрана.

8.Сайт САМОСПАС [Электронный ресурс]. – Режим доступа : http://www.samospas.ru/, свободный. – Загл. с экрана.

9.Сайт Интернет университета информационных технологий [Электронный ресурс]. – Режим доступа : http://www.intuit.ru/, свободный. – Загл. с экрана.

159