• Название:

    програмирование отчет

  • Размер: 0.15 Мб
  • Формат: DOCX
  • или


2.8. Особенности сохранения изображений в БД

Цель: изучение способов работы с изображениями в базе данных

Некоторые базы данных могут содержать в себе изображения. Для работы с ними мы будем использовать компонент DBImage.

Создаем вспомогательный каталог, например, Kartinki, выкладываем в него несколько изображений. Потдерживается только формат BMP.

В утилите DBD создаем файл базы данных для работы с изображениями vid.db. Структура файла vid.db:

Назначение полей:

Поле

Назначение

Npp

Уникальный ключ, поле с автоматическим приращением значения на 1 при добавлении новой записи к файлу (автоинкрементное поле)

Naim

Наименование рисунка

Photo

Поле для хранения собственно изображения. Его тип – G(graphic), разме поля не указывается, так как память под него выделяется динамически при присвоению этому полю значения картинки – см.листинг программы

Path

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

Memo

Текстовая сопутствующая информация

для сортировки рисунков по алфавиту создаем вторичный индекс indVidNaim по полю Naim.

Переносим на форму следующие компоненты: Button (5 шт.), DBGrid, DBImage, OpenPictureDialog, DBMemo, Image. Где Image1 – вспомогательный компонент, а свойству DataFailed компонента DBImage1 указываем на поле Photo.

Для записи в базу данных нового изображения воспользуемся методом Assign (назначить) в команде:

tVid->FieldByName("Photo")->Assign(Image1->Picture);

Команда автоматически выделяет столько памяти, сколько места занимает объект Image1->Picture, и записывает эти байты в автоматически построенный вспомогательный файл vid.mb, а в поле Photo заносится ссылка на него.

Аргументом метода Assign может служить только рисунок, находящийся в компоненте TImage, поэтому и приходится помещать на форме этот вспомогательный объект. Непосредственно присвоить полю Photo информацию из рисунка, хранящегося на диске, невозможно, поэтому мы воспользуемся следующим алгоритмом:

Из директории изображений загрузить в компонент TImage нужный рисунок

Присвоить информацию из TImage соответсвующему полю файла базы данных

Встраивание звука

Цель: изучение способов подключения к приложению звукового сопровождения.

Builder обладает многочисленными возможностями использования звуковых эффектов, мы же воспользуемся следующими:

воспроизведение звука по щелчку.

проигрыш встроенного звука в ОС.

проигрывания с помощью компонента MediaPlayer.

Воспроизведение звука щелчка.

Самым простым способом использования звука, является процедура Веер. Она не имеет параметров и воспроизводит стандартный звуковой сигнал, установленный в Windows или использует системный динамик.

Воспроизведение звука, встроенного в Windows.

К этой категории относятся файлы следующих форматов: WAV, MID, WMA или MP3.Каждый из форматов имеет свои достоинства и недостатки.

Начнем новый проект, наносим на форму компоненты MediaPlayer, OpenDialog, ListBox, а также кнопки «Найти пьесу», «Выход» «Запустить» «Остановить» «Звук ВЕЕР» «Звук chimes.wav»

Назначение кнопок компонента MediaPlayer

Play

Воспроизведение.

Pause

Пауза воспроизведения или записи.

Stop

Останов воспроизведения или записи.

Next

Переход на следующий трек или на конец.

Prev

Переход на предыдущий трек или на начало.

Step

Перемещение вперед на заданное число кадров.

Back

Перемещение назад на заданное число кадров.

Record

Начало

Eject

Освобождение, установка исходного состояния

В фильтре компонента OpenDialog укажем форматы: *.wav,*.mid

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

void __fastcall TForm1::FormActivate(TObject *Sender)

{MediaPlayer1->FileName ="Patricia Kaas.mp3"; //загрузка плеера файлом

//по умолчанию

MediaPlayer1->Open();//открывается доступ к кнопкам плеера.

}

В компоненте MediaPlayer свойству DeviceType присвоим значение dtAutoSelect.Над кнопками управления проигрывателем расположим форму метку, в ней будет выводится имя проигрываемого файла.

