Некоммерческое акционерное общество

АЛМАТИНСКИЙ университет  ЭНЕРГЕТИКИ  И  СВЯЗИ

Кафедра инженерной кибернетики

 

 

 

Объектно-ориентированное программирование

Методические указания к выполнению лабораторных работ для студентов

специальности  5В070200 – Автоматизация и управление

Часть 1

 

 

Алматы 2011 

СОСТАВИТЕЛИ: Ешпанова М.Д., Ибрашева А.Т. Объектно-ориентированное программирование.  Часть 1. Методические указания к    выполнению лабораторных работ для студентов специальности 5В070200 – «Автоматизация и управление»- Алматы: АУЭС, 2010– 55 с.

 

Методические указания предназначены для выполнения лабораторных работ по дисциплине «Объектно-ориентированное программирование».

Рассматривается технология  создания оконных приложений – основного вида приложения, используемых в операционных системах семейства Windows.

По каждой лабораторной  работе  в Приложении содержится листинг программы.

Илл.-  13,  библиогр. – 5 наим.

 

Рецензент:  канд. техн. наук, проф.  Копесбаева А.А.

  

Печатается по плану издания некоммерческого акционерного общества «Алматинский институт энергетики и связи» на 2010 г.

 

© НАО «Алматинский университет энергетики и связи», 2011

 

Введение

Дисциплина «Объектно-ориентированное программирование» является естественно-научной дисциплиной, включающей в себя решение математических, инженерно-технических задач, создание элементарных моделей АРМ (автоматизация рабочего места). 

При изучении дисциплины будет использоваться интегрированная среда программирования Delphi, ориентированная на работу в операционных системах семейства Windows. Программы в Delphi создаются  на основе современной технологии визуального проектирования, которая, в свою очередь, базируется на идеях объектно-ориентированного программирования.

Среда программирования Delphi позволяет сравнительно легко и быстро создавать законченные приложения Windows. Поэтому она получила название RAD (Rapid Application Development – среда быстрой разработки приложение).

Среда программирования Delphi  имеет встроенный компилятор, переводящий текст программы в машинный код, понятный процессору компьютера. В настоящее время этот компилятор является самым быстрым и позволяет обеспечивать высокую производительность среды программирования, необходимую для создания приложений Windows. Компилятор среды программирования Delphi создает автономные  exe-файлы (исполняемые файлы). Поэтому приложения, созданные в  Dephi, будут работать на компьютере, на котором не установлена среда Delphi.

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

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

По каждой лабораторной работе студент должен представить отчет и защитить работу.

 

1 Лабораторная работа. Создание проекта с использованием компонентов Edit, Label, Memo, Button

 

Цель работы: ознакомление с технологией создания оконных приложений, особенностями программирования в среде Delphi.

 

1.1  Этапы создания оконного приложения

 

Среда Delphi  представляет собой несколько отдельно расположенных окон на рабочем столе:

1)       главное  окно, содержащее строку заголовка, Панель меню, Панель инструментов и Палитру компонентов;

2)     инспектор объектов;

3)     дерево объектов;

4)     дизайнер форм;

5)     окно редактора исходного текста.

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

Основные операции, которые выполняются на этапе конструирования формы.

1)  На этапе конструирования (создание формы приложения) выбираются необходимые компоненты из палитры компонентов и размещают их на форму: выполнить щелчок левой кнопкой мыши на компоненте, затем щелкнуть левой кнопкой мыши в то место формы, куда должен быть помещен компонент.

2)  Вид компонента, его размер и поведение определяют значения свойств компонента. Чтобы придать компоненту нужные свойства, следует использовать страницу  properties в окне Инспектора объектов. Эта страница состоит из двух колонок: левая содержит название свойства, а правая - конкретное значение свойства. Окно инспектора объектов отображает информацию для того компонента, который выделен щелчком мыши. Строки могут отображать простые и сложные свойства. К простым относятся свойства, которые определяются одним значением – числом, строкой символов и т.д. Сложные свойства определяются совокупностью значений. слева от имени таких свойств указывается символ «+».

3)  В форме практически любого приложения есть компоненты, которые обеспечивают интерфейс (взаимодействие) между программой и пользователем. Такие компоненты называют базовыми. К базовым компонентам можно отнести:

-  Label  (метка)- поле вывода текста;

-  Edit (строка ввода)-  поле редактирования текста;

-  CheckBox (выключатель)-  независимая кнопка выбора;

-  Button (кнопка) - командная кнопка;

-  RadioButton (переключатель)-  зависимая кнопка выбора;

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

В результате выполнения указанных операций будет сформирован внешний вид окна будущей программы.

Для того чтобы программа выполняла какую-то работу, необходимо перейти ко второму этапу – этапу программирования.

 

Основные особенности  этапа программирования.

1)       Каждый компонент может реагировать на определенный набор событий. Для того чтобы узнать, на какие именно события откликается компонент, необходимо выделить его щелчком мыши на форме, после чего перейти на страницу events инспектора объектов.

2)       Страница содержит две колонки. В первой колонке перечислены имена событий, на которые откликается компонент,   вторая заполняется программистом и содержит имена созданных обработчиков событий.

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

Например:

procedure TForm1.Button1Click(Sender: TObject);

 

Здесь  TForm1   - имя класса создаваемой формы, Button1Click - вторая часть имени обработчика события, созданная автоматически Delphi и означающая, что процедура будет выполняться, если по компоненту с именем Button1 щелкнуть левой кнопкой мыши. Параметр Sender типа  TObject содержит ссылку на компонент, который создал событие OnClick (то есть на Button1).

 3)  После создания имени обработчика события, необходимо создать заготовку обработчика события. Если щелкнуть по кнопке Button1, в окне редактора кода будет добавлена заготовка для обработчика:

procedure TForm1.Button1Click(Sender: TObject);

begin

 

end;

Тело процедуры ограничено зарезервированными словами begin …end, между которыми необходимо разместить свои операторы.

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

Примечание: каждый компонент в Delphi имеет одно так называемое событие по умолчанию. Как правило, это событие, для которого чаще всего составляются обработчики. Например, для многих компонентов таким событием является OnClick.

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

Как было указано выше, label  - поле вывода текста, edit -  поле редактирования текста. Текстовая информация описывается типом string.  Компьютер воспринимает эту строку как набор символов и производить арифметические операции над символами не может. Для преобразования текста в целое число используется функция StrToInt. Выражение StrToInt(Edit1.Text) определяет целое число, символьное представление которого содержится в окне Edit1. Для преобразования текста в действительное число используется функция StrToFloat.

 

 

1.2  Задание к лабораторной работе

 

Составить программу для вычисления объема конуса произвольного радиуса и произвольной высоты с использованием компонентов Label, Edit, Button. Значения радиуса и высоты вводятся в компонент Edit, а значение объема конуса выводится в компонент Label. Вычисление производится при нажатии на компонент  Button,

Приводится пошаговое описание процесса создания оконного приложения:

1)       загрузить среду Delphi;

2)       создать новая папку, в которую будут помещены все файлы, входящие в проект. Для каждого нового проекта создается отдельная папка. Новую папку можно также создавать в момент сохранения файлов, входящих в проект;

3)       из страницы Standard Палитры компонентов  поместить на форму Form1  шесть компонентов: Label1, Label2, Label2 - метки, Edit1, Edit2 – строки ввода, Button1 – кнопка;

Label1, Label2, Label3 – компоненты, предназначенные для отображения текстовой информации. Основным для метки является свойство Caption. В метку Label1 поместить  текст «Введите радиус конуса», в метку  Label2 – «Введите высоту конуса», в метке Label3 будет отображаться объем конуса.

При помощи компонентов Edit1, Edit2 вводятся соответственно значения радиуса и высоты конуса. 

Button1 – кнопка – компонент, предназначенный для формирования события. При нажатии на кнопку будет происходить вычисление объема конуса.

4)       формирование внешнего вида будущей программы. Для этого, используя Инспектор объектов, Установить свойства формы и расположенных на ней объектов. Сделать по очереди форму и Label1, Label2 активными, выбрать в Инспекторе объектов свойство Caption. Для формы значение этого свойства установить – ‘Вычисление объема конуса’, а для Label1, Label2 соответственно установить значение Caption  ‘Введите радиус конуса’ и  ‘Введите высоту конуса’. Значения свойства Caption являются символьные строки;

5)       для компонентов Edit1и Edit2 свойство Text является основным и предназначено для ввода символьных строк. Значение этого свойства установить пустую строку ‘ ‘; 

6)       для компонента  Button1 в качестве значения свойства Caption установить ‘Объем фигур’;

7)       этап написания программы. Будущая программа должна вычислять объем конуса после того, как в строки ввода Edit1и Edit2 будут введены значения радиуса и высоты  и выполнен щелчок мышью по кнопке Счет. Надо написать обработчик события OnClick для кнопки Button1. чтобы создать заготовку обработчика события, достаточно выполнить щелчок по кнопке Button1. Добавить  в заготовку код для вычисления объема конуса:

procedure TForm1.Button1Click(Sender: TObject);

var r,h,v,s: real;

begin

      r:=strtofloat(edit1.Text);

      h:=strtofloat(edit2.Text);

      s:=pi*sqr(r);

      v:=s*h/3;

  label3.Caption:='площадь основания равна'+floattostrf(s,ffgeneral,7,2);

  label4.Caption:='объем конуса равен'+floattostrf(v,ffgeneral,7,2);

end;

На этом этап программирования завершается.

8) перед запуском программы ее всегда необходимо сохранять. Для сохранения проекта необходимо выполнить команду главного меню File Save All.  Появится окно сохранения модуля. Найти папку, созданную для разрабатываемого проекта, открыть. Если не создана, то создать и открыть. В поле Имя файла указать имя модуля. По  умолчанию     модуль имеет имя Unit1. Оставить без изменения и сохранить. После этого появится диалоговое окно файла проекта. По умолчанию файлу проекта дается имя Project1.

После сохранения проекта, он запускается на выполнение нажатием кнопки Run.

Вывод результатов вычислений на компонент Label имеет недостаток: при изменении исходных данных предыдущий результат счета не выводился, вместо него появлялся новый.  

Для того чтобы получить список значений (предыдущие результаты можно видеть) результаты могут   выводиться  в компонент Memo.  Кроме того, в проекте можно предусмотреть закрытие окна приложения с использованием кнопки,  ввод  начальных значений, с которыми программа начнет работу в момент создания формы. 

 

Основные свойства и методы компонента Memo:

Lines: Tstrings – с помощью этого свойства заполнение компонента можно выполнять в  окне редактора.

Строки можно добавлять динамически – с помощью методов Add  и Insert:

Метод  Add(const S:string) служит для добавления новой строки s в конец списка;

Метод   Insert(Index:integer; const s:string) – для вставки строки s на позицию с индексом, определенным параметром Index.

Методы Move(CurIndex,NewIndex:integer) и Exchange(Index1,Index2:integer) служат для перемещения строк внутри коллекции. 

Метод IndexOf(const:string) предназначен для определения индекса строки.

План разработки программы с использованием компонента Memo:

1)       разместить на форме экземпляры компонентов в соответствии с рисунком 1.1

 

 

Рисунок  1.1

 

2) активизировать кнопку «Объемы фигур» и в заготовку обработчика события поместить  код:

r:=strtofloat(edit1.Text);

h:=strtofloat(edit2.Text);

s:=r*r*pi;

v:=s*h/3;

memo1.Lines.Add('объем конуса равен:  '+floattostr(v));

memo1.Lines.Add('площадь основания  равна:  '+floattostr(s));

3) активизировать кнопку «Закрыть» и поместить код:

Close;

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

procedure TForm1.FormCreate(Sender: TObject);

begin

edit1.Clear;

edit2.Clear;

memo1.Clear;

end;

5) сохранить новый проект – File Save All. Создать новую папку, дать  название «Фигуры», открыть папку и сохранить в ней код программы и проект.

Проект  запустить.

 

 

1.3  Контрольные вопросы

 

1.3.1     Перечислить основные этапы создания простого оконного приложения.

1.3.2     Перечислить окна среды Delphi.

1.3.3     Как создать обработчик события?

1.3.4     Перечислить основные операции, которые выполняются на этапе проектирования.

1.3.5     Перечислить основные особенности  этапа программирования.

1.3.6     Можно ли изменять свойства компонента в ходе выполнения программы и как это называется?

1.3.7     Как преобразовать текст в целое число?

 

1.4  Варианты заданий

 

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

- вводит с клавиатуры в выбранный компонент значения всех исходных данных, перечисленных в индивидуальном  задании (значения углов задаются в градусах);

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

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

- вывести в компонент Memo условие задание; компонент этот появляется на экране только при нажатии на кнопку «Условие».

В заданиях для треугольников используются следующие обозначения:

a, b, c – стороны треугольника;

А, В, С – углы треугольника, противолежащие соответствующим сторонам;

ha, hb, hc – высоты треугольника, опущенные соответственно на стороны a, b, c;

pS – соответственно половина периметра и площадь треугольника;

r, R – радиус соответственно вписанной и описанной окружностей.

В заданиях для ромба используются следующие обозначения:

 a,  – сторона ромба;

А, В, С, D – углы ромба;

d1, d2 – диагонали ромба; 

pS – соответственно периметр и площадь ромба.

В заданиях для трапеции  пользуются следующие обозначения:

a, c – боковые стороны трапеции;

b,d – соответственно верхнее и нижнее основания;

А, В, С, D – углы;

h, e – высота и диагональ;

pS – соответственно  периметр и площадь.

В заданиях для четырехугольника общего вида используются следующие обозначения:

a, b, c, d – стороны;

А, В, С, D – углы,

e1,e2 –диагонали.

Вычислить и вывести на форму остальные элементы фигур.

1.       В треугольнике заданы две стороны a и b и угол между ними C.

2.       В треугольнике заданы сторона b,  угол  А и радиус описанной окружности R

3.       В треугольнике заданы три стороны a, b, c.

4.       В треугольнике заданы координаты вершин xa, ya, xb,yb, xc, yc.

5.       В ромбе заданы угол А и диагональ d1.

6.       В ромбе заданы сторона a и угол A.

7.       В ромбе заданы диагональ d1 и площадь S.

8.       В ромбе заданы  диагонали d1 и d2.

9.       В ромбе заданы сторона а и диагональ d1.

10.   В трапеции заданы стороны a, b, c, d.

11.   В трапеции заданы стороны a, b, d и высота  h.

12.   В трапеции заданы стороны a, b, d и угол A

13.   В трапеции заданы стороны a, b, высота  h и диагональ e.

14.   В четырехугольнике заданы четыре стороны a,b,c,d и диагональ  e1.

15.   В четырехугольнике заданы стороны a, b, d и углы  A и B.

 

2 Лабораторная работа. Использование  компонентов ListBox ComboBox

 

Цель работы – освоение и использование компонентов Listbox Combobox.

 

2.1 Списки ListBox ComboBox

 

В Delphi часто приходится иметь дело с различными списками, например, списками строк текстового редактора Memo.  Стандартный компонент Listbox  (вкладка Standard палитры компонентов) предназначен непосредственно для отображения списка строк на экране. 

Основные свойства компонента ListBox:

- ItemIndex: integer;  определяет индекс выделенного элемента в списке. Нумерация элементов начинается с нуля. Если выделенного элемента нет, это свойство принимает значение, равное  -1.  Свойство доступно только на этапе выполнения программы;

- Item: Tstrings; задает элементы списка;

- MultiSelect:Boolean; определяет, разрешается ли одновременно выделять несколько элементов списка: если имеет значение  True, то такое выделение возможно, в противном случае выделить можно только один элемент;

- Selected[Index:integer]:Boolean; если i-тый элемент выделен, то Selected[i] равняется True, , в противном случае -  False. Свойство доступно только на этапе выполнения программы.

- Sorted:Boolean; указывает, должны ли строки в списке автоматически сортироваться в алфавитном порядке.

- Clear; удаляет все элементы списка.

СomboBox –комбинированная строка ввода. Страница Палитры Компонентов – Standard.

Комбинированная строка ввода СomboBox объединяет в себе возможности строки ввода Edit  и списка List Box. По внешнему виду напоминает Edit, но дополнительно имеет в правой части кнопку со стрелкой, направленной вниз.

Если щелкнуть по этой кнопке, появится выпадающий список. Основное отличие от  ListBox – возможность вводить в список новые элементы, отображать активный элемент.

В компоненте СomboBox отсутствует свойство MultiSelect, поэтому не допускается множественный выбор.

Основные свойства Сombo Box:

- ItemIndex: integer;  определяет индекс выделенного элемента в списке. Нумерация элементов начинается с нуля. Если выделенного элемента нет, это свойство принимает значение, равное  -1.  Свойство доступно только на этапе выполнения программы;

Item: Tstrings; задает элементы списка;

- DropDownCount: integer; отображает максимальное число элементов, отображаемое в раскрывающемся списке.

- DroppedDown:Boolean; указывает, отображается ли раскрывающийся список в данный момент. Свойство доступно только на этапе выполнения программы.

- Sorted:Boolean; указывает, должны ли строки в списке автоматически сортироваться в алфавитном порядке.

- Text: String; содержит текс выбранной или введенной пользователем строки.

- Clear; удаляет все элементы списка.

 


2.2 Задание к лабораторной работе

 

2.2.1 Создать программу, которая при выборе из списка с помощью мыши названия цвета и нажатии на кнопку на экране отображает  название цвета на русском языке и код цвета в формате RGB. Программа заканчивает свою работу при  нажатии кнопки «Close».  

План разработки программы:

1)       разместить на форме экземпляры компонентов в соответствии с рисунком 2.1;

2)       сохранить новый проект – File Save All. Создать новую папку, дать  название «Справочник», открыть папку;

 

 

Рисунок  2.1

 

3)       Сохранить код программы и проект под именами, например, Unit1.pas и Project1.dpr.

4)       Установить следующие свойства для компонентов:

 

Выделенный

объект

 

Вкладка окна Object Inspector

Имя свойства/ имя события

Действие

BitBtnl

Properties

Caption

Установка     имени     кнопки: «Выход»

 

 

 

 

Kind

bk Close

Label 1

Properties

Caption

Ввод   надписи   «Справочник записи цвета в формате RGB»

Label2

Properties

Caption

Ввод надписи «Цвет Формат RGB»

Label3

Properties

Caption

Удаление   названия   и   кода цвета

 

5)       Запустить программу, затем закрыть окно проекта, щелкнув на кнопке «Выход».

6)       Выделить объект ListBox1, найти свойство Items, щелкнуть на кнопке с тремя точками, расположенной справа от него. В появившемся окне встроенного редактора (см. рисунок 2.2) ввести названия цветов, каждый на новой строке.

 

 

 

 

 

 

 

Рисунок  2.2 

7)       Сохранить набранный текст под именем color.txt  Для этого нажать правую кнопку мыши и выбрать режим Save. Для выхода из встроенного редактора щелкнуть на кнопке ОК.

8)       Чтобы при установке курсора мыши в поле List Box1 появлялась подсказка о том, что надо сделать, необходимо воспользоваться  свойствами Hint (текст сообщения) - «выделить строку и щелкнуть на кнопке», Showhint (показывать ли сообщение) объекта ListBox1.

