procedure TForm1.ReCalculation;
Лабораторная работа №15-16
Создание оконных интерактивных приложений. Построение диаграмм
Цель работы:
1. Получить навыки работы с системой Delphi;
2. Ознакомиться с некоторыми визуальными компонентами системы Delphi, предназначенными для программирования пользовательского интерфейса.
3. Изучить основные компоненты, предназначенные для разработки графиков и диаграмм, их свойства, порядок создания методов.
Продолжительность работы - 4 часа.
Выполнить пример приведенный ниже.
Дано: N – количество видов товаров (1N10), а так же сведения о продажах: название товара, цена единицы товара, количество проданного товара по каждому виду. Написать программу, выполняющую расчет стоимости продаж по видам товаров, и представляющую результаты расчетов в виде круговой диаграммы, демонстрирующей процентные доли видов товаров в общей стоимости продаж. Программа должна использовать оконный интерфейс и работать в интерактивном режиме (см. рис. 1).

Рис. 1. Внешний вид программы построения диаграммы
Инструкция по выполнению
- Средствами Windows создайте свою рабочую папку, в которой будете хранить результаты выполнения задания на программирования. Назовите ее.
- Запустите среду программирования Delphi 7.
- Создайте новое приложение, сохраните его в рабочей папке. Для этого однократно щелкните левой клавишей мыши по кнопке
«Save (Ctrl+S)». Назовите файл. - В окне Object Inspector задайте следующие свойства основной формы Form1:
| Свойство | Значение | Описание |
| Caption | Построение диаграммы | |
| Font\Size | ||
| Position | poScreenCenter | |
| BorderStyle | bsNone | |
| Height | ||
| Width |
- Последовательно расположите на форме Form1 перечисленные ниже объекты (см. рис. 1) и установите для них указанные в таблице значения свойств.
a. Строка редактирования Edit1 класса TEdit со свойствами:
| Свойство | Значение | Описание |
| Width | ||
| Hint | Введите количество видов товаров | |
| ShowHint | True |
b. Счетчик UpDown1 класса TupDown со свойствами:
| Свойство | Значение | Описание |
| Associate | Edit1 | |
| Max | ||
| Min | ||
| Orientation | udVertical |
c. Метка Label1 класса TLabel со свойствами:
| Свойство | Значение | Описание |
| Caption | Количество видов товаров: |
d. Групповая панель GroupBox1 класса TgroupBox со свойствами:
| Свойство | Значение | Описание |
| Caption | Данные о продажах | |
| Ctl3D | False | |
| Height | ||
| Hint | Введите данные о продажах | |
| Left | ||
| ShowHint | True | |
| Top | ||
| Width |
e. Строковая таблица StringGrid1 класса TStringGrid (компонент
– «StringGrid (Grids)» расположен на закладке Additional) со свойствами:
| Свойство | Значение | Описание |
| Align | alClient | |
| ColCount | ||
| FixedCols | ||
| FixedRows | ||
| Options\goEditing | True | |
| RowCount | ||
| ScrollBars | ssNone | |
| Options\goColSizing | True |
f. Кнопка Button1 класса TButton со свойствами:
| Свойство | Значение | Описание |
| Caption | Выход | |
| Enabled | True | |
| Hint | Выход из программы | |
| ShowHint | True |
g. Диаграмма Chart1 класса TChart (компонент
– «Chart (Chart)» расположен на закладке Additional) со свойствами:
| Свойство | Значение | Описание |
| BevelInner | bvNone | |
| BevelOuter | bvNone | |
| Title | Доли продаж по товарам | |
| AxisVisible | False |
- Двойным щелчком левой клавиши мыши по диаграмме на форме вызовите редактор диаграммы.
- Выберите вкладку Chart\Series и однократным щелчком по кнопке
вызовите форму выбора вида диаграммы и установите на ней круговую диаграмму. Нажмите кнопку
. - Выберите вкладку Series\Marks и установите переключатель Style в положение Percent.
- Выберите вкладку Chart\Titles и в редактируемом окне наберите заголовок для диаграммы «Доли продаж по товарам».
- В процессе работы с редактором диаграммы постарайтесь разобраться с назначением его закладок, подзакладок и параметров, расположенных на них (2 – 3 параметра на каждой подзакладке. По результатам обследования составьте описание параметров диаграммы, заполнив таблицу вида:
| № п.п. | Закладка | Подзакладка | Параметр | Назначение |
| … | ||||
| n |
Возможно, в конце исследования вам несколько раз придется удалять диаграмму Chart1 и настраивать ее заново. Для этого однократным щелчком по левой клавише мыши выделите объект Chart1 на форме или в окне ObjectTreeView и нажмите клавишу Delete на клавиатуре. Затем повторите п.п. 5g, 6 – 9 настоящей инструкции.
- Закройте форму редактирования параметров диаграммы.
- Добавьте в описание приватных процедур класса TForm1 (верхняя часть окна редактирования модуля Unit1) описание процедуры ReCalculation:
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
UpDown1: TUpDown;
GroupBox1: TGroupBox;
StringGrid1: TStringGrid;
Button1: TButton;
Chart1: TChart;
Series1: TPieSeries;
private
{ Private declarations }
Procedure ReCalculation;
public
{ Public declarations }
end;
- В разделе implementation текста модуля Unit1 добавьте процедуру ReCalculation:
implementation
{$R *.dfm}
procedure TForm1.ReCalculation;
Var
I:Integer;
Begin
Chart1.Series[0].Clear;
For i:=1 to StringGrid1.ColCount-1 Do
Begin
Try
StringGrid1.Cells[i,4]:=
FloatToStr(
Round(
100*StrToFloat(StringGrid1.Cells[i,3])*
StrToFloat(StringGrid1.Cells[i,2]))/100);
Chart1.Series[0].Add(
StrToFloat(StringGrid1.Cells[I,4]),
StringGrid1.Cells[i,1]);
Except
StringGrid1.Cells[i,4]:='?';
Beep;
End;
End;
End;
- Последовательно добавьте соответствующим объектам перечисленные ниже методы, определяющие реакцию приложения на различные события (см. п. Ошибка! Источник ссылки не найден. – Ошибка! Источник ссылки не найден. инструкции по выполнению лабораторной работы № 2). По мере добавления методов регулярно выполняйте запуск программы, исправляйте допущенные ошибки. Немного поработайте с приложением, чтобы разобраться с особенностями его работы. Попробуйте, перетаскивая границы изменить размеры окна, сменить его положение, свернуть, максимизировать, развернуть до нормальных размеров, понажимать на кнопки, ввести в редактируемые элементы произвольную текстовую, числовую информацию и т.д.
- Метод Button1Сlick – реакция на событие onClick, нажатие кнопки TButton1 («Выход»):
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
- Метод FormCreate – реакция на событие onCreate, создание формы Form1 («Построение диаграммы») при запуске приложения:
procedure TForm1.FormCreate(Sender: TObject);
begin {Здесь надо будет установить точку начала трассировки}
StringGrid1.Cells[0,0]:='№ п.п.';
StringGrid1.Cells[0,1]:='Товар';
StringGrid1.Cells[0,2]:='Цена';
StringGrid1.Cells[0,3]:='Количество';
StringGrid1.Cells[0,4]:='Стоимость';
StringGrid1.Cells[1,0]:='1';
StringGrid1.Cells[1,2]:='0,0';
StringGrid1.Cells[1,3]:='0,0';
ReCalculation;
end;{Здесь надо будет прекратить трассировку}
- Метод Edit1Change– реакция на событие onChange, изменение содержимого строки редактирования Edit1 («Количество товаров») при запуске приложения:
procedure TForm1.Edit1Change(Sender: TObject);
begin {Здесь надо будет установить точку начала трассировки}
StringGrid1.ColCount:=StrToInt(Edit1.Text)+1;
StringGrid1.Cells[StrToInt(Edit1.Text),0]:= Edit1.Text;
If StringGrid1.Cells[StrToInt(Edit1.Text),2]=''
then StringGrid1.Cells[StrToInt(Edit1.Text),2]:='0,0';
If StringGrid1.Cells[StrToInt(Edit1.Text),3]=''
then StringGrid1.Cells[StrToInt(Edit1.Text),3]:='0,0';
ReCalculation;
end; {Здесь надо будет прекратить трассировку}
- Метод EditStringGrid1KeyUp– реакция на событие onKeyUp, редактирование строковой таблицы StringGrid1 («Данные о продажах») с помощью клавиатуры:
procedure TForm1.StringGrid1KeyUp(
Sender: TObject; var Key: Word; Shift: TShiftState);
begin {Здесь надо будет установить точку начала трассировки}
ReCalculation;
end; {Здесь надо будет прекратить трассировку}
- Установите точку начала трассировки (см. п.п. Ошибка! Источник ссылки не найден. – Ошибка! Источник ссылки не найден. инструкции по выполнению лабораторной работы № 2) на первых операторах begin процедур FormCreate, Edit1Change и StringGrid1KeyUp.
- Выполните запуск программы. Для этого однократно щелкните по кнопке
«Run (F9)». - Введите данные контрольного примера. Обратите внимание: программа автоматически переходит в режим трассировки каждый раз, когда достигает точки остановки.
- Выполните трассировку с заходом в процедуры (пошаговое выполнение) процедур FormCreate, Edit1Change и StringGrid1KeyUp, подобно тому, как вы это делали в Лабораторной работе № 4, используя кнопку
«Trace into (F7)» на панели инструментов Delphi. Трассировку следует прекратить в моменты выхода из процедур FormCreate, Edit1Change и StringGrid1KeyUp StringGrid1KeyUp (оператор «end;»), соответственно. Для этого на последнем шаге процедуры следует однократно щелкнуть по кнопке
«Run (F9)». Для составления протокола для процедуры StringGrid1KeyUp используйте результаты трассировки при первом (введено только одно значение) и последнем обращении к процедуре StringGrid1KeyUp (исходные данные введены полностью). В протоколе следует отразить причины возникновения исключительной ситуации и условия, необходимые для того, чтобы она не возникла. - Повторите п. 4 настоящей инструкции используя трассировку без захода в процедуры, используя кнопку
«Step over (F8)» на панели инструментов Delphi. Составьте протокол прохождения контрольного примера для процедуры Edit1Change. - Повторяя действия Ошибка! Источник ссылки не найден. – Ошибка! Источник ссылки не найден.– выполните трассировку процедур StringGrid1KeyUp и ReCalculationдля 2-го, 3-го и 4-го контрольных примеров.
- Снимите точку начала трассировки однократным щелчком по красной отметке слева от оператора begin.
- Сохраните исходный файл проекта в своей рабочей папке. Для этого однократно щелкните левой клавишей мыши по кнопке
«Save (Ctrl+S)». - Выйдите из среды программирования Delphi с помощью меню File\Exit.
Содержание отчета: