Методичка к лабам


Серпуховский технический колледж
Методические указания к лабораторным работам по дисциплине «Программирование в среде Delphi» специальности «Программное обеспечение вычислительной техники и автоматизированных систем»
г. Серпухов 2011 г.
АвторФедосеева М.В.
Рассмотрено на
заседании цикловой комиссии
Протокол №____ от «___» __________
Председатель цикловой комиссии:
Методические указания к лабораторным работам по дисциплине «Программирование в среде Delphi» по специальности «Программное обеспечение вычислительной техники и автоматизированных систем» предназначены для студентов 3 курса при выполнении лабораторных работ
Лабораторная работа №1
Тема: Работа с формами.
Цель: Овладеть основными приемами работы с формами
Теоретическая часть
Форма - это компонент Form класса TForm. На ее основе конструируется приложение. Существуют 2 класса форм:
Немодальные – те, которые позволяют переключаться в другую форму приложения без своего закрытия;
Модальные – те, которые требуют обязательного закрытия перед обращением к другой форме. Премером модальных форм могут служить стандартные диалоги ShowMessage, MessageDlg, InputBox.
Каждое приложение имеет одну главную форму и, возможно, несколько второстепенных. Главная форма загружается автоматически при запуске приложения. Чтобы сделать форму главной надо в файле проекта оператор, отвечающий за создание данной формы поставить на первое место.
Каждая форма имеет две области:
Клиентская область – та часть формы, в которой размещаются визуальные компоненты;
Неклиентская область – занята рамкой, заголовком формы и строкой главного меню.
Свойства и методы форм:
- visible – позволяет скрывать и отображать данную форму;
- left, top – задают координаты расположения формы на экране;
- width, height – задают размеры формы;
- active – определяет активность формы;
- clientwidth – возвращает ширину клиентской области;
- clientheight – возвращает высоту клиентской области;
- windowstate – определяет состояние отображаемой формы;
- show – отображает форму в немодальном режиме, при этом свойство visible автоматически устанавливается в True;
- showmodal – отображает форму в модальном режиме;
- hide – скрывает форму;
- close – закрывает форму (форма делается невидимой но не уничтожается);
- destroy – уничтожает форму.
В приложении формы могут взаимодействовать друг с другом тремя способами:
Если одна форма выполняет действия с другой формой, то в списке Uses раздела Implementation модуля первой формы должна быть ссылка на модуль второй формы;
Delphi позволяет выполнить автоматизированную вставку ссылки. Для этого выбираем File/UseUnit и в появившемся диалоговом окне выбираем нужную форму;
Форма может выполнять различные действия с компонентами другой формы. В этом случае при обращении к нужному компоненту указывается форма, которой он принадлежит, и вставляется ссылка на модуль другой формы.
Задание к работе.
Написать приложение, состоящее из 2-х форм. На первой расположить:
два текстовых поля, в которых задаются координаты вывода второй формы;
кнопку «Форма 2», при нажатии на которую открывается вторая форма и располагается в заданном месте экрана;
кнопку «Движение», при нажатии на которую Форма 2 осуществляет движение по горизонтали в одну и другую стороны до границ экрана.
Написать приложение, состоящее из 2-х форм. На первой расположить:
два текстовых поля, в которых задаются координаты вывода второй формы;
кнопку «Форма 2», при нажатии на которую открывается вторая форма и располагается в заданном месте экрана;
кнопку «Движение», при нажатии на которую Форма 2 осуществляет движение по вертикали вверх и вниз до границ экрана
Написать приложение, состоящее из 2-х форм. На первой расположить:
два текстовых поля, в которых задаются размеры второй формы;
кнопку «Форма 2», при нажатии на которую открывается вторая форма заданного размера;
кнопку «Изменить», при нажатии на которую Форма 2 то увеличивает, то уменьшает размеры до определенных пределов. Визуальные компоненты, расположенные на Форме2, закрепить на ней таким образом, чтобы они перемещались вместе с границами формы.
Написать приложение, состоящее из 2-х форм. На первой расположить:
четыре текстовых поля, в которых задаются максимально и минимально возможные размеры второй формы;
кнопку «Форма 2», при нажатии на которую открывается вторая форма заданного размера;
На второй форме расположить кнопку «Изменить», при нажатии на которую Форма1 то увеличивает, то уменьшает размеры до заданных пределов.
Написать приложение, состоящее из 2-х форм. На первой расположить:
кнопку «Форма 2», при нажатии на которую открывается вторая форма, размещается в центре экрана и не допускается изменение размеров Формы2;
кнопку «Закрыть», при нажатии на которую Форма 2 закрывается;
кнопку «Уничтожить», при нажатии на которую Форма2 уничтожается.
Создать главную форму разместить на ней кнопки Button. Каждая кнопка соответствует номеру лабораторной работы и одна кнопка является выходом из приложения. Все компоненты Button должны иметь всплывающую подсказку, указывающую номер лабораторной работы.
Каждая лабораторная работа должна начинаться с загрузки формы на которой в соответствующих компонентах должны быть указаны тема, цель и задание к работе, а также реализованы 2 кнопки: запускающая программу и осуществляющая возврат к главной форме.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №2
Тема: Разработка приложения с компонентами ввода и отображения информации.
Цель: Приобретение практических навыков разработки приложения с использование компонентов Edit, Memo, MaskEdit, Bitbtn, Button, Label.
Теоретическая часть
Однострочный редактор – это поле ввода информации, в котором можно отображать и изменять текст.
Edit – позволяет вводить с клавиатуры и редактировать различные символы и имеет следующие свойства:
Text- позволяет получить доступ к содержимому текстового редактора;
CharCase – служит для изменения регистра;
PasswordChar – задает символ для ввода пароля.
MaskEdit – дополнительно к обычному редактору предоставляет возможность ограничения вводимой информации по шаблону и имеет дополнительное свойство EditMask, которое задает маску.
Многострочный редактор – это поле для ввода или отображения информации, которое имеет несколько строк. К ним относится компонент Memo.
Для работы с ним рекомендуется использовать следующие свойства:
Text – используется для доступа ко всему содержимому редактора;
Lines – массив строк данного редактора с помощью которого можно получить доступ к любой строке;
ScroolBar – задает расположение полосы прокрутки;
Alignment- задает выравнивание;
Все компоненты редактирования имеют набор общих свойств, методов и событий.
MaxLength – максимальное количество символов, которые могут отображаться в редакторе;
AutoSelect – определяетбудет ли автоматически выделен текст в элементе редактирования;
SelText – выделенный фрагмент;
SelStar, SelLength – начальная позиция и длина выделенного фрагмента;
SelectAll – выделяет весь текст в элементе редактирования;
CopyToClipBoard – копирует в буфер обмена выделенный фрагмент;
PastFromClipBoard – вставляет текст из буфера обмена в место текущего расположения курсора;
Add – добавляет новую строку в многострочный редактор.
Задание к работе:
Разработать интерфейс приложения с применением компонентов Edit, Memo, MaskEdit, Bitbtn, Button, Label.
Разработать алгоритм решения задачи в соответствии с вариантом задания.
Реализовать разработанный алгоритм в рамках ранее созданного интерфейса.
Проверить работоспособность с помощью тестового набора данных.
Даны две квадратные матрицы A(n,n) и B(n,n), где n<=10. Выполнить действия с матрицами. Ввод матриц произвести из блока данных или путем присваивания.
Вариант Задание
1 2(A-0.5B)-AB
2 A2-(A+B)(A-3B)
3 (A2+B2)-2AB
4 (3A-2B)-4AB
5 A2-(4a+3B)
Вариант Задание
6 5(B+3A)+AB
7 (A+4B)(3A-B)-A
8 AB-(3B+A)
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.
Лабораторная работа №3
Тема: Использование компонентов для работы со списками.
Цель: Приобретение практических навыков разработки приложения с использование компонентов ListBox, ComboBox.
Теоретическая часть
Список – это прямоугольная область, в которой расположены его элементы. Для работы с простым списком используется компонент ListBox. При необходимости в нем появляются горизонтальные и вертикальные полосы прокрутки. Комбинированный список объединяет поле редактирования и список. Для работы с ним используется компонент ComboBox. Для него свойство Style определяет внешний вид и поведение списка. Свойство DropDounCount определяет количество строк, которые отображаются в раскрывающемся списке. Для простых и комбинированных списков применяют схожие свойства и методы:
Items – массив строк данного списка
ItemIndex – номер выбранного элемента списка
MultiSelect – предоставляет возможность множественного выбора
SelCount – возвращает число выбранных элементов
Selected – массив логических значений, каждый элемент которого соответствует состоянию выбора соответствующего элемента списка при множественном выборе
Count – число элементов в списке
Add – добавляет строку в конец списка
Insert – вставляет строку в список на позицию с указанным номером
Assign – копирует информацию из одного списка в другой с заменой его содержимого
Delete – удаляет элемент с заданным номером
Sorted – сортирует элементы списка
Clear – очищает весь список
Задание к работе:
Разработать интерфейс приложения с применением компонентов ListBox, ComboBox, CheckBox, RadioButton и др.
Разработать алгоритм решения задачи в соответствии с вариантом задания.
Реализовать разработанный алгоритм в рамках ранее созданного интерфейса.
Проверить работоспособность с помощью тестового набора данных.
Оформить отчет.
Задание 1.
По выбранному из списка СomboBox дню недели вывести в список ListBox расписание занятий группы на выбранный день.
На форме расположить:
- 1 компонент ListBox,
- 1 компонент ComboBox,
- 2 компонента BitBtn.Выбор заданного параметра производится из компонента ComboBox. Выбранные данные отображаются в компоненте ListBox.

Задание 2
Вариант Задание
1 Создать приложение, в котором организовано взаимодействие двух списков. При запуске первый список заполняется названиями месяцев, а второй список очищается. Оба списка допускают множественный выбор элементов. При нажатии кнопок «» и «» выбранные элементы одного списка перемещаются в другой.
2 Организовать программную прорисовку элементов списка. Для выделенных элементов отображается рисунок, загруженный из одного файла, а для невыделенных – из другого. Выделенные элементы дополнительно отмечаются желтым цветом символов на синем фоне.
3 Написать приложение, которое помогает получить любую информацию об успеваемости группы студентов. На первой форме расположено текстовое поле и список. В поле заносится фамилия студента и оценка, полученная на экзамене. Введенная информация добавляется в качестве очередной записи в список. На второй форме расположены два списка: комбинированный и простой. В комбинированном списке находятся оценки, полученные студентами на экзамене. При выборе оценки, во втором списке отображаются фамилии студентов, получивших данную оценку.
4 Написать приложение, которое помогает получить любую информацию о репертуаре кинотеатров. На первой форме расположено текстовое поле и список. В поле заносится название кинотеатра и фильм. Введенная информация добавляется в качестве очередной записи в список. На второй форме расположены два списка: комбинированный и простой. В комбинированном списке находятся названия кинотеатров. При выборе кинотеатра во втором списке отображаются фильмы, которые идут в нем.
5 Написать приложение, которое позволяет работать со списком товаров. На форме расположено текстовое поле, в которое вводится название товара. Введенный товар помещается в список всех товаров только в том случае, если там такого товара не существовало. Кнопка «Удалить» позволяет удалять выбранные товары из списка. Кнопка «Результат» помещает все выбранные товары на метку, расположенную на форме.
6 Написать приложение, которое позволяет работать со списком растений цветочного магазина. На форме расположено текстовое поле, в которое вводится название растения. Введенный цветок помещается в список всех растений только в том случае, если там такого растения не существовало. Кнопка «Удалить» позволяет удалять выбранные растения из списка. Кнопка «Результат» помещает все выбранные растения на метку, расположенную на форме.
7 Написать приложение, которое позволяет работать со списком музыкальных групп. На форме расположено текстовое поле, в которое вводится название группы. Она помещается в список всех групп только в том случае, если там такой группы не существовало. Кнопка «Удалить» позволяет удалять выбранные группы из списка. Кнопка «Результат» помещает все выбранные группы на метку, расположенную на форме.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №4
Тема: Использование компонентов переключателей.
Цель: Приобретение практических навыков разработки приложения с использование компонентов RadioButton, GroupBox, CheckBox.
Теоретическая часть
Переключатели позволяют выбирать какое-либо значение из определенного множества.
Checkbox – это переключатель с независимой фиксацией (или флажок)
Checked – определяет состояние флажка (истина или ложь)
Enabled – определяет активность флажка.
RadioButton – это переключатель с зависимой фиксацией. Выбор переключателей взаимоисключающий. Каждый переключатель, помещенный на контейнер, включается в группу. Контейнерами могут быть Form, Panel, GroupBox. Для работы с группой переключателей можно использовать следующие свойства и методы:
Items – позволяет получить доступ к отдельным переключателям в группе;
Add – добавляет переключатель в группу;
Delete – удаляет переключатель из группы;
Itemindex – номер выбранного переключателя.
Контейнер – это визуальный компонент, который позволяет размещать на своей поверхности другие компоненты, объединяет их и становится их владельцем.
GroupBox – рамка с заголовком. Может служить для объединения переключателей или флажков по смыслу. Заголовок рамки задает свойство Caption.
Panel – панель, которая имеет край с двойной фаской.
BevelWidth – ширина каждой фаски в пикселах;
BevelInner – вид внутренней фаски;
BevelOuter – вид внешней фаски;
BorderWidth – промежуток между фасками в пикселах.
ScrollBox – окно с полосами прокрутки для просмотра информации.Align – выравнивание области прокрутки внутри контейнера;
ScrollInView – автоматически изменяет позиции полос прокрутки, чтобы интересующий компонент появился в видимой области.
Frame – контейнер для других компонентов, который на этапе разработки создается как и форма, но может быть размещен в другом контейнере. Ссылка на компоненты Frame осуществляется через имя компонента Frame.
Задание к работе.
Разработать приложение «Тест», в соответствии с вариантом задания. Тест должен содержать 10 вопросов. На каждый вопрос должны быть предусмотрены 3 варианта ответов. По результатам теста проставляется оценка и выводится в информационном окне.
На форме расположить:
- 1 компонент Memo,
- 3 компонента RadioButton,
- 2 компонента BitBtn;
- 1 компонент GroupBox.
Номер вопроса должен выводиться в заголовке GroupBox.Сообщение о полученной оценке должно выводится с помощью функции ввода-вывода ShowMessage, в котором находится сообщение и кнопка OK.

Вариант Задание
1 Тест «Знаете ли Вы историю России?»
2 Тест «Знаете ли Вы Delphi?»
3 Тест «Знаете ли Вы русский язык?»
4 Тест «Любите ли Вы олимпийские игры?»
5 Тест «Хорошо ли Вы знаете новые компьютерные игры?»
6 Тест «Хорошо ли Вы знаете направления музыки?»
7 Тест «Знаете ли Вы названия картин?»
8 Тест «Знаете ли Вы города России?»
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №5
Тема: Использование компонентов для создания главного и вспомогательного меню.
Цель: Приобретение практических навыков разработки приложения с использование компонентов MainMenu, PopupMenu, StringGrid.
Теоретическая часть
В Delphi есть два компонента, используемые для создания меню : MainMenu – главное меню и PopupMenu – контекстное меню.MainMenu - невизуальный компонент. Наиболее важным свойством этого компонерта является свойство Items. Для его заполнения нужно вызвать Menu Designer, которое появляется при двойном щелчке по компоненту MainMenu. Каждый элемент свойства Items – это отдельный пункт меню, который обладает след. Свойствами:
Caption – заголовок пункта меню;
Count – указывает количество элементов;
Dafault – устанавливает данный пункт меню в качестве используемого по умолчанию;
MenuIndex – Вычисляет индекс указанного пункта меню;
ShortCut – позволяет указать «горячую» клавишу для данного пункта меню.
PopupMenu – невизуальный компонент, который в отличие от главного меню, которое постоянно находится на экране, выводится в случае необходимости при нажатии правой кнопки мыши на компонент, с которым оно связано.Для того, чтобы связать это меню с определенным компонентом, используется свойство PopupMenu визуальных компонентов.
StringGrid – позволяет хранить и автоматически отображать текстовую информацию.
Основные свойства
ColCount, RowCount – задают число строк и число столбцов таблицы (нумерация с нуля);
ColWidth, RowHeigth – задают высоту строк и ширину столбцов;
FixedCols,FixedRows – задают число фиксированных строк и столбцов(остаются недвижимыми при прокрутке);
Cells[aCol, aRow] – используется для доступа к отдельной ячейке, aCol – номер столбца, aRow – номер строки;
Cols[index], Row[index] – обеспечивает доступ к любому столбцу и строке таблицы.
Задание к работе:
При выборе 1 пункта на экране должно раскрываться подменю, состоящее из 2 пунктов: «Условие задачи 1», «Решение задачи 1».
При выборе пункта «Условие задачи 1» должна появляться форма, на которой расположены условие и рисунок с соответствующим графиком. При щелчке мышью на рисунке должно появляться всплывающее меню, состоящее из двух пунктов: «Показать рисунок», «Скрыть рисунок». (Рисунок области создать в графическом редакторе Paint и вставить на форму как картинку ).
При выборе пункта «Решение задачи 1» должна появляться форма, на которой производится ввод исходных данных, и вывод полученных результатов.
При выборе 2 пункта на экране должно раскрываться подменю, состоящее из 2 пунктов: «Условие задачи 2», «Решение задачи 2».
При выборе пункта «Условие задачи 2» должна появляться форма, на которой расположены условие задачи.
При выборе пункта «Решение задачи 2» должна появляться форма, на которой должны выводиться таблица значений функции и график заданной функции. (График построить с помощью Excel и вставить на форму как картинку)
При щелчке мышью на таблице должно появляться всплывающее меню, состоящее из 3 пунктов: «Очистить таблицу», «Скрыть таблицу», «Показать таблицу».
При выборе 3 пункта, осуществляется выход на главную форму приложения.
Задание 1.
По заданным координатам точки M (x,y) определить попадает или нет точка М в заштрихованную область.
-1
1
0
1
1
-1
3
0
2
-2
3
-4
3
-1
-3
0
0
-5
-5
1
-1
-1
0
2
2
0

Задание 2.
№ Функция а b N
1 sinx-cosx0 π220
2 sin2x-30 π15
3 sin23x-ππ20
4 cos3x+sinx0 π615
5 -5+tg x-π3π315
6 ctg 3x-cosxπ6π220
7 ln3x-4+22 4 15
8 2x+3-4-3 4 20
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №6
Тема: Использование стандартных диалоговых окон.
Цель работы: приобретение практических навыков разработки приложений с использованием компонентов OpenPictureDialog, FontDialog, ColorDialog, Open Dialog.
Теоретическая часть
В Delphi имеется ряд диалогов для операционной системы Windows.
OpenDialog – компонент представляет собой стандартное диалоговое окно выбора и открытия файлов.OpenPictureDialog – предназначен для открытия графических файлов.Основные свойства:
FileName – содержит имя выбранного файла;
Files – содержит список имен выделенных файлов;
Filter – позволяет задавать фильтр для файлов, которые будут отображаться в диалоговом окне;
InitialDir – позволяет установить начальный каталог поиска в Инспекторе объектов.
FontDialog – предназначен для настройки шрифта и его характеристик.Основные свойства
Font – результат изменения характеристик шрифта;
MaxFontSize – установка максимального размера шрифта;
MinFontSize – установка минимального размера шрифта.
ColorDialog – предоставляет возможность выбора определенного цвета из палитры.Основным свойством является свойство Color - содержит данные о выбранном пользователем цвете.
Задание к работе:
На форме расположить следующие компоненты: Panel, Image, RichEdit, , OpenPictureDialog, FontDialog, Open Dialog, ColorDialog, 3 PopupMenu, BitBtn.
PopupMenu компонента Image должно содержать пункт вызова окна OpenPictureDialog.
PopupMenu компонента RichEdit должно содержать пункты вызова окна FontDialog и Open Dialog.PopupMenu формы должно содержать пункт вызова окна ColorDialogПри выборе изображения с помощью компонента OpenPictureDialog в компоненте Image должно отображаться выбранное изображение, одновременно с этим в компоненте RichEdit должна отображаться информация, соответствующая выбранному изображению. И наоборот, при выборе информационного файла с помощью компонента OpenDialog в компоненте RichEdit должна выводится информация из выбранного файла и одновременно в Image загружаться изображение, соответствующее выбранному текстовому файлу. Кроме того, с помощью ColorDialog должно быть предусмотрено смена цвета формы, а с помощью FontDialog, изменение настроек RichEdit.
Каждый визуальный компонент должен быть снабжен всплывающей подсказкой
Напишите программу, использующую 7 изображений.
Вариант Задание
1 Картинная галерея
2 Автомобили
3 Компьютерные игры
4 Телефоны
5 Семь чудес света
6 Семь чудес России
7 Великие ученые
8 Столицы мира
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.
Лабораторная работа №7
Тема: Использование графических возможностей.
Цель: Приобретение практических навыков разработки приложений с использованием компонентов TChar, TImage, TShape.
Теоретическая часть
Для работы с диаграммами и графика предназначен компонент Char. Работа с данным компонентом осуществляется с помощью редактора Editing Chart. Редактор имеет 5 основных вкладок:
Chart – предоставляет доступ к массиву диаграмм и позволяет настраивать внешний вид панели для их отображения;
Series – применяется для настройки свойств диаграммы;
Data – отображает таблицу данных для построения диаграммы;
Export – позволяет экспортировать график в графический файл формата WMF или BMP;
Print - служит для вывода диаграммы на принтер.
Самым главным свойством компонента Chart является свойство Series[Index] – массив диаграмм, выводимых в области компонента Chart. Это свойство в свою очередь является объектом и обладает набором собственных свойств и методов.
Основные методы объекта Series:
Add – добавляет к диаграмме значение;
Delete – удаляет значение диаграммы;
Clear – выполняет удаление всех значений диаграммы.
Задание к работе:
Разработать интерфейс приложения с применением компонентов TChar, TImage, TShape.
Разработать алгоритм решения задачи в соответствии с вариантом задания.
Реализовать разработанный алгоритм в рамках ранее созданного интерфейса.
Проверить работоспособность с помощью тестового набора данных.
Оформить отчет и сдать работу преподавателю.
Задание 1
Вычислить n значений функции y=f(x) на отрезке [a,b] и построить график функции. Вычисленные значение должны выводиться на форме в компоненте TStringGrid. График построить с помощью компонента TChar.
Вариант Задание Интервал
1 Fx=3x-cosx-1-π2,π22 Fx=3x+2-2,33 Fx=2sinx+3-π3,π4 Fx=ln3x+53,105 Fx=3x3+2x-6-10,106 Fx=5-sinx+2x-2π,π27 Fx=x3+3x-4-6,38 Fx=5-4x-x2-10,5Задание 2
Сгенерировать последовательность случайных чисел с заданным законом распределения и построить диаграмму с помощью компонента TChart. Выбор вида диаграммы (круговая или гистограмма) производить с помощью компонента TRadioButton. Сгенерированные значения выводить в компоненте StringGrid.


Лабораторная работа №8
Тема: «Использование компонентов для работы с файлами и каталогами».
Цель: Приобретение практических навыков разработки приложений с компонентами DriveComboBox, DirectoryListBox, FileListBox.
Теоретическая часть:
Компоненты для работы с файлами и каталогами:
DriveComboBox – представляет собой раскрывающийся список, в котором содержится перечень всех установленных в системе логических дисков и дисковых устройств
Свойства:
Drive – содержит название выбранного логического диска или дискового устройства;
Items – содержит список всех доступных дисковых устройств;
DirList – используется для связи c компонентом DirectoryListBox.
DirectoryListBox – предназначен для отображения дерева каталогов и перемещения по нему
Свойства:
Directory – содержит строку, которая указывает текущий каталог;
FileList – содержит метку на компонент FileListBox.
FileListBox – применяется для просмотра списка файлов, содержащихся в определенном каталоге.Свойства:
Directiry – содержит название просматриваемого каталога;
Items – содержит список файлов выбранного каталога;
FileName – содержит полное имя выбранного файла.
Задание к работе:
Разработать интерфейс приложения с применением компонентов DriveComboBox, DirectoryListBox, FileListBox.
Разработать алгоритм решения задачи в соответствии с вариантом задания
Реализовать разработанный алгоритм в рамках ранее созданного интерфейса.
Проверить работоспособность с помощью тестового набора данных.
Оформить отчет и сдать работу.
Разработать программное приложение, организовывающее с помощью стандартных списков DriveComboBox, DirectoryListBox, FileListBox выбор файлов с заданным расширением (*.doc, *.xls, *.bmp, *.avi, *.wav, *.mid). На форму добавить компонент Image. При перетаскивании имени выбранного файла на компонент Image должна запускаться соответствующая программа (Word, Excel, Paint, универсальный проигрыватель).
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №9
Тема: «Обработка исключительных ситуаций».
Цель: Приобретение практических навыков обработки исключительных ситуаций.
Теоретическая часть
Исключительная ситуация – это нарушение условий выполнения программы, вызывающее прерывание или полное прекращение ее работы. Обработка исключительных ситуаций состоит в нейтрализации динамической ошибки, вызвавшей ее.
Базовым классом для всех исключений является класс Exeption. Объекты данного класса имеют следующие свойства и методы:
Message – описание исключительной ситуации;
HelpContext – номер идентификатора контекстной помощи для объекта исключения;
Create – метод, который служит для создания объекта исключительной ситуации.
Класс Exeption имеет множество потомков, каждый из которых служит для обработки определенный динамической ошибки.
Обработка исключительных ситуаций может происходить по двум направлениям:
Глобальная обработка исключений. Механизм ее реализуется через объект Application. При получении от системы сообщения об исключении объект Applicstion генерирует событие OnExeption. Программист может создать свой глобальный обработчик. С этой целью удобно использовать компонент ApplicationEvents, для которого пишется обработчик события OnExeption/
Локальная обработка исключений. Для обеспечения возможности использования специализированных обработчиков исключений, в состав языка введены две конструкции try… finally и try…exept.
Try
//операторы, выполнение которых может вызвать ошибку
Finally
//операторы, которые должны быть выполнены в случае ошибки
End;
Данная конструкция применяется для выполнения всех необходимых действий перед передачей управления на следующий уровень обработки ошибки или глобальному обработчику. Если в любом из операторов секции try возникает исключительная ситуация, то управление передается первому оператору секции finally для выполнения всех операторов секции. Если исключительная ситуация не возникла, то последовательно выполняются все операторы обеих секций.
Try
//операторы, выполнение которых может вызвать ошибку
Exept//операторы, которые должны быть выполнены в случае ошибки
End;
Эта конструкция применяется для перехвата исключительной ситуации и предоставляет возможность ее обработки. Если в операторах секции try возникла исключительная ситуация, то управление передается первому оператору секции exept. Если исключительная ситуация не возникла, то операторы секции Exept не выполняются. Секция exept может быть разбита на несколько частей конструкциями on…do. Это позволяет анализировать класс исключительной ситуации с целью ее обработки.
При необходимости исключительную ситуацию можно вызвать программно. Для этого используется оператор Raise, выполнение которого приводит к созданию объекта исключения класса Exeption или одного из его потомков. Оператор имеет следующий синтаксис:
Raise ClassExeptio.Metod;
Процесс отладки исключительных ситуаций в Delphi имеет некоторые особенности. По умолчанию при возникновении динамической ошибки Delphi перехватывает исключительную ситуацию и выдает соответствующее сообщение. Если работу приложения надо продолжить, то необходимо выбрать из меню Run команду Run и возникшее исключение будет обработано средствами приложения.
Исключительные ситуации:
EConvertError - происходит в случае возникновения ошибки при выполнении функций StrToInt и StrToFloat, когда конвертация строки в соответствующий числовой тип невозможна.
EIntError - предок исключений, случающихся при выполнении целочисленных операций.
EDivByZero - вызывается в случае деления на ноль, как результат RunTime Error 200.
EIntOverflow - вызывается при попытке выполнения операций, приводящих к переполнению целых переменных, как результат RunTime Error 215 при включенной директиве {$Q+}.
ERangeError - вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}.
EInvalidCast - происходит при попытке приведения переменных одного класса к другому классу, не совместимому с первым (например, приведение переменной типа TListBox к TMemo).
EListError - вызывается при обращении к элементу наследника TList по индексу, выходящему за пределы допустимых значений (например, объект TStringList содержит только 10 строк, а происходит обращение к одиннадцатому).
EMathError - предок исключений, случающихся при выполнении операций с плавающей точкой.
EOverflow - происходит как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует RunTime Error 205.
Underflow - происходит как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует RunTime Error 206.
EZeroDivide - вызывается в результате деления на ноль.
EMenuError - вызывается в случае любых ошибок при работе с пунктами меню для компонент TMenu, TMenuItem, TPopupMenu и их наследников.
Задание к работе:
Вариант Задание
1 Создать программу, позволяющую пользователю ввести два числа, которые программа разделит. Необходимо поместить на форму три объекта класса TEdit - два для операндов, один – для результата и кнопку (объект класса TButton), нажимая на которую пользователь выполняет деление. Исключить попытку деления на ноль а так же введения символов вместо цифр. Выдать сообщение о типе возникшей ошибки.
2 Создать программу, вычисляющую корни квадратного уравнения (ax2+bx+c=0). Необходимо поместить на форму четыре объекта класса TEdit - три для коэффициентов квадратного уравнения, один – для результата и кнопку (объект класса TButton), нажимая на которую пользователь выполняет нахождение корней. Исключить ввод символов вместо цифр, получение отрицательного дискриминанта и ввод а = 0. Вывести при всех типах ошибок одно и то же сообщение.
3 Создать программу с “бесконечным” циклом типа while. В цикле увеличивать переменную I до значения, заданного пользователем. При достижении этого значения выходить из цикла с помощью возбуждения исключения EAbort. Выдать сообщение о выходе из цикла в блоке Except. Необходимо поместить на форму кнопку (объект класса TButton), которая запускает цикл; сообщение можно выдать с помощью функции ShowMessage, или поместить на форму метку (объект класса TLabel), в которую помещается сообщение.
4 Создать программу, вычисляющую тангенс угла. Необходимо поместить в форму два компонента Tedit для ввода значения и результата и кнопку Tbutton для вычисления значения тангенса. Исключить ввод символов вместо цифр и получение значения тангенса угла 90 градусов. Предусмотреть возможность ввода значений в радианах.
5 Создать программу, вычисляющую логарифм числа. Для этого необходимо поместить в форму два компонента Tedit для ввода значения и результата и кнопку Tbutton для вычисления значения логарифма. Исключить ввод символов вместо цифр и получение значения логарифма 0.
6 Создать программу обработки исключения при обращении к несуществующему элементу массива. В форму поместите поля редактирования для ввода – вывода значений и номеров элементов массива и кнопку для обработки события.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Описание входных, промежуточных и результирующих данных с указанием их типа.
Математическая модель задачи.
Схема алгоритма решения задачи по ГОСТу.
Программа на языке программирования.
Результат выполнения программы.
Вывод о проделанной работе.