9)       Активизировать двойным щелчком кнопку «Перевести» и в заготовку обработчика события  OnClick поместить следующий код:

сase   listBox1.ItemIndex of

0: Label3.Caption:= 'черный  ОООООО';

1: Label3.Caption:=' белый  FFFFFF' ;

2: Label3.Caption:=' красный  FFOOOO' ;

3: Label3.Caption:=' зеленый  OOFFOO' ;

4: Label3.Caption:= 'бирюзовый OOFFFF';

5: Label3.Caption:=' синий OOOOFF';

6: Label3.Caption:=' фиолетовый  FFOOFF';

7: Label3.Caption:= ' желтый  FFFFOO';

8: Label3.Caption:= 'коричневый  996633';

9 : Label3.Caption:= ' оранжевый  FF8000';

10: Label3.Caption:= ' липовый  8000FF';

11: Label3.Caption:=' серый  АОАОАО';

end;

10)  Сохранить проект окончательно, запустить и протестировать его.

 

2.2.2  В  целочисленном массиве найти максимальный и минимальный элементы и поменять их местами. Использовать компонент СomboBox –комбинированная строка ввода. Элементы массива вводятся в компонент СomboBox1. При нажатии на кнопку Ввод данные вводятся в память. Элементы новой матрицы, в которой  максимальный и минимальный элементы  поменялись местами, выводятся в компонент СomboBox2.

 

 

Рисунок  2.3

 

План разработки программы:

1)       для нового проекта создать новую папку, например, Combobox;

2)       открыть новый проект;

3)       со страницы Standard поместить на Form1 компоненты, согласно рисунку 2.3: button1, button2, ComboBox1, ComboBox2.

4)       свойство DropDownCount для ComboBox1, ComboBox2 равно 10.

5)       в разделе interface описывается массив и используемые переменные:              a:array[1..10] of integer; i, min, max, imax, imin:integer;

6)       для того чтобы ввести начальные значения, с которыми программа начнет свою работу, в момент создания формы, используется событие OnCreate  для формы. Для создания заготовки этого события необходимо выполнить двойной щелчок по форме и поместить там следующие строки:  

           i:=0;

           comboBox1.Clear;

           combobox2.Clear;

           combobox1.TabOrder:=0; 

7)     для кнопки Ввод написать обработчик события:

begin

combobox1.items.add(combobox1.Text);

i:=i+1;

a[i]:=strtoint(combobox1.Text);

combobox1.SetFocus;

end;

8)     для кнопки Решение написать обработчик события:

procedure Tform1.Button2Click(Sender: Tobject);

var k:integer;

begin

  max:=a[1];

  maxi:=1;

  min:=a[1];

  mini:=1;

  for k:=2 to 10 do

     begin

       if max<a[k] then

          begin

            max:=a[k];

            maxi:=i;

          end;

       if min>a[k] then

          begin

            min:=a[k];

            mini:=i;

          end;

      end;

       a[maxi]:=min;

       a[mini]:=max;

 

       for k:=1 to 10 do

       combobox2.Items.Add(inttostr(a[k]));

       combobox2.DroppedDown:=true;

end;

9)     сохранить проект окончательно и запустить его.

 

     2.3 Контрольные вопросы

      

     2.3.1 Для чего предназначен компонент ListBox?

     2.3.2 Перечислить основные свойства компонента List Box.

     2.3.3 Перечислить основные свойства компонента       СomboBox.

     2.3.4 Какой из компонентов - List Box или  СomboBox - обладает свойством  MultiSelect?

     2.3.5 Какое свойство компонентов ListBox и  СomboBox задает элементы списка?

 

     2.4 Варианты заданий

      

Используя компоненты ListBox и  СomboBox создать приложения для заданий:

1.        Создать игру «чепуха»: берутся слова из трех списков  - по одному из каждого - и составляются из  них предложения. Например, список 1 – названия зверей, список 2 – глаголы, список 3 – наречия.

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

3.        В компонент Listbox ввести значения элементов массива из 10 элементов. Если вводится больше 10, то должно появиться сообщение. Переписать этот массив в другой список в обратном порядке. Переписывать можно только в том случае, если правильно введете пароль.

4.        Введите элементы массива в список. При выборе элемента должно быть указано, элемент четный или не четный. Если элемент четный, то запись должна быть зеленого цвета, в противном случае лилового.

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

6.        Составить   таблицу дней рождения друзей и приятелей, в каком созвездии они родились. Выделить из списка тех, кто родился в феврале.

7.        Провести социологический опрос. Студент указывает фамилию (Edit), она заносится в список. Задается вопрос: «Любите ли Вы читать книги». Ответы: да или нет. Если «да», то появляется запись –«молодец», если «нет», то – «надо, надо читать». Составить программу, чтобы было видно, кто читает, а кто нет. Также подсчитать, сколько  процентов студентов любить читать книги, а сколько – нет.

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

9.        Составьте таблицу часовых поясов: по разности с временем по Гринвичу. Вывести страны, которые находятся в одном часовом поясе. Часовой пояс вводится.

10.   Определить на какой день недели приходится день рождения пяти Ваших друзей в 2000, 2005,2010 годах

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

12.   Составить фонотеку по жанрам.

13.   Определить на какой день недели приходится день рождения Ваших сокурсников в 2000, 2005, 2010 годах и у кого дни рождения под указанным знаком Зодиака.

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

15.   Составить список стран. При выборе страны должно появиться название столицы и ее достопримечательности

 

3 Лабораторная работа.  Панель переключателей  RadioGroup и список выключателей CheckListBox

 

Цель работы: ознакомиться с компонентами управления: Check ListBox  и Radio Group, и научиться их использовать при создании приложений.

 

 

3.1  Панель переключателей  RadioGroup и список выключателей CheckListBox

 

Панель переключателей  RadioGroup находится на странице Standard. Панель переключателей RadioGroup предназначена для выбора одного из нескольких вариантов.

Основные свойства панели переключателей:

Columns:integer; определяет число колонок, в которые будут помещаться переключатели. По умолчанию число колонок равно 1.

ItemIndex:integer; определяет порядковый номер выделенного переключателя. Нумерация начинается с нуля. Если ни один из переключателей не выделен, свойство имеет значение -1.

Item:Tstrings; содержит список названий переключателей.

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

 

Список выключателей CheckListBox находится на странице Additional.

Если в панели переключателей RadioGroup выбранным (нажатым) может быть только один переключатель, то в списке выключателей CheckListBox каждый выключатель может находиться в одном из трех состояний:

- Включен – в выключатель помещается символ «галочки»;

- Выключен – выключатель пуст;

- Нейтральное – в выключатель помещается символ «галочки» серого цвета.

Основные свойства списка выключателей:

Checked[index:integer]:boolean; содержит состояние выключателя с индексом Index. Индексация начинается с нуля. Если i-ый выключатель включен, то Checked[i]  имеет значение true, а в остальных случаях -  false.

Items: Tstrings; содержит список названий выключателя.

AllowGrayed:boolean; разрешает или запрещает использовать в переключателях третье состояние  - нейтральное, cbGrayed.

 

3.2 Задание к лабораторной работе

 

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

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

 

План разработки программы:

1)       Разместить на форме экземпляры компонентов в соответствии с рисунком 3.1

2)       Выделить объект RadioGroup1, найти свойство Items, щелкнуть на кнопке с тремя точками, расположенной справа от него. В появившемся окне встроенного редактора  ввести названия аудиторий, каждое на новой строке. Установим  свойство Caption  равным «аудитории». Выделить CheckListBox1, найти свойство Items и внести список прикладных программ.

 

 

Рисунок 3.1

 

3)       Активизировать RadioGroup1 двойным щелчком и в заготовку обработчика события OnClick поместить  следующий код:

memo1.Clear;

for I:=0 to 10 do checklistbox1.checked[i]:=false;

case radiogroup1.ItemIndex of

0:begin checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[4]:=true;

        checklistBox1.Checked[10]:=true;

        checklistBox1.Checked[11]:=true;

        memo1.Lines.Add('Желательно установить

                                     дополнительно   программы');

   end;

1:begin checklistBox1.Checked[1]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[5]:=true;

        checklistBox1.Checked[6]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[9]:=true;

        checklistBox1.Checked[10]:=true;

        memo1.Lines.Add('Эта аудитория занята весь день');

   end;

2:begin checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[4]:=true;

        checklistBox1.Checked[6]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[9]:=true;

        memo1.Lines.Add('Можно установить ТурбоС++');

   end;

3:begin checklistBox1.Checked[5]:=true;

        checklistBox1.Checked[7]:=true;

        checklistBox1.Checked[9]:=true;

        memo1.Lines.Add('В этой аудитории проводятся

                                        занятия по     спецдисциплинам');

   end;

4:begin checklistBox1.Checked[1]:=true;

        checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[3]:=true;

        memo1.Lines.Add('Это - аудитория преподавателей');

   end;

end;

4)       Активизировать кнопку «Закрыть» и в обработчик события OnClick вставить строку:

                close;

5)       Сохранить новый проект – File Save All. Создать новую папку, дать  название «Аудитория», открыть папку. Сохранить код программы и проект под именами, например, Unit1.pas и Project1.dpr. Запустить  приложение на выполнение.

      

     3.3 Контрольные вопросы

      

3.3.1 В чем различие между компонентами RadioGroup и CheckListBox?

3.3.2 Перечислить состояния, в которых может находиться каждый выключатель компонента CheckListBox.

3.3.3 Какое свойство компонента CheckListBox разрешает или запрещает использовать в переключателях третье состояние?

3.3.4 Какое значение имеет свойство ItemIndex, если не выделен ни один переключатель?

3.3.5   Что означает команда СheckListBox1.Checked[3]:=true;

 

      3.4 Варианты заданий

      

