- •Прикладное программирование
- •Часть 1
- •Прикладное программирование
- •Часть 1
- •1. Информация о дисциплине
- •1.1. Предисловие
- •2.1. Рабочая программа (220 часов) Введение
- •Раздел 1. Технология программирования
- •Раздел 2. Ввод данных
- •1.2. Содержание дисциплины и виды учебной работы
- •1.2.2. Перечень видов практических занятий и контроля
- •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
8.2. Работа с изображениями.
Прежде всего следует ознакомиться с различными способами хранения изображений или графических файлов с памяти машины. Студент должен уверенно различать природу файлов по следующим расширениям имён файлов bmp, jpeg, gif. Далее надо уяснить, в чём состоит существенное отличие хранения изображений от объектов, имеющих фиксированную длину поля, где они записываются. Обратите внимание, что в БД можно хранить не само изображение, а только файловый путь к нему, а изображение вызывать динамически. Разберитесь в достоинствах и недостатках каждого метода. Для внедрения изображения в базы данных, как правило, используются методы работы с буфером обмена Clipboard.
Вопросы для самопроверки
Приведите виды отношений между таблицами НД и объясните их сущность.
Как устанавливаются отношения типа 1:1 и 1:N?
Что такое и как организуется связь полей синхронного просмотра (типа LookUp)?
Каким образом в сетке набора данных (в компоненте DBGrid) организуется выпадающее меню?
Каким образом строятся и реализуются запросы к базе данных?
Как организуется поиск по таблицам БД?
Приведите примеры форматов графических файлов (файлов изображений) и поясните их особенности.
В чем состоят особенности хранения изображений в БД?
Каким образом можно записать изображение в БД?
Раздел 9. Интерфейс прикладного программирования api
При изучении данного раздела вы должны проработать следующие темы:
9.1. Встраивание звука.
9.2. Вызов других приложений.
Для проверки усвоения материала по данному разделу Вам предстоит ответить на вопросы для самопроверки, приведённые в конце раздела, а затем выполнить лабораторные работы №2.9 и №2.10 и тренировочный тест №9. Изучение раздела заканчивается контролем знаний: необходимо ответить на вопросы контрольного теста №9. Максимальное количество баллов, которое вы можете получить по данному разделу, равно 7.5 (1.5 балла за тестирование и ещё 6 баллов за лабораторные работы).
9.1 Встраивание звука
Для использования звуковых эффектов Builder обладает многочисленными возможностями, из которых отметим следующие:
воспроизведение звука щелчка;
проигрыш встроенного в Windows звука;
проигрывания музыкальной пьесы с помощью компонента MediaPlayer.
Обратите внимание: первые два приема используют процедуры системы Builder, а не компоненты, поэтому обращения к ним записываются в тексте программы, и не требуется никаких настроек интерфейса.
Воспроизведение звука щелчка
Наиболее простым способом, управляющим звуком, является процедура Веер. Она не имеет параметров и воспроизводит стандартный звуковой сигнал, установленный в Windows, если компьютер имеет звуковую карту и определён стандартный сигнал ( он устанавливается в программе Windows «Панель управления» после щелчка на пиктограмме Звук). Если звуковой карты нет или стандартный сигнал не установлен, звук воспроизводится через динамик компьютера просто в виде короткого щелчка.
Разумно устанавливать команду Beep, как подтверждение какого-либо события, к которому следует привлечь внимание. Предположим, у вас имеется список ListBox, и вы хотите подтвердить звуком факт нажатия клавиши «Enter», когда курсор установлен на строке выбора.
Тогда следует написать такой обработчик события OnKeyPress:
…..ListBox1KeyPress(TObject *Sender, char &Key)
{ if (Key==VK_RETURN) Beep();
}
Здесь VK_RETURN – системная константа, имеющая внутреннее значение такое же, как и у клавиши «Enter».
Воспроизведение звука, встроенного в Windows.
Типы звуковых файлов
Наиболее простым звуковым файлом является волновой файл типа WAV , имеющий расширение имени .wav. Он представляют собою запись цифровых кодов, возникающих в процессе квантования аналогового сигнала. Поэтому качество звука зависит только от условий квантования и если оно выполнено в соответствии с теорией Котельникова, то никакого потери качества по отношению к аналоговому звуку почувствовать невозможно. Воспроизводится такой звук простым декодером, а недостатком этого формата являются слишком большие объемы получаемых файлов.
Другим часто применяемым типом звуковой записи являются файлы цифрового интерфейса музыкальных инструментов (MIDI). По существу, они являются нотной записью, воспроизведение которой поручается музыкальному инструменту, смоделированному средствами Windows. Эти файлы имеют расширение .mid. Файлы такого рода называют мета-файлами. Одним из главных преимуществ формата MIDI является то, что файлы получаются сравнительно небольшими, однако качество звука сильно отличается от оригинала.
Основным направлением технологии записи звуковой информации является использование «сжатых» форматов. Разработано большое количество различных методов сжатия информации, рассматривать которые в данном пособии невозможно. Наиболее удачными являются форматы WMA, разработанный корпорацией Microsoft, и MP3, предложенный международным сообществом. Оба варианта широко используются и обладают примерно одинаковыми техническими характеристиками. Они воспроизводят звук, не уступающий по качеству формату WAV, но занимают в 10-12 раз меньше места на носителе информации. К недостаткам этих форматов относится относительная сложность их воспроизведения, поскольку она требует компьютерной обработки, что трудно реализовать в простейших физических проигрывателях.
Понятие API Windows
Система API Windows (Application Program Interface Windows) представляет собой обширную библиотеку прекрасно разработанных подпрограмм ( процедур и функций), встроенных в операционную систему. Она создана для того, чтобы пользователи смогли бы создавать программы для эффективной работы в этой среде. В числе типичных процедур API назовем такие: построение окна, построение кнопки, организация полосы прокрутки и т.п. Общее количество процедур приближается к тысяче. Программирование в среде Windows подразумевает использование процедур из комплекса API Windows. Разумеется, все эти действия можно выполнить, работая на языке ассемблера, но сложность такого программирования неимоверно высока.
Прямое обращение к большинству процедур API возможно из любого языка программирования, но в общем случае, это также довольно сложно, так как подпрограммы имеют большое число параметров, правила записи которых далеко не простые. Для облегчения использования API и созданы такие системы программирования, как Builder и Delphi: создавая на экране визуальный образ объекта, например окна, мы, а вернее Builder, фактически создаёт внутренний список параметров для обращения к нужной API-процедуре и вызывает её.
Однако прямой вызов API-процедур возможен и продолжает использоваться, когда в системе программирования не найден подходящий компонент. Ниже как раз и будут рассмотрены несколько примеров использования API-библиотеки.
Воспроизведение мелодии
Для однократного воспроизведения звукового файла удобно использовать API-процедуру PlaySound. Параметры этой процедуры описаны в модуле mmsystem. Поэтому для использования этого средства в вашем приложении необходимо подключить директиву
#include <mmsystem.cpp>,
поскольку автоматически Builder ее не включает.
Обращение к функции выглядит так:
PlaySound ("C:\\chimes.wav",0,SND_ASYNC);
здесь:
"C:\\chimes.wav" – звуковой файл,
0,SND_ASYNC – параметры процедуры, которые будут рассмотрены позднее.
Проигрывания музыкального файла с помощью компонента MediaPlayer
В C++Builder имеется компонент MediaPlayer – универсальный проигрыватель аудио- и видеоинформации. Этот компонент расположен на странице System библиотеки компонентов. Компонент можно использовать в двух режимах:
предоставить пользователю возможность управлять воспроизведением информации с помощью кнопочного интерфейса, напоминающего типовую панель управления физическим проигрывателем;
сделать сам компонент невидимым и управлять воспроизведением информации с помощью его методов.
Пользовательский интерфейс плеера представлен в следующей таблице.
Кнопка |
Действие |
Метод |
Play |
Воспроизведение |
Play |
Pause |
Пауза воспроизведения или записи |
Pause |
Stop |
Останов воспроизведения или записи |
Stop |
Next |
Переход на следующий трек или на конец |
Next |
Prev |
Переход на предыдущий трек или на начало |
Previous |
Step |
Перемещение вперед на заданное число кадров |
Step |
Back |
Перемещение назад на заданное число кадров |
Back |
Record |
Начало |
StartRecording |
Eject |
Освобождение, установка исходного состояния |
Eject |
Каждой кнопке медиаплеера соответствует метод, осуществляющийся по умолчанию. Тип устройства мультимедиа, с которым работает медиаплеер, определяется его свойством DeviceType. Если устройство мультимедиа хранит объект воспроизведения в файле, то имя файла задается свойством FileName. По умолчанию свойство DeviceType имеет значение dtAutoSelect. Это означает, что медиаплеер пытается определить тип устройства, исходя из расширения имени файла FileName.
Еще одно свойство MediaPlayer – AutoOpen. Если оно установлено в true, то медиаплеер пытается открыть устройство, указанное свойством DeviceType, автоматически во время своего создания в процессе выполнения приложения.
Медиаплеер может также воспроизводить и видеозаписи, но этот аспект не входит в данный учебно-методический комплекс.
Простое приложение можно сделать очень легко. Начните новый проект и перенесите на форму компоненты MediaPlayer, OpenDialog, а также пару кнопок «Найти пьесу» и «Выход» (рис. 53):
Рис. 53. Простейший музыкальный проигрыватель
В фильтре компонента OpenDialog можно, например, задать свойство аудио и видео = *.wav,*.mid
При начальной активации программы разумно указать имя файла по умолчанию. Это можно сделать двумя способами:
Установить свойство FileName на желательный файл.
Записать в обработчике события FormActivate полный путь к файлу.
Тогда этот обработчик примет вид:
void __fastcall TForm1::FormActivate(TObject *Sender)
{ MediaPlayer1->FileName ="Patricia Kaas.mp3"; //загрузка плеера файлом
//по умолчанию
MediaPlayer1->Open();//открывается доступ к кнопкам плеера.
}
При этом надо проследить, чтобы в компоненте MediaPlayer свойство DeviceType равнялось dtAutoSelect. Это обеспечит автоматический выбор соответствующего устройства мультимедиа исходя из расширения выбранного файла.
Рационально расположить на форму метку, в которую выводилось бы имя проигрываемого файла (рис. 54)
Рис. 54. В метку выводится имя файла (без пути)
Чтобы путь к файлу не занимал бы слишком много места на экране, надо из полного имени файла извлекать ту часть, которая обозначает имя собственно файла (см. листинг программы). Этот приём позволяет и легче прочесть название файла. При нажатии на клавишу «Найти пьесу» запускается стандартное окно поиска (рис. 55), а при нажатии кнопки «Открыть» выбранное имя файла записывается в параметр FileName и далее обрабатывается программой по её усмотрению.
Рис. 55. Поиск нужной пьесы
Листинг данного примера приводится на рис. 56. Поскольку он снабжен подробными комментариями, объяснений не требуется.
#include <vcl.h>
#pragma hdrstop
#include "uPlay.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)//конструктор формы
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
MediaPlayer1->FileName ="Patricia Kaas.mp3"; //загрузка плеера файлом по умолчанию
Label1->Caption="Patricia Kaas.mp3";// имя файла заносится в метку Label1
MediaPlayer1->Open();//открывается доступ к кнопкам плеера.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bFindClick(TObject *Sender)
{ AnsiString sf;
if (OpenDialog1->Execute()) //поиск муз.файла
{ sf=ExtractFileName(OpenDialog1->FileName);//Извлечение имени файла из длинного пути
Label1->Caption=sf; // имя файла заносится в метку Label1
MediaPlayer1->Eject(); //сброс плеера в исходное состояние
MediaPlayer1->FileName =OpenDialog1->FileName; //загрузка плеера файлом
MediaPlayer1->Open();//открывается доступ к кнопкам плеера.
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bExitClick(TObject *Sender)
{ Close(); }
Рис. 56. Листинг приложения «Простой проигрыватель»