Лабораторная работа №10
Тема: «Создание справочной системы приложения».
Цель: Приобретение практических навыков разработки справочной системы приложения.
Задание к работе:
Разработать файл тем справок.
Скомпилировать файл справки.
Проверить работоспособность .Оформить отчет и сдать работу.
Ход работы
В текстовом редакторе Word создайте новый документ.
На первой странице по центру напечатайте «Оглавление». Перед словом вставьте сноску “#gl”. Для этого в пункте «Ссылки» на панели «Сноски» нажмите кнопку «Вставить сноску». В открывшемся окне в окне редактирования «Формат/ другой» вставьте символы «#gl». Для того, чтобы перед заголовком не выводился идентификатор заголовка, в сноске «#gl» удалите «gl»
На следующей строке слева наберите «Справка по Delphi». Все выражение подчеркните двойной чертой. Затем без пробела наберите sp (идентификатор данного раздела справочной информации). Выделите sp и в контекстном меню на вкладке Шрифт сделайте данный текст скрытым.
Таким же образом создайте следующие разделы: Проект (pr), Объект (ob), Компоненты (km).
Далее вставьте «Разрыв страницы».
Каждый раздел должен начинаться с новой страницы и заканчиваться разрывом страницы.
Раздел «Справка по Delphi».
По центру наберите «Справка по Delphi». Перед выражением вставьте сноску «#sp». Внизу листа в разделе сносок должна также отражаться сноска «#sp». Для того, чтобы перед заголовком не выводился идентификатор заголовка, в сноске «#sp» удалите «sp». Далее перейдите на новую строку и слева наберите следующий текст: «Delphi – это объектно-ориентированная среда программирования, использующая язык Object Pascal. В основе объектно-ориентированного программирования лежит не действие, а объект. Интегрированная среда разработчика обеспечивает проектирование, запуск и тестирование создаваемого приложения. В Delphi интегрированная среда разработчика содержит редактор кодов, отладчик, редактор изображений, наборы инструментов для работы с базами данных и т.д.»
Слово «объект» в данном тексте подчеркните двойной чертой и без пробела укажите скрытый текст «ob».
Раздел «Проект». Также как и в предыдущем пункте создайте заголовок со сноской с идентификатором.
Ниже разместите текст: «Проект – это совокупность различных файлов, необходимых для построения приложений.». После этого перечислите все файлы проекта.
Раздел «Объект».
Также как и в предыдущем пункте создайте заголовок со сноской с идентификатором.
Ниже разместите текст: «Объект – это совокупность свойств и методов, а также событий на которые он реагирует. Совокупность данных и методов чтения, записи называется свойством. Также у каждого объекта существует свой набор событий, то есть набор процедур и функций, реализовывающих какое-либо действие с объектом »
Раздел «Компоненты»
В этом разделе перечислите и создайте ссылки на соответствующие группы визуальных компонентов.
После создания файла тем справок сохраните полученный документ с расширением rtf.
Для компиляции его в help-файл из папки Delphi/Help/Tools запустите приложение HCW.exe. Выберете команду File-New-Help Project. Далее укажите имя файла справки с расширением .hjp. В открывшемся окне нажмите кнопку Files-Add и укажите путь и созданный файл rtf. Далее в главном окне нажмите на кнопку Windows и на вкладке General в окне Window Type укажите main, также можно указать размеры окна файла справки и цвет внося изменения на вкладках Position и Color. Далее в главном окне нажмите кнопку Map и присвойте каждому разделу номер. После этого в главном окне нажмите кнопку Save and Compile. После чего в папке указанной ранее будет отражаться файл с расширением HLP.
Откройте свое приложение в Delphi. Свяжите созданный файл справки с приложением для этого выберете Project-Options-Application и выберете файл в окне Help file.
В свойстве HelpContext Form1 укажите номер самой первой темы. При запуске приложения при нажатии клавиши F1 должна отразиться созданная вами справка.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Результаты работы программы.
Вывод о проделанной работе.

Лабораторная работа №11
Тема: «Создание псевдонима базы данных. Работа с полями набора данных».
Цель: Приобретение практических навыков создания программных приложений с использованием баз данных.
Задание к работе:
Разработать интерфейс.
Разработать алгоритм решения задачи.
Проверить работоспособность .Оформить отчет и сдать работу.
Разработать базу данных для отдела кадров, содержащую следующую информацию о сотруднике: фамилия, имя, отчество, пол, семейное положение, количество детей, дата рождения, дата поступления, стаж, образование (полное среднее, неполное среднее, высшее техническое и т.д.), военнообязанный, место жительства телефон, отдел, должность.Ход работы
Создать в базе данных MS Access следующие таблицы
Таблица 1 - LichDataПоле Идентификатор Тип данных Дополнительные характеристики
Идентификационный номер ID числовой Ключевое поле
Фамилия Famтекстовый 25 символов, индексированное (совпадения допускаются)
Имя Imтекстовый 25 символов, индексированное (совпадения допускаются)
Отчество Otтекстовый 25 символов.
Пол Polтекстовый 3 символа, формат «муж/жен»
Семейное положение Sem_pлогический Формат «да/нет»
Дети Detiчисловой Байт
Дата рождения Dtrдата/время Краткая форма даты, маска «00.00.0000»
Дата поступления Dtpдата/время Краткая форма даты, маска «00.00.0000»
Стаж Stag числовой Байт
Образование Obrazтекстовый 30 символов
Военнообязанный VObлогический Формат «Да/Нет»
Таблица 2 – Telephones
Поле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotrчисловой Длинное целое. Не ключевое
Телефон Tel текстовый 17 символов, маска #(###)-###-##-##,Примечание Prim текстовый 10 символов, формат «Рабочий/домашний/мобильный»
Таблица 3 – DoljnostПоле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotrчисловой Длинное целое. Не ключевое
Отдел Otdelтекстовый 15 символов
Должность Doljnтекстовый 20 символов
Таблица 4 – AdresПоле Идентификатор Тип данных Дополнительные характеристики
Сотрудник Sotrчисловой Длинное целое. Не ключевое
Страна Stranaтекстовый 15 символов
Город Gorodтекстовый 20 символов
Домашний адрес Dom_adrтекстовый 100 символов
Создаем псевдоним базы данных
Открываем Пуск-Все программы-Borland Delphi 7-BDE Administrator
В меню Object выбираем ODBC Administrator