1.        Создать приложение, позволяющее менять начертание, размер, цвет шрифта текста, набранного в строке ввода Edit, - использовать панель переключателей, а также атрибуты шрифта ( зачеркнутый, подчеркнутый) – использовать список выключателей.

2.        Создать приложение, кратко описывающее человека: характер (сангвиник, холерик и т.д.), цвет волос, возраст, рост. ФИО ввести в строку ввода Edit. Полученную информацию выводить в Memo.

3.        Составить тест из пяти вопросов. На каждый вопрос должно быть 4 ответа. Вывести результаты теста: сколько правильных и неправильных ответов, сколько % правильных ответов.

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

5.        Составить меню для ресторана.

6.        Составить приложение, которое позволяет при выборе части света просмотреть список из пяти городов этой части света. Использовать  RadioGroup  и ListBox.

7.        Смоделировать работу банкомата.

8.        Написать приложение для отдела кадров: выводить фамилии сотрудников по должностям и выводить количество сотрудников указанной должности.

9.        Создать приложение, которое  выводит пункты назначения, номера рейсов, обслуживаемых самолетом, тип которого выбирается.

10.   Написать программу, которая выводит информацию о людях, родившихся под знаком Зодиака, название которого выбрано.

11.   Написать программу, которая выводит на экран информацию о товаре, который указан, и список магазинов, в котором он продается.

12.   Смоделировать работу АЗС.

13.   Написать программу, которая демонстрирует главные дорожные знаки: уступи дорогу, въезд запрещен, главная дорога, движение запрещено.

14.   Написать программу, которая демонстрирует разные геометрические фигуры.

15.   Создать приложение, позволяющее менять начертание, размер, цвет шрифта текста, набранного в строке ввода Edit, - использовать панель переключателей, а также атрибуты шрифта (зачеркнутый, подчеркнутый) – использовать список выключателей.

 

4 Лабораторная  работа. Использование таблиц DrawGrid и StringGrid и компонента  Timer

 

Цель работы: ознакомиться с основными свойствами компонент управления: DrawGrid, StringGrid  и Timer, приобрести навыки  их использования  при создании приложений.

 

4.1 Компоненты DrawGrid и StringGrid

 

Компонент DrawGrid  находится на панели Additional, компонент Timer  - на панели System.

Основные свойства компонента DrawGrid:

DefaultColWidth – ширина столбца таблицы;

DefaultRowHeight высота столбца таблицы;

DefaultDrawing отображение ячеек таблицы;

GridLineWidth толщина линий сетки;

ColCount количество столбцов;

RowCountколичество строк;

BorderStyleсостояния рамки обрамления;

Нумерация колонок и строк начинается с нуля.

Основное свойство компонента Timer: интервал.

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

Основные свойства таблицы StringGrid:

Col:longint; задает столбец, в котором находится активная ячейка. Свойство доступно только на этапе выполнения программы;

ColCount: Longint; задает число столбцов;

Row:Longint; задает строку, в которой находиться активная ячейка.

RowCount: Longint; задает число строк таблицы;

FixedCols: integer; задает число фиксированных столбцов. По умолчанию задается один фиксированный столбец.

FixedRows: integer; задает число фиксированных строк.

Cells[j,i]: string; обращение к ячейке, расположенной на пересечении строки i и j-го столбца. Нумерация строк и столбцов таблицы начинается с нуля.

Для определения поведения таблицы используется свойство Options. Это свойство задает флаги. Например, если значение флага goEditing свойства Options равно true, то это означает, что ячейки могут редактироваться на  этапе выполнения программы.

 

4.2 Задание к лабораторной работе

 

4.2.1 Создать звездное небо, звезды мерцают. Включение эффекта «Мерцание» создается с помощью кнопок:  таймер запускается и отключается. При срабатывании прерывания от таймера будет происходить мерцание. Звезды расположены в таблице в местах, которые при сквозном подсчете являются квадратом некоторого числа. Условием этого является:       if frac(sqrt(k))=0. Цвет неба – черный, а звезды – белые.

План разработки программы:

1)       Разместить на форме экземпляры компонентов DrawGrid, Timer и три кнопки в соответствии с рисунком 4.1.

2)       Выделить объект DrawGrid 1, установить свойства

DefaultColWidth – 3;

DefaultRowHeight 3;

DefaultDrawing  - false;

GridLineWidth 0;

ColCount 175;

RowCount 105;

BorderStyle BsNone.

3)       Выделить компонент Timer   и установить значение свойства interval равным 100;

4)       Активизировать кнопку start и в обработчик  события записать команду:

    timer1.Enabled:=true;

происходит включение таймера – звезды мерцают.

5)       Активизировать кнопку stop и в обработчик  события записать команду:

               timer1.Enabled:=false;

происходит отключение таймера, звезды перестают мерцать.

6)       Активизировать кнопку «Закрыть» и в обработчик события OnClick вставить строку:

               close;

7)       Активизировать  таймер и в обработчик события записать следующие команды:

DrawGrid1.Canvas.Brush.Color:=clBlack; {макаем кисть в черную краску}

for i:=0 to 174 do

   for j:=0 to 104 do

       begin

   area:= DrawGrid1.CellRect(j,i); {выделяем ячейку}

   drawGrid1.Canvas.FillRect(area);{закрашиваем небо}

        end;

        k:=-1;

        DrawGrid1.Canvas.Brush.Color:=clWhite;

                  for i:=0 to 174 do

        for j:=0 to 104 do

              begin

              inc(k);

              if frac(sqrt(k))=0 then   {условие того, что ячейка

                                                     является звездочкой}

                         begin

                               area:= DrawGrid1.CellRect(j,i);

                                                        {присваивается области area

                                                           положение текущей ячейки}   

         drawGrid1.Canvas.FillRect(area);{закрашиваем звездочку

                                                                        белым цветом}

         end;

         end;

Примечание: при вызове функции  CellRect, определяющей прямоугольник этой ячейки, сначала указывается  индекс столбца, а затем – индекс строки. Закрашивание всегда происходит текущим цветом кисти. Кисть - Canvas.Brush.Color.

 

 

Рисунок. 4.1

 

4.2.2 В целочисленной матрице А(5,5) поменять местами второй и четвертый столбец. Решить двумя способами: используя свойство Cells и свойство Rows.

 

План разработки программы:

1)       со страницы Additional поместить два компонента StringGrid  и со страницы Standard поместить три компонента Button в соответствии с рисунком 4.2;

2)       задать свойствам компонентов StringGrid следующие значения

ColCount - 5;

RowCount - 5;

FixedCols – 0;.

FixedRows – 0;

Options – goEditing – true;

3)   для компонентов Button1, Button2, Button3 задать значения свойства Caption так, как показано на рисунке;

4)   активизировать кнопку Start1.З задача будет решаться при помощи свойства Cells. Создать  следующий обработчик события  OnClick

var i,j:integer;

begin

 for j:=0 to 4 do

        if (j<>1)and (j<>3) then

          for i:=0 to 4 do

            StringGrid2.Cells[j,i]:=StringGrid1.Cells[j,i];

         for i:=0 to 4 do

            begin

              StringGrid2.Cells[1,i]:=StringGrid1.Cells[3,i];

              StringGrid2.Cells[3,i]:=StringGrid1.Cells[1,i];

            end;

end;

5)       активизировать кнопку Start2. З задача будет решаться при помощи свойства Cols. Создать  следующий обработчик события  OnClick:

begin

 stringgrid2.Cols[0]:=stringgrid1.Cols[0];

 stringgrid2.Cols[1]:=stringgrid1.Cols[3];

 stringgrid2.Cols[2]:=stringgrid1.Cols[2];

 stringgrid2.Cols[3]:=stringgrid1.Cols[1];

 stringgrid2.Cols[4]:=stringgrid1.Cols[4];

end;

6)       активизировать кнопку Clear для очистки второй таблицы. Создать  следующий обработчик события  OnClick:

var i,j:integer;

begin

    for i:=0 to 4 do

      for j:=0 to 4 do

      StringGrid2.Cells[j,i]:=' ';

7)       активизировать кнопку Close, как в предыдущих заданиях.

8)       сохранить проект в папке StringGrid: File Save All. Запустить проект на выполнение.

 

 

Рисунок 4.2

 

4.3 Контрольные вопросы

 

4.3.1   Перечислить основные свойства компонента DrawGrid.

4.3.2   Что означает флаг goEditing?

4.3.3   Какие следует выполнить действия, чтобы на этапе выполнения программы можно было  редактировать ячейки?

4.3.4   Как происходит обращение к ячейке, расположенной на пересечении строки i и столбца j?

4.3.5   Какую следует выполнить команду, что «обмакнуть кисть в белую краску»?

 

4.4 Варианты заданий

 

1.        В задании «Звездное небо»,  изменяя функцию, получить разные узоры.

2.        Используя компонент DrawGrid, вывести мерцающую надпись.

3.        Используя компонент DrawGrid, создать фейерверк.

4.        Дан массив данных о работающих в фирме: фамилия, имя, отчество, адрес (улица, дом, квартира) и дата поступления на работу (месяц, год). Во второй массив записать только данные тех из них, кто на сегодняшний день проработал уже не менее 5 лет.

5.        Дан массив, в котором хранятся данные о расписании поездов: номер поезда, название (откуда-куда, например, Орел-Курск), время прибытия на станцию, время отправления (часы, минуты).  Будем считать, что все поезда приходят каждый день. По данному времени определить, какие из поездов стоят сейчас на станции (время вводить с клавиатуры).

6.        Дан массив, в котором хранятся данные о полете самолетов: название пункта назначения рейса, номер рейса, тип самолета.  Вывести на экран номера рейсов и типы самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры. Если таких рейсов нет, выдать на дисплей соответствующее сообщение.

