
- •Прикладное программирование
- •Часть 1
- •Прикладное программирование
- •Часть 1
- •1. Информация о дисциплине
- •1.1. Предисловие
- •1.2. Содержание дисциплины и виды учебной работы
- •1.2.2. Перечень видов практических занятий и контроля
- •2. Рабочие учебные материалы
- •2.1. Рабочая программа (220 часов) Введение
- •Раздел 1. Технология программирования
- •Раздел 2. Ввод данных
- •Раздел 3. Управляющие окна
- •Раздел 4. Развитые компоненты
- •Раздел 5. Основные понятия субд
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •Раздел 7. Основные приёмы программирования бд
- •Раздел 8. Развитые приёмы программирования бд
- •Раздел 9. Интерфейс прикладного программирования api
- •Заключение
- •2.2. Тематический план изучения дисциплины
- •Тематический план для студентов заочной формы обучения
- •Структурно-логическая схема дисциплины «Прикладное программирование»
- •2.4. Временной график изучения дисциплины при использовании информационно-коммуникационных технологий
- •2.5. Практический блок
- •2.5.1. Практические занятия
- •2.5.2. Лабораторный практикум
- •2.5.2.1. Лабораторные работы для очной формы обучения
- •2.5.2.2. Лабораторные работы для очно-заочной формы обучения
- •2.5.2.3. Лабораторные работы для заочной формы обучения
- •2.6. Балльно-рейтинговая система оценки знаний
- •3. Информационные ресурсы дисциплины
- •3.1. Библиографический список
- •Опорный конспект Введение
- •Раздел 1. Технология программирования
- •1.1. Основная тенденция технологии программирования
- •Раздел 2. Ввод данных
- •2.1. Организация надежного ввода
- •2.2. Обработка строк
- •2.3. Средства группирования компонентов
- •Раздел 3. Управляющие окна
- •3.1. Управление выбором
- •3.2. Диалоговые окна
- •3.3. Многострочные окна
- •Раздел 4. Развитые компонеты
- •4.1. Работа с данными типа DateTime
- •4.2. Работа с двумерными массивами
- •4.3. Компоненты навигаторов.
- •4.4. Использование указателей
- •Раздел 5. Основные понятия субд
- •5.1. Общие сведения о базах данных (бд)
- •5.2. Концепция управления бд из среды Builder
- •5.3. Файлы и индексы
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •6.2. Навигация по нд
- •6.3. Доступ к полям нд
- •6.4. Визуальные компоненты для работы с бд
- •Раздел 7. Основные приёмы программирования бд
- •7.1. Сортировка, фильтрация и редактирование нд
- •7.2.Организация надежного ввода данных в бд
- •Раздел 8. Развитые приёмы программирования бд
- •8.1. Построение связей между таблицами бд
- •8.2. Работа с изображениями.
- •Раздел 9. Интерфейс прикладного программирования api
- •9.1 Встраивание звука
- •9.2. Вызов других приложений
- •Заключение
- •3.3. Глоссарий (краткий словарь основных терминов и положений)
- •3.4. Технические средства обеспечения дисциплины
- •3.5. Методические указания к выполнению лабораторных работ
- •3.5.1. Лабораторные работы, семестр 1
- •Работа 1.1. Проектирование программного проекта.
- •Вспомогательный теоретический материал Основная тенденция технологии программирования
- •Компонент ActionList
- •Связь пунктов меню Main Menu1 с действиями ActionList
- •Связь действий ActionList с изображениями ImageList
- •Кнопки быстрого доступа
- •Всплывающие подсказки
- •Использование стандартных действий
- •10 Правил технологии программирования
- •Работа 1.2. Надёжный ввод
- •Работа 1.3. Контейнеры
- •Работа 1.4. Компоненты выбора
- •Работа 1.5. Диалоги
- •Работа 1.6. Многострочные окна
- •Работа 1.7. Определение даты и временного интервала.
- •Работа 1.8. Обработка двумерных массивов.
- •Работа 1.9. Работа с каталогами и файлами.
- •3.5.2. Лабораторные работы, семестр 2
- •Работа 2.1. Начальное создание базы данных
- •Вспомогательный теоретический материал Общие сведения о базах данных
- •Концепция управления бд из среды Builder
- •Средство dbe (Database Borland Engine – машина Borland управления базой данных)
- •Альяс базы данных
- •Поля файла бд
- •Набор данных таблицы бд
- •Управление наборами данных в среде Builder
- •Модуль данных DataModule
- •Файлы и индексы
- •Содержание работы
- •Работа 2.2. Сортировка набора данных, русификация заголовков
- •Работа 2.3. Организация надежного ввода
- •//Проверка полей Panel2 - только для режима замены
- •Работа 2.4. Ввод данных посредством вспомогательных словарей.
- •Работа 2.5. Связи таблиц типа 1:1 и 1:n
- •Работа 2.6. Поля синхронного просмотра типа Lookup
- •Работа 2.7. Поиск и фильтрация
- •Работа 2.8. Особенности сохранения изображений в бд
- •Работа 2.9. Встраивание звука
- •Работа 2.10. Вызов других приложений
- •Методические указания к практическим занятиям
- •Заключение
- •4. Блок контроля освоения дисциплины
- •Часть 1, первый семестр – контрольная работа, зачёт.
- •Часть 1, второй семестр – курсовой проект, экзамен.
- •4.1. Задание на контрольную работу и методические указания к её выполнению
- •Вниманию студентов, обучающихся с элементами дот.
- •Задание на курсовой проект и методические указания к его выполнению
- •Этапы работы над курсовым проектом
- •4.3. Текущий контроль Тренировочные тесты
- •4.4. Итоговый контроль Вопросы к зачёту, семестр 1
- •Вопросы к экзамену, семестр2
2.3. Средства группирования компонентов
Для многих задач встречается ситуация, когда некоторой группой компонентов надо управлять одновременно, например «показать» или «спрятать» все компоненты. Типичный вариант такой задачи – это организация надёжного ввода. При работе с приложением вообще ввод допустим не всегда. Часто попытка ввода не «во время», может привести к двусмысленности или неопределённости. Тогда лучше всего предотвратить такие ошибки – это не показывают на экране окон ввода.
В подобных случаях нужные компоненты объединяют и размещают на некотором компоненте, называемом «контейнером». Далее операции, производимые над контейнером, автоматически распространяются на все содержащиеся в нём компоненты. Такой приём упрощает программирование и делает его более надёжным.
Основным контейнером, имеющимся в любом приложении, является форма (TForm).
Формы
С точки зрения пользователя форма– это окно, в котором он работает с приложением. Каждой новой форме, вводимой в приложение, соответствует свой модуль (*.cpp) со своим заголовочным файлом (*.h) и с текстовым описанием компонентов, расположенных на форме (*.dfm).
Рассмотрим некоторые свойства, методы и события, присущие формам.
Основные свойства форм
Свойство, назначение |
Возможные значения |
Пояснения |
BorderStyle определяет общий вид окна и разрешённые операции |
bsSizable |
Обычное окно Windows с полосой заголовка и возможностью изменять размеры |
bsDialog |
Неизменяемое по размеру окно |
|
bsSingle |
Размеры не изменяются за счет мыши, но могут меняться системными кнопками в заголовке |
|
bsToolWindow |
То же, что bsSingle, но с меньшим по величине заголовком |
|
bsSizeToolWin |
То же, что bsSizable, но с меньшим по величине заголовком . Системные кнопки отсутствуют |
|
bsNone |
Отсутствует полоса заголовка |
|
BorderIcons определяет набор кнопок, которые имеются в полосе заголовка |
bySystemMenu |
Кнопка системного меню с крестиком, прекращающая работу программы, связанной с окном |
byMinimize |
Кнопка «Свернуть» убирает окно с экрана, заменяя его пиктограммой в полосе задач |
|
byMaximize |
Кнопка «Развернуть» –увеличивает окно до размеров экрана |
|
byHelp |
Кнопка справки |
|
FormStyle определяет характер исользования окна |
fsNormal |
Обычное окно (по умолчанию) |
fsMIDIForm |
Родительская форма многооконного приложения (MIDI-приложения), при котором открывается несколько немодальных окон (как WinWord) |
|
fsMIDIChild |
Дочерняя форма MIDI-приложения |
|
fsStayOnTop |
Окно, всегда остающееся поверх остальных |
|
WindowState определяет вид, в котором окно появляется при выполнении приложения |
wsNormal |
Нормальный вид окна (по умолчанию) |
wsMinimized |
Окно свёрнуто в пиктограмму |
|
wsMaximized |
Окно раскрыто во весь экран |
|
AutoScroll определяет, будут ли на форме в процессе выполнения автоматически появляться полосы прокрутки в случае, если не все компоненты помещаются в нем |
||
ActiveControl определяет, какой из размещенных на форме компонентов будет в фокусе в первый момент при выполнении приложения |
||
Icon задает пиктограмму формы |
Остальные свойства форм, такие как Color, Font, Visible и множество других, аналогичны соответствующим свойствам других компонентов и представить их назначение не вызывает сложности.
Управление формами
По умолчанию все формы создаются автоматически при запуске приложения и первая из введенных в приложение форм считается главной. Главная форма отличается от прочих рядом свойств:
Во-первых, именно этой форме передается управление в начале выполнения приложения.
Во-вторых, закрытие пользователем главной формы означает завершение выполнения приложения.
Указанные выше условия, принятые по умолчанию (первая форма – главная, все формы создаются автоматически), могут быть изменены. Главной в вашем приложении может быть вовсе не та форма, которая была спроектирована первой.
Изменить принятые по умолчанию параметры форм можно в окне Опций проекта, которое вызывается командой Project|Options главного меню (рис.5).
Рис. 5. Окно опций проекта
На данном рисунке открыта страница параметров приложения в целом. Здесь можно изменить икону, сопутствующую приложению (Icon), указать наименование файла справки, встраиваемого в приложение (Help file) и записать русское название проекта (Title), которое будет появляться в окнах сообщений, вызываемых командами типа ShowMessage.
В верхнем выпадающем списке Main forms можно выбрать главную форму среди других форм, имеющихся в проекте (рис. 6).
Рис. 6. Назначение формы Form2 в качестве главной формы проекта
События, связанные с формами
В момент создания формы возникает следующая последовательность событий:
Событие |
Перевод |
Ситуация, вызывающая событие |
OnCreate |
при создании |
создание формы – резервирование динамической памяти для формы и всех компонентов |
OnShow |
при показе |
предъявление формы на экране |
OnPaint |
при прорисовке |
подготовка рисунка формы на скрытых страницах видеопамяти |
OnActivate |
при активации |
первоначальный вход в форму; установка фокуса на форму |
OnResize |
при изменении размеров |
изменение видимых размеров |
При запуске программы события возникают в том порядке, какой указан в таблице. Обратите внимание на событие OnCreate. Обработка этого события широко используется при открытии файлов баз данных, для создания списков и т.д. Это событие для каждой формы происходит только один раз. Все остальные события могут в процессе выполнения приложения неоднократно повторяться.
В нужный момент форму можно сделать видимой методами Show или ShowModal. Последний метод открывает форму как модальную. Это означает, что управление передается этой форме и пользователь не может передать фокус другой форме данного приложения до тех пор, пока он не закроет модальную форму. Это основной для данного пособия способ открытия форм.
Если же форма открыта методом Show, то фокус может быть передан любому другому открытому окну. Такая ситуация возникает при разработке MIDI-приложений, программирование таких конструкций существенно сложнее и в данном пособии не рассматривается.
Методом Hide форму в любой момент можно сделать невидимой. В этот момент в ней возникает событие OnHide.
Чтобы прекратить выполнение программы, запущенной в окне, необходимо «закрыть» форму методом Close(). При этом в закрывающейся форме возникает такая последовательность событий:
закрываются активированные в форме файлы и базы данных, при этом новая информация, созданная во время работы, физически копируется из оперативной памяти на жесткий диск, чем обеспечивается надёжность сохранения информации;
освобождается память, выделенная под объекты при открытии формы, то есть объекты «разрушаются».
Из этого описания следует, что закрывать окно надо по специальной команде «Закрыть», инициирующей метод Close. Такая команда может быть вызвана кнопкой или пунктом меню. Не следует закрывать окно системной кнопкой «Крестик», находящейся в заголовке окна, так как при этом возникает вероятность потери данных. Поэтому для надёжных программ разумно вообще убирать кнопку «Крестик» из заголовка окна.
Полезным является использование свойства ModalResult. Это свойство доступно только во время выполнения приложения. При закрытии формы методом Close можно присвоить этому свойству какое-либо целое значение, а в вызывающей форме анализировать его и тем самым хорошо понимать, при каких условиях модальная форма закончила работу.
Это присвоенное значение можно будет прочитать как результат, возвращаемый методом ShowModal.
В C++ Builder предопределены некоторые константы, облегчающие трактовку результатов, полученных при закрытии модальной формы:
Числовое значение ModalResult |
Системная символьная константа |
Пояснение |
0 |
mrNone |
Закрытие модальной формы кнопкой нестандартизованной пользователем |
1 |
mrOk |
Закрытие модальной формы кнопкой Ok |
2 |
mrCancel |
Закрытие модальной формы кнопкой Cancel |
3 |
mrAbort |
Закрытие модальной формы кнопкой Abort |
4 |
mrRetry |
Закрытие модальной формы кнопкой Retry |
5 |
mrIgnore |
Закрытие модальной формы кнопкой Ignor |
6 |
mrYes |
Закрытие модальной формы кнопкой Yes |
7 |
mrNo |
Закрытие модальной формы кнопкой No |
8 |
mrAll |
Закрытие модальной формы кнопкой All |
Все приведённые выше пояснения значений ModalResult (кроме значений 0 и 2) носят чисто условный характер. В своем приложении вы можете трактовать ту или иную величину ModalResult каким угодно способом.
Средства группирования компонентов
Основные характеристики наиболее часто используемых средств группирования компонентов приведены в следующей таблице.
Компонент |
Объяснение |
Описание |
GroupBox |
групповое окно |
Является контейнером, объединяющим группу связанных органов управления, таких, как радиокнопки RadioButton, контрольные индикаторы Checkbox и т.д. |
Panel |
панель |
Является контейнером для группирования органов управления и меньших контейнеров. Панель можно использовать также для построения полос состояния, инструментальных панелей, палитр инструментов |
Bevel |
рамка |
Используется для рисования прямоугольной рамки, изображенной как выступающая или утопленная |
TabControl |
страница с закладками |
Позволяет добавлять закладки в стиле Windows, для экономии места на рабочем столе |
PageControl |
многостраничное окно |
Позволяет создавать многостраничные формы |
Компоненты GroupBox, Panel, Bevel
Для выяснения различий между компонентами Panel, GroupBox и Bevel обратитесь к рис. 7.
Рис. 7. Сравнительное представление компонентов Panel, GroupBox и Bevel
Из представленных на рисунке средств группирования компонентов контейнерами являются лишь два первых – Panel и GroupBox. Различия между ними незначительны, пожалуй что Panel обладает большими изобразительными возможностями. Главное достоинство обоих контейнеров состоит в том, что ко всем компонентам, расположенным в нём, применимы групповые операции. Например, при перетаскивании компонента по экрану синхронно перемещаются и все его внутренние компоненты, что очень удобно при проектировании интерфейса.
В практическом программировании часто приходится либо скрывать какую-то панель, либо вновь показывать её, что легко достигается применением методов Hide() и Show() соответственно.
Рамка Bevel не является контейнером в том смысле, что она не позволяет производить групповые операции над расположенными в ней компонентами. Это действительно только геометрическая рамка, которая визуально объединяет компоненты, но не группирует их.
Свойства всех этих средств являются достаточно очевидными и поэтому в данном методическом комплексе не рассматриваются. Свойства легко настраиваются непосредственно из Инспектора объектов.
Компоненты TabControl, PageControl
Оба компонента представляют многостраничные конструкции, располагающиеся на общей форме. Многостраничные панели позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания (рис. 8).
Как видно из иллюстрации, оба компонента представляют некую записную книжку с закладками. Сравните обе панели – внешне они очень похожи. Количество закладок устанавливается пользователем, они могут быть расположены в несколько рядов, надписи на них могут быть сделаны на русском языке.
Однако с точки зрения их использования эти компоненты различаются значительно. Второй компонент PageControl содержит столько независимых контейнеров, сколько в нем установлено закладок, тогда как первый компонент TabControl является одним контейнером, общим для всех закладок.
Посмотрите внимательно на рис. 8. На первой закладке «Файлы» компонента TabControl расположены две текстовых надписи –Панель1 и Закладка 1. На первой закладке компонента PageControl расположены надписи –Панель1 и Закладка1 (на рис.8 эта закладка не показана) . После щелчка по закладке «Записи» оба элемента Панель1 и Закладка 1 компонента TabControl останутся видимыми и сохранят своё местоположение, тогда как вторая страница компонента PageControl окажется пустой.
Рис. 8. Компонент TabControl является одним контейнером, тогда как PageControl содержит столько контейнеров, сколько в нём закладок
Сравнительный анализ этих компонентов показывает, что TabControl не полностью выполняет возложенные на него функции и является менее удобным, чем PageControl.
Вопросы для самопроверки
В чём состоит суть требований к надёжному вводу ?
Укажите показатели качества программы с хорошо организованным вводом данных.
Перечислите основные приёмы решения проблемы защиты ввода.
В чём заключается сущность алгоритмических методов обеспечения надёжного ввода?
Каким образом обработка исключительных ситуаций используется для организации надёжного ввода?
Опишите организацию защиты окон ввода данных от ввода недопустимых символов.
Как используется управление видимостью элементов управления для обеспечения надежности ввода данных?
В чём состоят отличия строк с нулевым окончанием от строк типа AnsiString?
Что является результатом операций сравнения строк?
Приведите примеры встроенных функций обработки строк.
Какие средства можно использовать для объединения компонентов в группы? С какой целью это производится?