В открывшемся окне нажимаем на кнопку «Добавить» и выбираем драйвер

В открывшемся окне в «Имя источника данных» указать псевдоним, далее добавить базу данных нажатием кнопки «Добавить». После этого нажать «OK».
Запустите Delphi 7
Создайте модуль данных( File-New-Data Module). Переименуйте его в DM.
В модуль данных добавьте c вкладки BDE: компонент DataBase и 4 компонента Table; с вкладки Data Access: 4 компонента DataSource.
Подключим базу данных к приложению. Для этого изменим свойства у компонента DataBase1.
В AliasName выберите из списка псевдоним вашей БД. В DataBaseName укажите Otdel (Это имя будет использовать приложение для обращения к бд). Установите False в Login Prompt, чтобы приложение не запрашивало пароль при подключении БД. Далее установите True в свойстве Connected.
Далее выделите 4 компонента Table и в свойстве DateBaseName выберете OtdelВыберете компонент Table1. Переименуйте его, указав в свойстве Name TLichData. В свойстве TableName выберете из списка таблицу LichData.
Проделайте те же действия с 3 другими компонентами Table.
Далее выберете компонент DataSource1. Переименуйте в DSLichData и в свойстве DataSet выберете TLichData.
Выполните те же действия с 3 другими компонентами Data Source.
Теперь между таблицами установим связь.
Выделите модуль данных. Щелкните дважды по первой таблице, чтобы открыть редактор полей. Правой кнопкой щелкните по этому редактору и выберете команду Add all fields. В редакторе полей появятся все поля таблицы. Редактор полей предназначен для настройки параметров каждого поля, для добавления новых полей или удаления имеющихся. В редакторе для каждого поля мы можем изменить различные параметры.
В таблице LichData скроем поле ID для этого выделите это поле, и в свойстве Visible установите False. Теперь для пользователя это поле будет невидимым. Выберете поле Sem_p, в свойстве DisplayValues присвойте значение «Женат; холост». Для поля VOb в этом же свойстве укажите «Да;Нет». Для полей типа Дата в свойстве MaskEdit введите маску «##.##.####».
Таким же образом добавьте поля в остальные 3 таблицы. У них невидимым следует сделать поле «Sotr». Для поля «Tel» таблицы Telephones следует изменить свойство EditMask. Открыв редактор маски введите маску «#(###)-###-##-##» и сохраните ее.
Далее кнопкой F12 перейдите в редактор кода. Перейдите на вкладку Diagram, расположенную в нижней части окна. Для начала в окно диаграмм нужно добавить наши таблицы. Перетащите их в окно диаграмм из Object TreeView. Таблицы вместе с полями должны отобразиться в окне. Установим связи. Для этого нажмите кнопку Master/Detail Connector, расположенную в верхней части окна. Подведите указатель мыши к боковой границе главной таблицы, нажмите левую кнопку и, удерживая ее, проведите линию к боковой границе другой таблицы. Как только вы отпустите кнопку, появится окно связей. В поле Detail Fields выберете поле по которому осуществляется связь (поле «Sotr»). В поле Master Fields выбираем ключевое поле (ID). Затем нажимаем кнопку ADD и кнопку OK. Связь установлена. Установите связи со всеми таблицами.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Вывод о проделанной работе.

Лабораторная работа №12
Тема: « Работа с таблицами. Навигация по набору данных».
Цель: Приобретение практических навыков создания программных приложений с использованием баз данных.
Задание к работе:
Создайте форму следующего вида.

Поместите три обычных панели. Свойству Align верхней панели присвойте значение alTop (весь верх). Затем свойству Align нижней панели присвойте значение alBottom. Затем поместите компонент Splitter с вкладки Additional панели инструментов, и его свойству Align также присвойте alBottom, после чего он прижмется к нижней панели. Splitter - это разделитель между панелями. С его помощью пользователь мышью сможет передвигать нижнюю панель, меняя ее размеры. И, наконец, свойству Align средней панели присвойте значение alClient, чтобы она заняла все оставшееся место на форме. Не забудьте очистить свойство Caption всех трех панелей.
Далее на верхнюю панель поместите три компонента RadioButton с вкладки Standard палитры компонентов. В их свойствах Caption напишите, соответственно, "Адрес", "Телефоны" и "Должность". Переключаясь между ними, пользователь сможет выводить в нижнюю, подчиненную сетку DBGrid нужные данные. Свойству Checked первой радиокнопки присвойте значение True, чтобы включить ее. Раздел с переключателями разделите компонентом Bevel с вкладки Additional палитры компонентов. Его ширину (свойство Width) сделайте равным 2 пикселям, превратив его в вертикальную разделительную полосу.
Далее сделайте раздел поиска, поместив в него обычные Label, Edit и кнопку BitBtn. Этот раздел понадобиться позже.
В последнем разделе верхней панели находятся еще две кнопки BitBtn. Одна из них предназначена для редактирования текущей записи, другая - для добавления новой.
Вторая и третья панели содержат только по одному компоненту DBGrid из вкладки DataControls палитры компонентов, свойствам Align которых присвоено значение alClient.
Подключите модуль данных нажатием File-Use Unit.
Во всех таблицах в свойстве Active установите True.
Выделите верхнюю сетку DBGrid, в ее свойстве DataSource выберите DM.DSLichData. В таком же свойстве нижней сетки выберите DM.DSAdres. Сетки среагировали, и вы можете видеть названия полей. Разумеется, таблица еще пуста, данных пока нет. Кстати, выделите обе сетки, и установите в True их свойства ReadOnly - только чтение. Таблицы ведь будут связаны, и нам не нужно, чтобы пользователь вводил данные фрагментарно. Мы для этого сделаем отдельную форму, а эти сетки нужны только для просмотра.
Теперь нужно сделать окно редактора данных. Создайте новую форму (File -> New -> Form). Ее свойство. Командой File -> Use Unit подключите к форме модуль данных DM. Теперь нам нужно установить на форму такие компоненты:

Установите на форму четыре панели GroupBox с вкладки Standard, на каждую таблицу свой GroupBox.
Для таблицы LichData: в свойстве Caption компонента GroupBox1 впишите "Личные данные", это название отразится в заголовке панели. Далее на эту панель следует установить девять компонентов DBEdit с вкладки DataControls палитры компонентов, два DBCheckBox для редактирования логических данных, и один компонент DBComboBox для списка. Поясняющие компоненты Label установите и настройте самостоятельно. DBComboBox. Щелкните дважды по свойству Items компонента DBComboBox, открыв редактор. В нем введите две строки:
муж
жен
Сохраните текст, нажав кнопку ОК. Теперь пользователь сможет указать пол сотрудника, выбрав нужную строку из списка.
Для таблицы Doljnost: на панели GroupBox установите два компонента DBEdit и два поясняющих Label.
Для таблицы Adres используйте три DBEdit.
А для таблицы Telephones понадобится один DBEdit, один DBComboBox, сетка DBGrid и кнопка BitBtn. Сетка нужна для контроля введенных телефонов, ведь здесь связь один-ко-многим, и телефонов может быть несколько. В редакторе Items компонента DBComboBox введите три строки:
Рабочий
Домашний
Мобильный
Теперь займемся подключением компонентов контроля. Удерживая <Shift>, выделите все компоненты контроля на первой панели (все компоненты, кроме Label). В их свойстве DataSource выберите DM.DSLichData, подключив компоненты к нужному набору данных (таблице). Снимите общее выделение, и выделите первый DBEdit. В его свойстве DataField выберите поле "Фамилия". Это свойство подключает выбранный компонент к определенному полю таблицы. Таким же образом подключите к соответствующим полям остальные компоненты. Затем подключайте компоненты других таблиц, каждое к своей таблице и к соответствующему полю. Сетка DBGrid подключается к DM.DSTelephones, она отображает все видимые поля таблицы.
В правой нижней части для удобства пользователя установите навигационный компонент DBNavigator с вкладки Data Controls. В его свойстве DataSource установите DM.DSLichData, чтобы подключить компонент к главной таблице. В свойстве VisibleButtons переведите в False все кнопки, кроме nbFirst, nbPrior, nbNext и nbLast. Нажатие на эти кнопки приведет к вызову соответствующих методов компонента.
Для сохранения информации после ввода информации в первой таблице при переходе к следующей необходимо прописать процедуру. Для этого выделите первый GroupBox, и дважды щелкните по событию onExit на вкладке Events инспектора объектов. Это событие происходит всякий раз, когда пользователь перейдет к другой панели GroupBox, либо к кнопкам, расположенным в нижней части окна. В сгенерированной процедуре впишите код:
begin if DM.TLichData.Modified then
DM.TLichData.Post;
end;
Сгенерируйте событие onExit для оставшихся панелей GroupBox и таким же образом сохраните изменения записей в соответствующих таблицах.
Далее сгенерируйте событие нажатия на кнопку "Добавить" в GroupBox с телефонными данными. Этой кнопкой мы будем добавлять новые записи в таблицу, ведь один сотрудник может иметь более одного телефона. Код в процедуре будет такой:
if DM.TTelephones.Modified then
DM.TTelephones.Post;
DM.TTelephones.Append;
DBEdit14.SetFocus;
Вначале мы сохраняем измененные значения, если они были. Затем методом Append мы добавляем в таблицу новую запись.
После добавления новой записи таблица уже будет в режиме редактирования, поэтому можно не вызывать метод Edit, который переводит таблицу в этот режим. Далее мы переводит фокус ввода на DBEdit с телефонными номерами, чтобы пользователю не пришлось делать это самому.
В процедуре нажатия на кнопку "Сохранить и выйти" код простой:
if dm.TLichData.Modified then
dm.TLichData.Post;
if DM.TDoljnost.Modified then
begindm.TDoljnost.FieldByName('sotr').AsInteger:=DBEdit15.Field.AsInteger;
dm.TDoljnost.Post;
end;
if DM.TAdres.Modified then
begindm.TAdres.FieldByName('sotr').AsInteger:=DBEdit15.Field.AsInteger;
dm.TAdres.Post;
end;
if DM.TTelephones.Modified then
begindm.TTelephones.FieldByName('sotr').AsInteger:=DBEdit15.Field.AsInteger;
dm.TTelephones.Post;
end;
Form3.Close;
Здесь мы лишь сохраняем изменения во всех таблицах, если они были, и закрываем окно. Напоследок у нас осталась кнопка "Добавить сотрудника". Добавить новую запись в каждую таблицу и перевести курсор в первый DBEdit, в котором редактируется фамилия. Это и делаем:
procedure TForm3.BitBtn3Click(Sender: TObject);
vark:integer;
begink:=0;
dm.TLichData.Open;
while not dm.TLichData.Eof do
begink:=dm.TLichData.FieldByName('ID').AsInteger;
dm.TLichData.Next;
end;
if k=0 then k:=1
else k:=k+1;
dm.TLichData.Append;
dm.TLichData.FieldByName('ID').AsInteger:=k;
dm.TDoljnost.Append;
dm.TAdres.Append;
dm.TTelephones.Append;
DBEdit1.SetFocus;
end;
Откройте предыдущую форму и пропишите процедуру нажатия на кнопку "Новый сотрудник". Как и в предыдущем примере, нам потребуется добавить новую запись в каждую таблицу, после чего открыть окно редактора:
procedure TForm1.BitBtn3Click(Sender: TObject);
vark:integer;
begink:=0;
dm.TLichData.Open;
while not dm.TLichData.Eof do
begink:=dm.TLichData.FieldByName('ID').AsInteger;
dm.TLichData.Next;
end;
if k=0 then k:=1
else k:=k+1;
dm.TLichData.Append;
dm.TLichData.FieldByName('ID').AsInteger:=k;
dm.TAdres.Append;
dm.TDoljnost.Append;
dm.TTelephones.Append;
Form3.Show;
end;
Сгенерируйте процедуру onClick для кнопки "Редактировать". Тут будет лишь одна строчка кода:
Form3.ShowModal;
Пропишем также редактирование информации на двойной щелчок по записи в верхней сетке DBGrid. Поэтому выделите сетку с главной таблицей и сгенерируйте для нее событие onDBLClick. Там введите такую же строчку кода как и в 15 пункте.
По нашему замыслу, при открытии программы в верхней сетке DBGrid будут отображаться данные из главной таблицы, а в нижней - из таблицы Adres. Также будет выделена радиокнопка с надписью "Адрес". Если пользователю захочется посмотреть должность или телефоны текущего сотрудника, он будет щелкать соответствующую радиокнопку, и эти данные должны быть отображены в нижней DBGrid. Выделите первую радиокнопку с надписью "Адрес" и сгенерируйте для нее событие onClick, которое будет возникать, когда пользователь щелкнет по ней. В процедуре этого события впишите следующий код:
if RadioButton1.Checked then DBGrid2.DataSource := DM.DSAdres;
Для события onClick радиокнопки с надписью "Телефоны" код будет таким:
if RadioButton2.Checked then
DBGrid2.DataSource := DM.DSTelephones;
А для события onClick радиокнопки с надписью "Должность", соответственно, код будет следующим:
if RadioButton3.Checked then
DBGrid2.DataSource := DM.DSDoljnost;
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Текст программы.
Вывод о проделанной работе.

Лабораторная работа №13
Тема: «Осуществление поиска и фильтрации набора данных».
Цель: Ознакомление с механизмами поиска данных, фильтрации записей.
Теоретическая часть
Метод LocateМетод Locate ищет первую запись, удовлетворяющую условию поиска. Если запись найдена, метод делает ее текущей и возвращает True. В противном случае метод возвращает False и курсор не меняет положения. Поле, по которому ведется поиск, не обязательно должно быть индексировано. Однако если поле индексировано, то метод ищет запись по индексу, что значительно ускоряет поиск. Поиск может вестись как по одному полю, так и по нескольким полям. Метод имеет три параметра:
function Locate (const KeyFields: String; const KeyValues: Variant;
Options: TLocateOptions) : Boolean;
Параметр KeyFields задает поле или список полей, по которым ведется поиск. Если имеется несколько полей, их разделяют точкой с запятой.
Параметр KeyValues является вариантным массивом, в котором задаются критерии поиска. При этом первое значение KeyValues ставится в соответствие с первым полем, указанным в KeyFields. Второе - со вторым, и так далее.
Третий параметр Options позволяет задать некоторые опции поиска:
loCaseInsensitive - поиск ведется без учета высоты букв, то есть, считаются одинаковыми строки "строка", "Строка" или "СТРОКА".
loPartialKey - запись будет удовлетворять условию, если ее часть содержит искомый текст. То есть, если мы ищем "ст", то удовлетворять условию будут "строка", "станция", "стажер" и т.п. Пустой набор [] указывает, что настройки поиска игнорируются. То есть, строка ищется "как есть".
Примеры использования метода Locate:
Table1.Locate('Фамилия', Edit1.Text, []);
Table1.Locate('Фамилия;Имя',
VarArrayOf(['Иванов', 'Иван']), [loCaseInsensitive]);
Метод LookupМетод Lookup, в отличие от Locate, не меняет положение курсора в таблице. Вместо этого он возвращает значения некоторых ее полей. Причем в отличие от Locate, этот метод осуществляет поиск лишь на точное соответствие. Такой способ поиска востребован реже, однако в иных случаях этим методом очень удобно пользоваться. Рассмотрим синтаксис этого метода.
function Lookup (const KeyFields: String;
const KeyValues: Variant;
const ResultFields: String) : Variant;
Как вы видите, первые два параметра такие же, как у Locate. А вот третий параметр и возвращаемое значение отличаются. В строке ResultFields через точку с запятой перечисляются поля таблицы, значения которых метод должен вернуть. Возвращаются эти значения в виде вариантного массива. Проблема в том, что вернуться может значение Null, то есть, ничего, или Empty (пустой) и это нужно проверять.
Фильтрация данных
Фильтрацию данных применяют не реже а, пожалуй, даже чаще, чем поиск. Разница в том, что при поиске данных пользователь видит все записи таблицы, при этом курсор либо переходит к искомой записи, либо он получает данные этой записи в виде результата работы функции. При фильтрации дело обстоит иначе. Пользователь в результате видит только те записи, которые удовлетворяют условиям фильтра, остальные записи становятся скрытыми. Конечно, таким образом искать нужные данные проще. Можно указать в условиях фильтра, что требуется вывести всех сотрудников, чья фамилия начинается на "И". Пользователь увидит только их. Воспользуемся событием onFilterRecordЭто событие возникает при установке значения True в свойстве Filtered. Применение этого способа имеет большой плюс, и большой минус. Плюс в том что, сгенерировав это событие, программист получает возможность задать гораздо более сложные условия фильтрации. Минус же заключается в том, что проверка заключается перебором всех записей таблицы. Если таблица содержит очень много записей, процесс фильтрации может затянуться.
В событие передаются два параметра. Первый параметр - набор данных DataSet. С ним можно обращаться, как с именем фильтруемой таблицы. Второй параметр - логическая переменная Accept. Этой переменной нужно передавать результат условия фильтра. Если условие возвращает False, то запись не принимается, и не будет отображаться. Соответственно, если возвращается True, то запись принимается.
Задание к работе:
Откройте проект. Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Процедуру поиска реализуем в этом модуле, а чтобы с ней можно было работать из других форм, опишем ее в разделе public:
public procedure MLocate(s: string);
В процедуру передается параметр - строка. В ней мы будем передавать искомую фамилию.
В процедуру пропишите следующий код:
procedure TDM.MLocate(s: string);
beginTLichdata.Locate('Fam',s,[loPartialKey]);
end;
Таким образом, при нахождении подходящей записи курсор будет перемещаться к ней.
На главной форме выделите компонент Edit, предназначенный для поиска по фамилии. Создайте для него событие onChange, которое наступает при изменении текста в поле компонента. В созданной процедуре пропишите вызов поиска:
procedure TForm1.Edit1Change(Sender: TObject);
beginDM.MLocate(Edit1.Text);
end;
Далее организуем поиск методом Lookup.
Для поиска воспользуемся кнопкой с надписью "Найти", расположенной в верхней части главной формы. Идея такова: пользователь вводит в поле Edit1 какую то фамилию и нажимает кнопку "Найти". Событие onClick этой кнопки собирает в строковую переменную значения четырех указанных полей найденной записи. Причем после каждого значения в строку добавляется символ "#13" (переход на новую строку), формируя многострочный отчет. Затем эту строку мы выведем на экран функцией ShowMessage().
Для этого сгенерируем событие onClick по кнопке «Найти».
procedure TForm1.BitBtn1Click(Sender: TObject);
varmlookup:variant;
s: string;
begin mlookup:=dm.TLichData.Lookup('Fam',edit1.Text,'Fam;im;ot;Obraz');
if varType(mlookup)=varnull then
showmessage('Сотрудник с такой фамилией не найден')
else if vartype (mlookup)= varEmpty then
showmessage('Запись не найдена')
else if varisarray(mlookup) then begin
s:=mlookup[0]+#13+mlookup[1]+#13+ mlookup[2]+#13+
mlookup[3];
showmessage(s);
end;
end;
Помимо поиска организуем фильтрацию.
Добавьте компонент Edit2 на главную форму.
Перейдите к модулю данных и создайте глобальную переменную Ed.
var DM: TDM;
ed:string;
Далее выделите TLichData. На вкладке Events (События) инспектора объектов найдите событие onFilterRecord и дважды щелкните по нему, сгенерировав процедуру.
В процедуре запишите следующий код:
procedure TDM.TLichDataFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
vars:string;
begin s:=Copy (DataSet['Fam'],1,length(ed));
accept:=s=ed;
end;
Перейдите на главную форму и сгенерируйте событие onChange компонента Edit2
procedure TForm1.Edit2Change(Sender: TObject);
beginif Edit2.text<>' ' then begin
DM.TLichData.Filtered:=False;
ed:=Edit2.text;
dm.TLichData.Filtered:=True;
end else dm.TLichData.Filtered:=false;
end;
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Интерфейс приложения
Текст программы.
Вывод о проделанной работе.