7.        Дан массив, в котором хранятся сведения  о товарах: название товара, название магазина, в котором продается товар, стоимость товара в тенге. Вывести на экран информацию о товарах, продающихся в магазине, название которого введено с клавиатуры. Если такого магазина нет, выдать соответствующее сообщение.

8.        Дан массив, в котором хранятся сведения  о плательщиках и получателях: расчетный счет плательщика, имя плательщика, расчетный счет получателя, имя получателя, перечисляемая сумма. Вывести на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры. Если такого расчетного счета нет, выдать соответствующее сообщение.

9.        Даны сведения: фамилия, имя, знак зодиака, дата рождения (массив из трех чисел). Вывести информацию о человеке, чья фамилия введена с клавиатуры.

10.   Даны сведения: фамилия, имя, знак зодиака, дата рождения (массив из трех чисел). Вывести информацию о людях, родившихся под знаком, название которого введено с клавиатуры.

11.   Даны сведения: фамилия, имя, знак зодиака, дата рождения (массив из трех чисел). Вывести информацию о людях, родившихся в месяц, название которого введено с клавиатуры.

12.   Дан массив, в котором хранятся сведения  о товарах: название товара, название магазина, в котором продается товар, стоимость товара в тенге. Вывести на экран информацию о товаре,  название которого введено с клавиатуры. Если таких товаров нет, выдать соответствующее сообщение.

13.   Дан массив, в котором хранятся сведения  о товарах: название товара, название магазина, в котором продается товар, стоимость товара в тенге. Вывести на экран информацию о товарах, продающихся в магазине, название которого введено с клавиатуры. Если такого магазина нет, выдать соответствующее сообщение.

14.   Дан массив, в котором хранятся сведения  о плательщиках и получателях: расчетный счет плательщика, имя плательщика, расчетный счет получателя, имя получателя, перечисляемая сумма. Вывести на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры. Если такого расчетного счета нет, выдать соответствующее сообщение.

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

 

5 Лабораторная работа. Создание меню. Компоненты  Main Menu и Popup Menu

 

Цель работы: ознакомиться с управляющим компонентами  Main Menu и Popup Menu  и научиться использовать указанные компоненты при создании Windows–приложений, приобрести навыки создания панели инструментов и отображения  нескольких интерфейсных элементов и централизованного управления ими, создания строки состояния,  знакомство с TrackBar, ProgressBar.

 

5.1  Компоненты Main Menu и Popup Menu

 

Главным атрибутом интерфейса любого Windows–приложения является меню. Меню представляет собой набор именованных команд и других вложенных меню (подменю), которые сгруппированы в отдельные функциональные категории. В зависимости от уровня охвата функциональности различают главное меню и локальное меню. Большинство приложений имеет главное меню, содержащее перечень допустимых операций. Пункты главного меню называют иначе элементами меню нулевого (верхнего) уровня, так как с каждым из них может быть связано выпадающее подменю, содержащее элементы первого уровня.

Для создания главного меню имеется невизуальный компонент Main Menu, расположенный на странице Standard Палитры Компонентов.

Процесс создания главного меню на этапе проектирования формы осуществляется при помощи встроенного конструктора меню – Menu Designer. Чтобы вызвать конструктор меню, необходимо щелкнуть правой кнопкой мыши по компоненту и выбрать команду Menu Designer, либо воспользоваться свойством Items в Инспекторе объектов.

Main Menu является экземпляром класса ТMainMenu.

Основное свойства компонента:

Items; Содержит элементы нулевого уровня главного меню приложения.

Caption: string Содержит текст элемента меню. Если перед символом текста поместить символ &, то таким образом можно задать клавишу быстрого перехода (акселератор).

Если вместо текста заголовка свойству Caption присвоить значение «-», то на месте текущего пункта будет изображена разделительная линия.

Checked:Boolean; Если свойство имеет значение True, то элемент помечается галочкой.

ShortCut: TshortCut; Определяет комбинацию «горячих» клавиш (клавиш быстрого управления).

Bitmap:TBitMap; это свойство для дополнения заголовка пункта меню растровым изображением  с левой стороны. Для этого необходимо открыть редактор свойства Bitmap и загрузить графический файл с расширением  .bmp.

Для создания подменю следует выбрать элемент меню и щелкнуть правой кнопкой мыши и в контекстном меню выбрать пункт Create Submenu  и далее ввести пункты подменю.

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

 

 

5.2   Задание  1 к лабораторной работе

 

5.2.1 Создать главное меню, меню должно состоять из двух пунктов: обработка массива и сервис (рисунок5.1). Пункт обработка массива состоит из команд: max, min, sum. Пункт сервис состоит из команд: clear  и close. Команда clear содержит подменю: clear stringgrid и clear memo.

В качестве реакции на выбор пункта меню вывести значения максимума, минимума и суммы элементов массива. Значения элементов массива ввести в таблицу StringGrid.

5.2.2 Создать контекстное меню для вывода значений максимума, минимума и суммы элементов массива.

5.2.3 Вывести значения максимума, минимума и суммы элементов массива, используя компонент Button, но в качестве обработчика события использовать процедуру, созданную ранее – реакцию на пункты главного меню.

План разработки программы:

1) Разместить компоненты на дизайнере форм, согласно рисунку 5.1:

MainMenu1 – со страницы Standard;

PopupMenu1 – со страницы Standard;

Memo1- со страницыStandard;

Button1-5 – со страницы Standard; присвоить значения свойству caption, согласно рис 5.1.

StringGrid1 – со страницы Additional; задать значения свойств:

colcount - 5,

rowcount – 5,           

fixed row-0,

fixed col – 0,

options – goEditing – true,

options – goTab – true.

2) Выбрать свойство Items компонента MainMenu1. Щелкнуть на кнопке с тремя точками. Появится окно конструктора меню. Пункты   меню верхнего уровня  формируются по горизонтали. Свойства caption имеют следующие значения caption:=’обработка массива’ и caption:=’сервис’.

3) Набрать пункты меню следующего уровня  в соответствии с рисунком  5.2. Для пункта обработка массива max, min, sum. Для команды max задать клавишу быстрого перехода (акселератор). В этом случае свойство caption имеет значение &max. Для команды min задать «горячую» клавишу: выбрать свойство ShortCut и в выпадающем списке выбрать нужное значение, например, Ctrl+M.

 

 

Рисунок 5.1

 

4) Для пункта меню сервис добавить команды clear и close (рисунок 5.3). Для того чтобы по команде clear открывалось подменю, необоходимо выполнить следующие действия. Выделить команду clear, щелкнуть правой кнопкой мыши и в открывшемся контекстном меню конструктора выбрать команду Create Submenu  и далее ввести пункты подменю: clear stringgrid и  clear memo.

 

 

Рисунок 5.2

 

5) Для определения реакции на выбор пунктов меню выбирается пункт меню и щелкают по нему. В результате появится окно редактора кода, в котором вводится код обработчика события OnClick. Например, для элемента меню  max обработчик события OnClick будет иметь следующий вид:

procedure TForm1.max1Click(Sender: TObject);

var max:integer;    i,j:integer;

begin

 max:=a[1,1];

    for i:=1 to 5 do

      for j:=1 to 5 do

        if a[i,j]>=max then max:=a[i,j];

        memo1.Lines.Add('max value ='+ inttostr(max));

end;

Аналогично  вводятся коды  обработчиков события для остальных команд меню обработка массива – min и sum,  и команды clear stringgrid  из меню сервис.

 

 

Рисунок 5.3

 

6) Активизировать кнопку start, предназначенную для ввода элементов массива из таблицы stringgrid1, написать код обработчика события OnClick:

procedure TForm1.Button4Click(Sender: TObject);

var i,j:integer;

begin

 for i:=1 to 5 do

 for j:=1 to 5 do

    a[i,j]:=strtoint(stringgrid1.Cells[j-1,i-1]);

end;

7) Активизировать кнопку clear memo, предназначенную для очистки memo.

8) Активизировать кнопку Close (button6), предназначенную для закрытия формы.

9) Для команды Close из меню Сервис используется процедура, созданная ранее в пункте 8 – Button6Click. Обработчик события close1Click (команда close  из меню сервис) имеет следующий вид:

procedure TForm1.close1Click(Sender: TObject);

begin;

 button6Click(button6);

end;

Аналогично из  команды clear memo из меню сервис вызывается  процедура, созданная в пункте  7).

10)   Для кнопок max (Button1) и min(Button2)  вызываются соответственно процедуры max1Click(max1) и min1Click(min1);

procedure TForm1.Button1Click(Sender: TObject);

begin;

 max1Click(max1);

еnd;

11) Сохранить проект в папке menu и запустить на выполнение.

12) Создание контекстного меню. В свойстве Items компонента PopupMenu зададим элементы контекстного меню: те же, что и в главном меню: max, min, sum, clear stringgrid, close;

13) Для элемента max контекстного меню реакция на  OnClick будет такой же, как для элемента max  главного  меню. Тогда обработчик события OnClick для элемента max  контекстного меню будет иметь следующий вид:

procedure TForm1.max2Click(Sender: TObject);

begin;

 max1Click(max1);

end;

Аналогично, из  остальных элементов контекстного меню вызываются процедуры главного меню.

14) Для того чтобы локальное меню было доступным в любой точке формы Form1, необходимо установить ее свойство PopupMenu  равным PopupMenu1.

15) Сохранить проект и запустить на выполнение. Щелчок правой кнопки активизирует локальное меню.

 

5.3  Компоненты ToolBar и  StatusBar 

 

Панель инструментов – это специальный контейнер.  На панели инструментов могут быть размещены кнопки, переключатели, комбинированные списки.  Для создания панели инструментов используется компонент ToolBar, расположенный на странице Win32 палитры компонентов. Основным элементом, располагаемым на панели, является кнопка.ToolButton. Новые кнопки добавляются с помощью команды New Button контекстного меню панели инструментов. 