При нажатии на клавишу «Найти пьесу» запускается стандартное окно поиска (рисунок 55), а при нажатии кнопки «Открыть» выбранное имя файла записывается в параметр FileName и далее обрабатывается программой по её усмотрению.

При нажатии на кнопку «Звук ВЕЕР» запрограммируем воспроизведение стандартного звукового сигнала. Кнопке «Звук chimes.wav» зададим проигрыш встроенного в ОС звука.

Вызов других приложений

Цель: изучение способов прямого вызова других приложений из собственной программы, то есть запуск посторонних программ без помощи «Проводника» операционной системы.

Иногда перед программистом может возникнуть задача запуска других приложений из своей программы. Для таких случаев предусмотрено система API Windows (Application Program Interface Windows). Это обширная библиотека подпрограмм ( процедур и функций), встроенных в операционную систему.

Откроем новый проект и придадим следующий вид нашему приложению:

Подготовим документы форматов txt, doc и xls. Сохраним их в той же директории где находится исполняемый модуль нашего проекта.

Теперь переходим непосредственно к программированию самих кнопок запуска.

Кнопка «execlp +NotePad». Функция execlp позволяет выполнить из своего приложения любое указанное приложение, передав ему управление. Таким образом, родительское приложение завершается и начинается новое.

Записываем приложение process.h в директивой #include:

int execlp(char *path, char *param1, *param2, …*paramn, NULL)

Функция execlp возвращает 0 при успешной загрузке нового приложения, а при ошибке возвращает -1 (ShowMessage(“Текстовый редактор не запущен”);

).

Кнопка «WinExec +NotePad». WinExec позволяет управлять формой представления окна запускаемого приложения. Функцию определяем следующим образом:

int WinExec(const char *CmdLine, unsigned int CmdShow);

Функция может возвратить значения:

Возвращаемое значение

Описание

0

Не хватает памяти

ERROR_BAD_FORMAT

Неправильный формат выполняемого exe-файла

ERROR_FILE_NOTFOUND

Файл не найден

ERROR_PATH_NOTFOUND

Каталог не найден

Задаем кнопке код:

int n;

if (OpenDialog1->Execute())

{n=WinExec(OpenDialog->FileName.c_str(),SW_REStORE)

БЛА БЛА БЛа БЛА БЛА БЛА”);

break;

case ERROR_FILE_NOTFOUND:

ShowMesage(“Файл не найден”);

}//конец оператора case и switch

}//конец оператора if

Кнопка «WinExec +OpenDialog».

Настраиваем фильтр для OpenDialog:

программы

*.exe;*.com

все файлы

*.*

Присваиваем кнопке код:

int n;

if (OpenDialog1->Execute())

{n=WinExec(OpenDialog->FileName.c_str(),SW_REStORE)

БЛА БЛА БЛа БЛА БЛА БЛА”);

break;

case ERROR_FILE_NOTFOUND:

ShowMesage(“Файл не найден”);

}//конец оператора case и switch

}//конец оператора if

Кнопка «ShellExecute +<имя файла>». Функция позволяет открыть указанную папку, запустить приложение и загрузить в него нужный файл.

Добавляем в модуль директиву препроцессора

#include “ShellAPI.h”

В процедуре ShellExecute указываем интересующий нас файл.

Добавляем кнопке код:

int n;

if (OpenDialog1->Execute())

{n=WinExec(OpenDialog->FileName.c_str(),SW_REStORE)

БЛА БЛА БЛа БЛА БЛА БЛА”);

break;

case ERROR_FILE_NOTFOUND:

ShowMesage(“Файл не найден”);

}//конец оператора case и switch

}//конец оператора if

Аналогично программируем кнопка «ShellExecute +OpenDialog»

Код:

int n;

if (OpenDialog1->Execute())

{n=WinExec(OpenDialog->FileName.c_str(),SW_REStORE)

БЛА БЛА БЛа БЛА БЛА БЛА”);

break;

case ERROR_FILE_NOTFOUND:

ShowMesage(“Файл не найден”);

}//конец оператора case и switch

}//конец оператора if