Лабораторная работа №14
Тема: «Поиск данных с помощью статических и динамических запросов».
Цель: приобретение практических навыков создания программ, позволяющих выполнять поиск записей в базе данных с помощью компонента TQuery.
Задание к работе:
Откройте проект. Создайте 4 форму. На первой форме создайте кнопку «Расширенный поиск», открывающую форму 4.
Осуществим поиск адреса сотрудников по введенному городу. Для этого на форму 4 поместим компоненты 2 Label,Edit, Button, DBGrid
Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Добавьте в модуль компонент Query и DataSource.
Переименуйте их в QAdres и DSQAdres соответственно.
У компонента QAdres выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource (ссылается на компонент TDataSource, из набора данных которого задаются значения параметров).
У компонента DSQAdres в свойстве Data Set QAdres.
У компонента DBGrid в свойстве DataSource укажите DM.DSQAdres.
Далее пропишите процедуру нажатия кнопки
procedure TForm4.Button1Click(Sender: TObject);
begin DM.QAdres.Close;
DM.QAdres.SQL.Clear;
DM.QAdres.SQL.Add('SELECT Fam,Im,Ot,Gorod,Dom_adr');
DM.QAdres.SQL.Add('FROM LichData,Adres ');
DM.QAdres.SQL.Add('Where (Adres.gorod='+QuotedSTR(Edit1.Text)+')');
DM.QAdres.SQL.Add('AND(LichData.ID=Adres.Sotr)');
DM.QAdres.Open;
end;
Осуществим расчет среднего стажа всех сотрудников и разобьем эти данные по отделам. Для этого будем использовать агрегатную функцию AVG.
На форму 4 добавим компоненты label, button, DBGrid.

Перейдите на модуль DM, где хранятся компоненты доступа к базе данных. Добавьте в модуль компонент Query и DataSource.
Переименуйте их в QStag и DSQStag соответственно.
У компонента QStag выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource. В свойстве SQL укажите следующие команды

У компонента DSQStag в свойстве Data Set QStag.
У компонента DBGrid в свойстве DataSource укажите DM.DSQStag.
Далее пропишите процедуру нажатия кнопки
procedure TForm4.Button2Click(Sender: TObject);
beginDM.QStag.Close;
DM.QStag.Open;
end;
Осуществим поиск сотрудников по введенной должности и стаж работы которых находится введенных пределах.
Для этого на форму 4 добавим 3 компонента Edit, 1 Button, 5 Label b 1 DBGrid
Перейдите на модуль DM. Добавьте в модуль компонент Query и DataSource.
Переименуйте их в QDoljn и DSQDoljn соответственно.
У компонента QDoljn выберете псевдоним Otdel в свойстве DataBase Name и DSLichData в свойстве DataSource.
У компонента DSQDoljn в свойстве Data Set QDoljn.
У компонента DBGrid в свойстве DataSource укажите DM.DSQDoljn.
Далее пропишите процедуру нажатия кнопки
procedure TForm4.Button3Click(Sender: TObject);
begin DM.QDoljn.Close;
DM.QDoljn.SQL.Clear;
DM.QDoljn.SQL.Add('SELECT Fam,Im,Ot,Doljn,Otdel');
DM.QDoljn.SQL.Add('FROM LichData,Doljnost ');
DM.QDoljn.SQL.Add('Where (Doljnost.doljn='+QuotedSTR(Edit2.Text)+')');
DM.QDoljn.SQL.Add('AND(LichData.ID=Doljnost.Sotr)');
DM.QDoljn.SQL.Add('AND (lichdata.stag BETWEEN '+ Edit3.Text+' AND '+ Edit4.Text+')');
DM.QDoljn.Open;
end;
Создайте еще один динамический или статический запрос на ваше усмотрение
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Интерфейс приложения
Текст программы.
Вывод о проделанной работе.

Лабораторная работа №15
Тема: «Создание отчета».
Цель: приобретение практических навыков создания приложений, позволяющих выполнять просмотр и печать отчетов с помощью Quick Report.
Задание к работе:
Откройте проект. Если пакет Quick Report еще не установлен (на палитре компонентов отсутствует вкладка QReport), то загрузите Delphi и закройте все открытые проекты (File -> Close All).
Выбрерите пункт меню "Component -> Install Packages".
Нажмите кнопку "Add" и выберите пакет "dclqrt70.bpl", который по умолчанию устанавливается по адресу: c:\Program Files\Borland\Delphi7\bin\dclqrt70.bpl
Нажмите кнопку "Открыть". Далее, нажмите кнопку "ОК" - пакет компонентов Quick Report установится, и его вкладка будет самой последней на Палитре компонентов. При желании можно перетащить ее мышью на другое место, поближе к началу.
На главной форме установите компонент Main Menu и создайте разделы
Раздел Подраздел
Файл Выход
Отчеты Кадры, по телефонам, по адресам
Создайте новую форму и подключите к ней модуль данных.
Установите QuickRep на новую форму, и он примет вид разлинованного листа.
Выделите QuickRep и обратите внимание на его свойства. В самом верху находится свойство Bands (Ленты, полосы - англ.). Это раскрывающееся свойство, оно содержит шесть параметров. Щелкните по плюсу слева от свойства, чтобы раскрыть его. По умолчанию, все параметры имеют значение False, то есть, не установлены. Если какой-либо параметр перевести в значение True, на холсте появится соответствующая полоса. Попробуйте установить все параметры. Разберемся с их назначением.
HasColumnHeader - Заголовки колонок. Здесь мы будем вписывать названия колонок таблицы.
HasDetail - Детальная информация. На этой ленте формируются строки таблицы.
HasPageFooter - Подвал (нижний колонтитул). Здесь можно установить информацию, которая будет появляться в нижней части каждой страницы.
HasPageHeader - Шапка (верхний колонтитул). Здесь можно установить информацию, которая будет появляться в верхней части каждой страницы.
HasSummary - Суммарная информация. Содержимое этой полосы печатается один раз в самом конце отчета.
HasTitle - Заголовок отчета.
Переведите в True полосы HasPageHeader, HasTitle, HasColumnHeader, HasDetail и HasPageFooter. Не установленной останется только полоса HasSummary. Если вы дважды щелкните мышью по свободному месту холста, появится настроечное окно:

В этом окне можно выполнить большинство настроек, причем в Инспекторе объектов соответствующие свойства будут изменены автоматически. Как видите, установленные нами полосы отмечены "галочкой" в разделе Bands окна. Выше располагается раздел Page frame, в котором можно задать обрамление для верхней (Top), нижней (Bottom), левой (Left) и правой (Right) границ холста, а также изменить цвет и ширину обрамления. Те же действия можно выполнить в Инспекторе объектов с помощью параметров раскрывающегося свойства Frame(пока открыто окно настроек, менять свойства в Инспекторе Объектов не получится).
Еще выше располагается раздел Other, где можно установить общие данные для холста - шрифт, размер шрифта и единицы измерения (по умолчанию mm - миллиметры). В Инспекторе объектов за это отвечают свойства Font и Units.
Далее находится раздел Margins (Границы, края), где можно задать расстояния от краев листа до рабочей части холста. На самом верху окна располагается раздел Paper size (Размер бумаги), где задаются тип листа и его размеры. Данные этих двух разделов можно изменить в Инспекторе объектов в раскрывающем свойстве Page.
Еще следует обратить внимание на свойство Options, которое имеет три параметра:
FirstPageHeader - Разрешает печать заголовков (шапку) первой страницы, если равно True.
LastPageFooter - Разрешает печать подвала последней страницы, если равно True.
Compression - Разрешает сжатие отчета при формировании из него метафайла (отчет представляет собой изображение), если равно True.
Свойство PrintIfEmpty разрешает (True) или запрещает (False) печатать отчет, если в нем нет никаких данных.
Свойство ShowProgress разрешает или запрещает показывать индикатор процесса печати отчета. По умолчанию индикатор разрешен.
Свойство SnapToGrid разрешает или запрещает привязывание компонентов к сетке. По умолчанию привязка разрешена.
Свойство Zoom имеет тип Integer и позволяет изменить масштаб отображения отчета при его разработке. Значение 100 указывает, что отчет показывается в 100% от листа бумаги. Изменение этого свойства не влияет на масштаб печати отчета или его предварительного просмотра.
Теперь приступим к формированию отчета. На холсте у нас уже должны быть расположены пять полос. Теперь мы можем на эти полосы устанавливать другие компоненты. На самом верху холста находится полоса Page Header, которая, как мы уже знаем, является верхним колонтитулом. Установите в левой части этой полосы компонент QRSysData - компонент с различного рода системной информацией. Нас интересует свойство Data этого компонента. Data содержит несколько свойств, формирующих отображаемую информацию. Разберем эти свойства.
qrsDate (Вывод текущей даты)
qrsDateTime (Вывод текущих даты и времени)
qrsDetailCount (Количество строк формируемой таблицы)
qrsDetailNo (Номер текущей строки таблицы)
qrsPageNumber (Номер текущей страницы отчета)
qrsReportTitle (Заголовок отчета)
qrsTime (Вывод текущего времени)
Установим для этого свойства значение qrsDateTime, чтобы пользователь мог видеть, когда был сформирован отчет. Далее выделим всю полосу Page Header и в свойстве Frame переведем в True параметр DrawBottom. Это свойство позволяет задать обрамление выделенной полосе, а параметр DrawBottom рисует линию в нижней части полосы. То есть, мы визуально отделили колонтитул от данных листа.
В нижней части холста располагается полоса Page Footer (подвал). Здесь желательно установить верхнюю линию в свойстве Frame, отделив от данных нижний колонтитул. А по центру полосы установить еще один компонент QRSysData, установив свойство Data в значение qrsPageNumber. Этот компонент будет выводить номер текущей страницы в нижней части листа.
Напишем заголовок отчета. Для этого установите компонент QRLabel в центре полосы Title. В его свойстве Caption напишите "Отчет по кадрам". Чтобы заголовок был красивым, щелкните дважды по свойству Font, чтобы открылось окно шрифта. Здесь установите шрифт Times New Roman, начертание выберите жирное, а размер шрифта пусть будет 18.
Далее займемся полосой Column Header (Заголовки колонок). Здесь установите рядом пять компонентов QRLabel, в свойстве Caption которых напишите
Фамилия
Имя
Отчество
Дата рождения
Образование
Это будут названия колонок таблицы. Шрифт этих компонентов также желательно сделать крупнее, но не больше заголовка.
Далее займемся полосой Detail, на которой, собственно, и будет формироваться таблица. Здесь нам нужно будет в самом крайнем положении слева установить компонент QRSysData, в свойстве Data которого выбрать qrsDetailNo - перед каждой строкой будет выходить ее номер. Далее установите пять компонентов QRDBText, в которых будут отражаться данные из соответствующих полей таблицы. Эти компоненты соответствуют обычному DBText, с которым мы неоднократно сталкивались. Расположите их точно под названиями столбцов, чтобы таблица была красивой. При этом может оказаться, что компонент QRSysData "наплывает" на QRDBText - ничего страшного, данные все равно не будут мешать друг другу. Выделите все QRDBText, и в их свойстве DataSet выберите нашу таблицу fDM.TLichData, затем поочередно в свойстве DataField этих компонентов выберите соответствующие поля таблицы:
FamImOtDtrObrazКроме того, сам компонент QuickRep1, который является "холстом" отчета, также должен знать, из какой таблицы ему нужно брать данные. Поэтому выделите его, и в свойстве DataSet также выберите нашу таблицу DM.TLichData. Если этого не сделать, то в отчете будет выходить лишь текущая запись таблицы, а не все ее записи.
Вернитесь в главное окно проекта и сгенерируйте обработку команды меню "Отчеты - Кадры".
procedure TForm1.N5Click(Sender: TObject);
beginform5.QuickRep1.PreviewModal;
end;
На вкладке QReport имеется компонент QRShape, который позволяет рисовать простейшие линии и фигуры. Он имеет свойство Shape, в котором можно задать нужную фигуру. Возможные значения этого свойства:
qrsCircle (Круг)
qrsHorLine (Горизонтальная линия)
qrsRectangle (Прямоугольник)
qrsRightAndLeft (Прямоугольник с очерченными левым и правым краями)
qrsTopAndBottom (Прямоугольник с очерченными верхним и нижним краями)
qrsVertLine (Вертикальная линия)
Этот компонент можно использовать по-разному. Например, можно установить по одной горизонтальной линии сверху и снизу полосы Detail, а затем вертикальными линиями отделить каждый столбце страницы. Можно проще: каждый столбец заключил в прямоугольник (шесть компонентов QRShape), а чтобы QRShape не перекрывал текст, щелкните по ним правой кнопкой и выберите команду Control -> Send to Back (поместить на задний план).
Создадим отчет по телефонам. Для этого создайте в проекте новую форму,подключите модуль с наборами данных DM.
Установите на новую форму основу отчета QuickRep.В свойстве DataSet компонента-основы выберите DM.TLichData, то есть, таблицу с личными данными.
Теперь создайте на основе полосы Page Header, Title, Column Header и Detail.
На верхнюю полосу Page Header установите по краям два компонента QRSysData, в свойстве Data у первого выберите qrsDateTime, а у второго qrsPageNumber. Кроме того, переведите в True параметр DrawBottom у свойства Frame полосы Page Header, чтобы отделить линией верхний колонтитул.
Далее, на полосу Title установите один компонент QRLabel, на котором напишите заголовок "Отчет по телефонам сотрудников". Измените шрифт, начертание и размер, как в прошлом примере, и отцентрируйте заголовок по полосе.
Ниже идет полоса Column Header с заголовками таблицы. Как и в прошлом примере, требуется из компонентов QRLabel сформировать заголовки столбцов, но в этот раз ограничимся только тремя заголовками: "Фамилия", "Имя" и "Отчество".
Далее у нас идет полоса Detail, на которой нам нужно разместить три компонента QRDBText, которые привязать к соответствующим полям (не забудьте про свойства DataSet и DataField этих компонентов). Еще в свойстве Frame полосы Detail желательно перевести параметр DrawTop в True, чтобы каждая запись отчета отделялась линией.
Теперь добавим в отчет связанные данные из другой таблицы. Установите компонент QRSubDetail - эта полоса должна быть самой нижней. Сначала нужно выбрать главный по отношению к этому компонент: в свойстве Master выберите QuickRep1. Кроме того, полоса QRSubDetail должна знать, откуда листать данные, поэтому в свойстве DataSet полосы выберите DM.TTelephones.
Далее установим на полосу один компонент QRLabel, напишем на нем "Телефон:".
Слева от него установите два компонента QRDBText, в свойстве Dataset которых выберите fDM.TTelephones, а в свойстве DataField выберите соответственно, поля "Телефон" и "Примечание". Теперь мышью немного перетащите нижний край полосы, чтобы сделать ее поуже.
Создайте процедуру вызова этого окна в команде главного меню Отчеты -> По телефонам, и пропишите там вызов Form6.QuickRep1.PreviewModal;
Отчет по адресам сотрудников создается точно таким же образом, сделайте его самостоятельно.
Отчет можно не только распечатать. Его также можно сохранить в специальном формате *.qrp, а затем загрузить в окно предварительного просмотра. Для этого соответственно служат кнопки "Save Report" и "Load Report" на панели инструментов окна предварительного просмотра.
Однако бывают случаи, когда отчет желательно сохранить в каком-нибудь общем формате, например, в текстовом, или html (web-страница). Тогда отчет можно было бы просмотреть в стандартном Блокноте или web-броузере, переслать сотруднику, у которого ваша программа не установлена. На вкладке QReport имеются компоненты, которые позволяют это сделать.
QRTextFilter - позволяет сохранить отчет в виде текстового файла.
QRCSVFilter - позволяет сохранить отчет в специальном формате CSV (Comma Separated).
QRHTMLFilter - позволяет сохранить отчет в формате web-страницы.
Это не визуальные компоненты, на отчете они не отобразятся. Достаточно установить один из них (или все вместе) на основу отчета QuickRep, и при сохранении отчета пользователю станут доступны соответствующие форматы.
Причем если у вас в проекте имеется несколько окон с отчетами, компоненты добавляются только в один из них, в остальных отчетах эти форматы также станут доступны.
Содержание отчета:
Номер, тема, цель лабораторной работы.
Задание к работе.
Интерфейс приложения
Текст программы.
Вывод о проделанной работе.

Приложенные файлы


Добавить комментарий