Изображения к кнопкам подключаются с помощью компонента ImageList, формируется коллекция. Затем имя коллекции присаивается свойству Images панели инструментов, а свойству  ImageIndex присваивается индекс одного из рисунков.

Строку состояния  представляет компонент StatusBar, расположенный на странице Win32. Строка состояния предназначена для отображения дополнительной информации, например, текущей даты, текущего времени и так далее. Она может быть разбита на несколько отдельных панелей. Для этого выполнить следующие действия. Дважды щелкнуть мышью на строке состояния  и с помощью кнопки Add New добавить необходимое количество панелей. Свойство Text  отображает тест на панели.

Обратиться к конкретной панели можно по ее индексу: Panels[i];

 

5.4        Задание 2 к лабораторной работе

 

Решить  квадратное уравнения с переменными коэффициентами, вычислить объем конуса. Создать команды меню, а также кнопки на панели  инструментов, которые привязаны к командам меню. В строке состояния отразить текущее время и текущую дату.

План разработки программы:

1)       Поместить на форму компоненты: MainMenu, LabelEdit – 3 компонента для коэффициентов квадратного уравнения и 2 компонента – для ввода радиуса и высоты конуса. Memo1,  Memo2 – для вывода корней уравнения и для вывода объема, как показано на рисунке 5.4. Поместить на форму компонент ToolBar. Создать три кнопки.

2)       Создать главное меню с указанными командами.

3)       Для каждого элемента меню создать обработчики события. (см. пункт 5.2).

4)       Привязать  каждую кнопку панели инструментов к конкретному пункту меню: в свойстве кнопки MenuItem  выбрать пункт меню. Например, ToolButton1 – MenuItemN2  и так далее. Чтобы на кнопке отобразить заголовок пункта меню, значение свойства ShowCaptions  панели инструментов установить равным true.

 

 

Рисунок 5.4

 

5)       Поместить компонент  StatusBar. Разбить на две панели: щелкнуть правой кнопкой мыши на StatusBar, выбрать Panels Editor и добавить две панели: для отображения даты и времени. Для отображения текущего времени  необходимо поместить компонент timer. Активизировать Timer1 и в обработчике события поместить следующий текст:

statusbar1.Panels[0].Text:=datetostr(now);

statusbar1.Panels[1].Text:=timetostr(now);

6)     Сохранить проект и запустить его на выполнение.

 

 

5.5  Контрольные вопросы

 

5.5.1   Что представляет собой меню?

5.5.2   Как называются пункты главного меню?

5.5.3   Как происходит процесс создания главного меню на этапе проектирования?

5.5.4   Как создать подменю?

5.5.5   Какие компоненты используются для создания главного и контекстного меню?

5.5.6   Для того чтобы локальное меню было доступным в любой точке формы Form1, какие свойства какого компонента и как должны быть изменены?

 


5.5 Задания к лабораторной работе

 

Создать приложение, в котором будет выполнять ранее созданные приложения к лабораторным работам 1, 2, 3, 4. Выполнение приложения осуществляется обращением к соответствующему пункту меню или подменю, обращением к контекстному меню, кнопкам панели инструментов. Создать панель состояния, где отразить дату, время, день недели, данные разработчика приложения.

 

6 Лабораторная работа. Построение графиков математических функций. Построение  диаграмм с помощью компонента Chart

 

Цель работы: приобрести навыки построения графиков  и диаграмм на поверхности рисования  и компоненте Chart.

 

6.1 Поверхность рисования

 

Поверхность рисования – это объект типа Tcanvas. Многие визуальные элементы управления графикой обладают свойством Canvas, с помощью которого можно напрямую обращаться к их поверхности рисования. К ним относятся Form, label, Image, PaintBox1, StringGrid, DrawGrid и так далее.

Компонент Image расположен на странице Additional палитры компонентов и используется для размещения на форме некоторой картинки, удобно для отображения некоторых графических файлов.

Свойства:

Canvas предназначается для формирования изображения на этапу выполнения программы.

Picture  определяет изображение, помещенное в компонент.

Если свойство Stretch   имеет значение True, изображение увеличивается или уменьшается до размеров компонента. По умолчанию имеет значение  False.

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

Компонент Shape расположен на странице Additional палитры компонентов. Используется для создания на форме простых геометрических фигур.

Свойство  Brush определяет кисть для закрашивания, а Pen – карандаш для рисования контура фигуры.

 

6.2 Система координат

 

Каждая поверхность рисования характеризуется независимой системой координат. С помощью системы координат легче ориентироваться при рисовании графических изображений. Точка отсчета с координатами (0,0) располагается в левом верхнем углу поверхности рисования. Горизонтальная ось направлена слева направо, а вертикальная – сверху вниз.

Единицами измерения используемой системы координат являются пиксели. Это значит, что изменения координат точки на единицу приведет к ее смещению на один пиксель.

 

6.3 Графические инструменты

 

Основными графическими инструментами являются Pen и  Brush.

Карандаш Pen предназначен для рисования линий и очертаний геометрических фигур. По умолчанию рисует черным цветом толщиной один пиксель. Основные свойства карандаша:

Color  - цвет;

Width – толщина карандаша в пикселях;

 Style –  стиль рисования. Например, psSolid – сплошная линия, psDot – пунктирная линия.

Ограничение: при толщине карандаша более одного пикселя, кроме psSolid, все стили игнорируются.

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

Основные  свойства Brush:

Color - цвет;

Style – стиль.

Свойство Style определяет стиль заливки внутренней области фигуры. Например, стиль bsSolid – сплошная заливка,  bsBDiagonal – заливка диагональными линиями, bsDiagCross – заливка пересекающимися диагональными линиями.

Графическое изображение является результатом объединения или пересечения простейших графических элементов – примитивов.

Для прорисовки используются функции LineTo() -  рисует линию, MoveTo() – устанавливает курсор в указанное место. Функция TextOut() – выводит текст.

 

6.4 Задание 1 к лабораторной работе

 

Вывести  график функции у=20+х2 на форму. Необходимо прорисовать сетку, оси координат.

План разработки приложения:

1)       Поместить на форму компонент PaintBox (палитра компонентов System).

2)       Центр системы координат в задании будет перемещен в точку с координатами (50, 200).

3)       Для удобства работы в новой системе координат будут написаны специальные функции сх и су, которые предназначены для перевода координат точек из данной системы в систему, принятую в Делфи.

function cx(X:integer):integer;  begin

  cx:=50+x;

  end;

function cy(Y:integer):integer;

  begin

  cy:=200-y;

  end;

4)       Прорисовка осей системы координат:

   with Form1.Canvas do

      begin             

       //1. прорисовка осей системы координат

         pen.Width:=2;

         moveTo(cx(0),cy(0));

         Lineto(cx(0),cy(160));    //ось х

         moveTo(cx(0),cy(0));

         Lineto(cx(300),cy(0));    //ось у

5)   Прорисовка координатной сетки.

        //2.Прорисовка координатной сетки с шагом 20 пикселей

         pen.Width:=1;

         pen.Style:=psDot;

         for i:=1 to 8 do

         begin

            moveTo(cx(0),cy(i*20));

            Lineto(cx(300),cy(i*20));

         end;

          for i:=1 to 15 do

         begin

            moveTo(cx(i*20),cy(0));

            Lineto(cx(i*20),cy(160));

         end;

6)     Вывод заголовков осей.

       //3.Вывод заголовков осей

         font.Size:=15;

         TextOut(cx(290),cy(-5),'x');

         TextOut(cx(-20),cy(160),'y');

7)     Отображение графика.

         for i:=0 to 300 do

         pixels[cx(i),cy(20+round(i*i/1000))]:=clRed;

8)       Сохранить  и выполнить запуск проекта (см. рисунок 6.1)

 

 

                                              Рисунок 6.1

 

6.5 Компонент  Chart (для отображения графиков и диаграмм)

 

Компонент Chart расположен на странице  Additional. По умолчанию на графике отображается пустая система координат и заголовок Тchart. Настройка параметров осуществляется с помощью специального конструктора, который вызывается командой  EditChart контекстного меню компонента Сhart.

Он позволяет настроить следующие параметры страницы Chart:

- Тип серии (ряда данных) – страница Series;

- Общие параметры – страница General;

- Оси – страница Axis;

- Заголовок – страница Title;

- Легенду – страница – Legend.

Источники данных и параметры серий – страница Series.

Разработка графика начинается с формирования набора серий (рядов). Чтобы добавить серию, необходимо щелкнуть на кнопке Add и в появившемся окне выбрать тип графика.

Обращение к определенной серии обеспечивается свойством Series[index:longint], где index – порядковый номер в списке.

Для динамического добавления точек к серии можно воспользоваться следующим  методом:

AddXY(x,y:double;const label:string; color:Tcolor).

 

 

6.6 Задание 2 к лабораторной работе

 

Построить график функции у=х2 с использованием компонента Chart,  в строке состояния показывать текущее время. 

План разработки приложения:

1)   Со страницы Additional  поместить на форму компонент Chart1, со страницы Win 32 -  Timer1, StatusBar1, также  Button1 – «График», Button2 – «Закрыть»..

2)   Дважды щелкнуть на компоненте Chart1 или с помощью команды Edit Chart контекстного меню открыть конструктор графика – Editing Chart 1.

3)   Щелкнуть на кнопке Add и выбрать тип графика – Line; отменить флажок 3D.

4)   Изменить заголовок графика – назвать  Парабола. Для этого перейти на страницу  ChartTitles и ввести заголовок графика.

5)   Активизировать кнопку «График» и в заготовку обработчика события поместить следующий текст:

 

for i:=1 to 5 do

 begin

 a[i]:=i;b[i]:=a[i]*a[i];

chart1.Series[1].AddXY(a[i],b[i],' ',clred);

 end;

 

6)       Активизировать кнопку «Закрыть» и ввести команду.

7)       Активизировать Timer1 и в обработчике события поместить следующий текст:

 

statusbar1.Panels[1].Text:=timetostr(now).

 

8)     Сохранить проект и запустить на выполнение (см. рисунок 6.2).

 

 

Рисунок 6.2

 

6.7    Контрольные вопросы

 

6.7.1     Перечислить компоненты, которые обладают свойством Canvas.

6.7.2     Где на поверхности рисования располагается точка отсчета с координатами (0, 0)?

6.7.3     Какие единицы измерения используются в системе координат поверхности рисования?

6.7.4     Для чего используется функция LineTo()?

6.7.5     Для чего используется функция  MoveTo()?

6.7.6     Для чего используется функция TextOut()?

6.7.7     Перечислить основные свойства графических инструментов Pen и Brush.

6.7.8     Как добавить новую серию при использовании компонента Chart?

6.7.9     Каким свойством обеспечивается обращение к определенной серии?

 

 

6.8    Варианты заданий

 

По данным таблиц построить диаграммы:

1. Динамика  добычи нефти крупнейшими российскими компаниями, млн тонн.

 

компания

1996

1997

1998

1999

2000

2001

2001

2003

Сургутнефтегаз

33

33,9

35,2

37,9

41

44

48

52

Лукойл

53

57,1

64,2

73,5

75

78,3

81,4

84,7

Татнефть

25

25,5

25,5

26,3

23,1

24,6

24,7

26

Сибнефть

19

18,2

17,3

16,3

17,2

20,7

26,8

31,5

 

2. Мировое сельскохозяйственное производство: добавленная стоимость в ценах и по ППС 2000г., млрд долл.

Страна

1900

1913

1929

1938

1950

1960

1970

1980

1990

2000

США

43

56

69

76,5

93,5

105

128,5

146

157,5

175

Германия

16

19

20

21,5

23

29

37

40,5

46

52,5

Франция

21,5

22

22,5

23

23,5

29,5

47

53

65

76,5

Италия

13,5

14,5

16

17

18,5

30,5

42

44,5

49

56

СССР

37

50,5

58,8

63

75

81,5

87,5

98

120

100

 

3. Численность занятых в мировой экономике, млн чел.

Страна

1900

1913

1929

1938

1950

1960

1970

1980

1990

2000

Германия

18,5

23,5

25

26,5

29

31

34

35

37

38,5

Франция

20

20

20

19,5

19

21

23

25

26,5

27,5

Великобритания

16,5

18,5

20

20,5

22,5

24

25

25,5

26

26,5

Италия

15

16,5

17

18

18,5

20

22

24

24,5

25

 

4.  Мировой экспорт, в ценах и по ППС 2000 г., млрд долл.

Страна

1900

1913

1929

1938

1950

1960

1970

1980

1990

2000

Германия

21,5

54

58

64,1

36,5

87,5

185

385

600

710

Франция

22

28,5

40,5

40

31,5

62,5

140

235

330

420

Великобритания

38,5

54,5

73

76

66

105

160

235

320

400

Бельгия

12,2

15,5

18,4

16,8

12,3

27,5

63

112

176

214

 

5. Промышленное производство: добавленная стоимость, в ценах и по ППС нац. валют 2000г., млрд долл.

Страна

1900

1913

1929

1938

1950

1960

1970

1980

1990

2000

Германия

29

51

59

478

93

244

420

510

575

625

Франция

28

46

57

52

63

93

190

275

310

355

Великобритания

53

73

84

105

130

180

245

265

300

335

СССР

40

70

80

105

205

480

725

935

1000

545

 

 

 

Построение графиков и рисунков

 

1.        Изобразить на экране точку, пересекающую с постоянной скоростью экран справа налево параллельно его горизонтальной оси. Как только точка доходит до левого края, в этот момент от правого края в строке, выбранной с помощью датчика случайных чисел, начинает свое движение другая точка. Цвет точки также можно выбирать с помощью датчика случайных чисел.

2.        Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг своей середины.

3.        Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг своего конца.

4.        Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг точки, делящей отрезок в отношении 1:3.

5.        Изобразить на экране точку, пересекающую экран равноускоренно в вертикальном направлении.

6.        Изобразить на экране приближающийся издали шар.

7.        Получить на экране слово БАУ-06, составленное из крупных букв, и обеспечить его перемещение по экрану – по горизонтали от левого края экрана к правому краю.

8.        Получить на экране слово БАУ-06, составленное из крупных букв, и обеспечить его перемещение по экрану – по вертикали от верхнего  края экрана к нижнему краю.

9.        Получить на экране два слова БАУ-06, движущихся по экрану по одной горизонтальной прямой навстречу друг другу – одно от левого края к правому, другое – от правого края к левому. Движение выполняется до полного совмещения слов.

10.   Используя семь концентрических окружностей, получить «круги на воде». Центры окружностей должны быть совмещены с центром экрана, а радиусы изменяться от 40 до 82 пиксел, увеличиваясь на 7 пиксел с каждой следующей окружностью. Иллюзия движения должна создаваться последовательной сменой цветов всех окружностей, начиная с внутренней и кончая внешней. Процесс смены цветов следует повторить несколько раз.


Приложение А

 

Листинги программ к лабораторной работе 1

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Button1: TButton;

    Label4: TLabel;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure edit1keypress(Sender: TObject; var Key: Char);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

 

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var r,h,v,s: real;

begin

  r:=strtofloat(edit1.Text);

  h:=strtofloat(edit2.Text);

  s:=pi*sqr(r);

  v:=s*h;

  label3.Caption:='площадь основания равна'+floattostrf(s,ffgeneral,7,2);

  label4.Caption:='объем цилиндра равен'+floattostrf(v,ffgeneral,7,2);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

procedure TForm1.edit1keypress(Sender: TObject; var Key: Char);

begin

If key=#13 then  Edit2.SetFocus;

end;

end.

 

 

unit Unit1;

 

interface

 

uses

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

  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Memo1: TMemo;

    Button1: TButton;

    Button3: TButton;

    Label1: TLabel;

    Label2: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

implementation

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var r,h,s,vkon,vcil:real;

begin

r:=strtofloat(edit1.Text);

h:=strtofloat(edit2.Text);

s:=r*r*pi;

vkon:=s*h/3;

vcil:=s*h;

memo1.Lines.Add('объем конуса равен:  '+floattostr(vkon));

memo1.Lines.Add('объем цилиндра равен:  '+floattostr(vcil));

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

edit1.Clear;

edit2.Clear;

memo1.Clear;

end;

end.

Приложение Б

 

Листинги программ к лабораторной работе 2

uses

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

  Dialogs, StdCtrls, Buttons;

type

  TForm1 = class(TForm)

    ListBox1: TListBox;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    BitBtn1: TBitBtn;

    Button1: TButton;

    procedure BitBtn1Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure ListBox1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 case   listBox1.ItemIndex of

0: Label3.Caption:= 'черный  ОООООО';

1: Label3.Caption:=' белый  FFFFFF' ;

2: Label3.Caption:=' красный  FFOOOO' ;

3: Label3.Caption:=' зеленый  OOFFOO' ;

4: Label3.Caption:= 'бирюзовый OOFFFF';

5: Label3.Caption:=' синий OOOOFF';

6: Label3.Caption:=' фиолетовый  FFOOFF';

7: Label3.Caption:= ' желтый  FFFFOO';

8: Label3.Caption:= 'коричневый  996633';

9 : Label3.Caption:= ' оранжевый  FF8000';

10: Label3.Caption:= ' липовый  8000FF';

11: Label3.Caption:=' серый  АОАОАО';

end;

end;

end.

 

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)

    ComboBox1: TComboBox;

    ComboBox2: TComboBox;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure Button3Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;   i, max, min, maxi,mini:integer;

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

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

i:=0;

comboBox1.Clear;

combobox2.Clear;

combobox1.TabOrder:=0;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

combobox1.items.add(combobox1.Text);

i:=i+1;

a[i]:=strtoint(combobox1.Text);

combobox1.SetFocus;

end;

procedure TForm1.Button2Click(Sender: TObject);

var k:integer;

begin

  max:=a[1];   maxi:=1;  min:=a[1];  mini:=1;

  for k:=2 to 10 do

     begin

       if max<a[k] then

          begin

            max:=a[k];

            maxi:=i;

          end;

       if min>a[k] then

          begin

            min:=a[k];

            mini:=i;

          end;

      end;

       a[maxi]:=min;

       a[mini]:=max;

       for k:=1 to 10 do

       combobox2.Items.Add(inttostr(a[k]));

       combobox2.DroppedDown:=true;

end;

 

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if key=13 then button1.SetFocus;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

end.      

 

Приложение В

 

Листинги программ к лабораторной работе 3

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls, CheckLst, ExtCtrls;

type

  TForm1 = class(TForm)

    RadioGroup1: TRadioGroup;

    CheckListBox1: TCheckListBox;

    Button1: TButton;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

    procedure RadioGroup1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var   Form1: TForm1;

Implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

close;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

var I:integer;

begin

memo1.Clear;

for I:=0 to 10 do checklistbox1.checked:=false;

if radiogroup1.ItemIndex=-1

then showmessage('Необходимо выбрать аудиторию!')else

case radiogroup1.ItemIndex of

0:begin checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[4]:=true;

        checklistBox1.Checked[10]:=true;

        checklistBox1.Checked[11]:=true;

        memo1.Lines.Add('Желательно установить дополнительно программы');

   end;

1:begin checklistBox1.Checked[1]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[5]:=true;

        checklistBox1.Checked[6]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[9]:=true;

        checklistBox1.Checked[10]:=true;

        memo1.Lines.Add('Эта аудитория занята весь день');

   end;

2:begin checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[3]:=true;

        checklistBox1.Checked[4]:=true;

        checklistBox1.Checked[6]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[9]:=true;

        memo1.Lines.Add('Можно установить ТурбоС++');

   end;

3:begin checklistBox1.Checked[5]:=true;

        checklistBox1.Checked[7]:=true;

        checklistBox1.Checked[9]:=true;

        memo1.Lines.Add('В этой аудитории проводятся занятия по спецдисциплинам');

   end;

4:begin checklistBox1.Checked[1]:=true;

        checklistBox1.Checked[2]:=true;

        checklistBox1.Checked[8]:=true;

        checklistBox1.Checked[3]:=true;

        memo1.Lines.Add('Это - аудитория преподавателей');

   end;

end;

end;

end.

Приложение Г

 

Листинги программ к лабораторной работе 4

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls, ExtCtrls, Grids;

type

  TForm1 = class(TForm)

    DrawGrid1: TDrawGrid;

    Timer1: TTimer;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    procedure Timer1Timer(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

var k,i,j:integer; area:TRect;

begin

DrawGrid1.Canvas.Brush.Color:=clBlack;

for i:=0 to 174 do

   for j:=0 to 104 do

       begin

   area:= DrawGrid1.CellRect(j,i);

   drawGrid1.Canvas.FillRect(area);

        end;

        k:=-1;

        DrawGrid1.Canvas.Brush.Color:=clWhite;

        for i:=0 to 174 do

        for j:=0 to 104 do

        begin inc(k);

        if frac(sqrt(k))=0 then

        begin

          area:= DrawGrid1.CellRect(j,i);

         drawGrid1.Canvas.FillRect(area);

         end;

         end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled:=false;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

timer1.Enabled:=true;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

end.

 

 

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls, Grids;

type

  TForm1 = class(TForm)

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,j:integer;

begin

 for j:=0 to 4 do

        if (j<>1)and (j<>3) then

          for i:=0 to 4 do

            StringGrid2.Cells[j,i]:=StringGrid1.Cells[j,i];

         for i:=0 to 4 do

            begin

              StringGrid2.Cells[1,i]:=StringGrid1.Cells[3,i];

              StringGrid2.Cells[3,i]:=StringGrid1.Cells[1,i];

            end;

end;

procedure TForm1.Button4Click(Sender: TObject);

var i,j:integer;

begin

    for i:=0 to 4 do

      for j:=0 to 4 do

      StringGrid2.Cells[j,i]:=' ';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

 stringgrid2.Cols[0]:=stringgrid1.Cols[0];

 stringgrid2.Cols[1]:=stringgrid1.Cols[3];

 stringgrid2.Cols[2]:=stringgrid1.Cols[2];

 stringgrid2.Cols[3]:=stringgrid1.Cols[1];

 stringgrid2.Cols[4]:=stringgrid1.Cols[4];

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

end.

 

Приложение Д

 

Листинги программ к лабораторной работе 5

unit Unit1;

interface

uses

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

  Dialogs, Menus, StdCtrls, Grids;

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    PopupMenu1: TPopupMenu;

    StringGrid1: TStringGrid;

    Button1: TButton;

    Button2: TButton;

    Memo1: TMemo;

    Button6: TButton;

    N1: TMenuItem;

    max1: TMenuItem;

    min1: TMenuItem;

    sum: TMenuItem;

    N2: TMenuItem;

    clear1: TMenuItem;

    clearstringgrid1: TMenuItem;

    clearmemo1: TMenuItem;

    close1: TMenuItem;

    Button7: TButton;

    Button3: TButton;

    max2: TMenuItem;

    min2: TMenuItem;

    sum1: TMenuItem;

    memoclear1: TMenuItem;

    close2: TMenuItem;

    procedure Button7Click(Sender: TObject);

    procedure max1Click(Sender: TObject);

    procedure min1Click(Sender: TObject);

    procedure sumClick(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure close1Click(Sender: TObject);

    procedure clearstringgrid1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure clearmemo1Click(Sender: TObject);

    procedure max2Click(Sender: TObject);

  

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;    a:array [1..5,1..5] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button7Click(Sender: TObject);

var i,j:integer;

begin

 for i:=1 to 5 do

 for j:=1 to 5 do

    a[i,j]:=strtoint(stringgrid1.Cells[j-1,i-1]);

end;

procedure TForm1.max1Click(Sender: TObject);

var max:integer;    i,j:integer;

begin

 max:=a[1,1];

    for i:=1 to 5 do

      for j:=1 to 5 do

        if a[i,j]>=max then max:=a[i,j];

        memo1.Lines.Add('max value ='+ inttostr(max));

end;

procedure TForm1.min1Click(Sender: TObject);

var min:integer;  i,j:integer;

begin

 min:=a[1,1];

  for i:=1 to 5 do

      for j:=1 to 5 do

        if a[i,j]<=min then min:=a[i,j];

        memo1.Lines.Add('min value ='+ inttostr(min));

end;

procedure TForm1.sumClick(Sender: TObject);

var sum:integer;  i,j:integer;

begin

sum:=0;

 for i:=1 to 5 do

      for j:=1 to 5 do

     sum:=sum+a[i,j];

        memo1.Lines.Add('sum ='+ inttostr(sum));

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 max1Click(max1);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 min1Click(min1);

end;

procedure TForm1.close1Click(Sender: TObject);

begin

 button6Click(button6);

end;

procedure TForm1.clearstringgrid1Click(Sender: TObject);

var i,j:integer;

begin

 for i:=0 to 4 do

   for j:=0 to 4 do

   StringGrid1.Cells[j,i]:=' ';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

memo1.Clear;

end;

procedure TForm1.clearmemo1Click(Sender: TObject);

begin

 button3Click(button3);

end;

procedure TForm1.max2Click(Sender: TObject);

begin

 max1Click(max1);

end;

end.

 


Приложение Е

 

Листинги программ к лабораторной работе 6

 

unit Unit1;

interface

uses

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

  Dialogs;

type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure FormPaint(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);

//функция преобр.координат точек в координаты на поверхности рисования}

function cx(X:integer):integer;  begin

  cx:=50+x;

  end;

function cy(Y:integer):integer;

  begin

  cy:=200-y;

  end;

  var i:integer;

  begin

   with Form1.Canvas do

      begin                  

       //1. прорисовка осей системы координат

         pen.Width:=2;

         moveTo(cx(0),cy(0));

         Lineto(cx(0),cy(160));         //ось х

         moveTo(cx(0),cy(0));

         Lineto(cx(300),cy(0));         //ось у

        //2.Прорисовка координатной сетки с шагом 20 пикселей

         pen.Width:=1;

         pen.Style:=psDot;

         for i:=1 to 8 do

         begin

            moveTo(cx(0),cy(i*20));

            Lineto(cx(300),cy(i*20));

         end;

          for i:=1 to 15 do

         begin

            moveTo(cx(i*20),cy(0));

            Lineto(cx(i*20),cy(160));

         end;

       //3.Вывод заголовков осей

         font.Size:=15;

         TextOut(cx(290),cy(-5),'x');

         TextOut(cx(-20),cy(160),'y');

         //4. Отображение графика

         for i:=0 to 300 do

         pixels[cx(i),cy(20+round(i*i/1000))]:=clRed;

         end;

 

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

close;

end;

 

end.

 

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeFunci,

  ComCtrls;

type

  TForm1 = class(TForm)

    Chart1: TChart;

    Series1: TBarSeries;

    Button1: TButton;

    Button2: TButton;

    Series2: TLineSeries;

    StatusBar1: TStatusBar;

    Timer1: TTimer;

    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

 close;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;  a,b:array [1..5] of integer;

begin

 for i:=1 to 5 do

 begin

 a[i]:=i;b[i]:=a[i]*a[i];

 {chart1.series[0].AddXY(a[i],b[i],' ',clgreen);}

chart1.Series[1].AddXY(a[i],b[i],' ',clred);

 end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

statusbar1.Panels[1].Text:=timetostr(now);

end;

 

end.


Список литературы

 

1.       Кандзюба С.П., Громов В.Н. Delphi 6/7. Базы данных и приложения. – СПб: ООО «ДиаСофтЮП», 2002.

2.       Желонкин А. В. Основы программирования в интегрированной среде DELPHI. Практикум. – М.: БИНОМ, 2006.

3.       Жуков А. Изучаем Delphi. – М. : Питер, 2002.

4.       Фленов М. Библия Delphi.- СПб.: БХВ – Петербург, 2008.

5.       Культин Н. С++ Builder  в задачах и примерах.- СПб.: БХВ-Петербург, 2005.

 

 

Содержание 

Введение                                                                                                 3

1 Лабораторная работа. Создание проекта с использованием компонентов   Edit, Label, Memo, Button                                                           3

2  Лабораторная работа. Использование  компонентов List box Combobox                                                                                                      10

3 Лабораторная работа.  Панель переключателей  RadioGroup и список выключателей CheckListBox                                                                            16

4 Лабораторная  работа. Использование таблиц DrawGrid и StringGrid и  компонента  Timer                                                                                            20

5 Лабораторная работа. Создание меню. Компоненты  Main Menu  и Popup Menu        26   

6 Лабораторная работа. Построение графиков математических функций. Построение  диаграмм с помощью компонента Chart                                    33

Приложение А                                                                                           40

Приложение Б                                                                                           42

Приложение В                                                                                           44

Приложение Г                                                                                           46

Приложение Д                                                                                           48

Приложение Е                                                                                           51

Список литературы                                                                                   54


                                                                                Свод. план 2010 г. поз