Главная / Банки и базы данных / Технология работы с рисунками

Технология работы с рисунками

ЛАБОРАТОРНАЯ РАБОТА № 8

1. ЦЕЛЬ РАБОТЫ

1. Изучить технологию работы с рисунками

2. ПОЛЕ ТИПА GENERAL

Наиболее простой вариант использования рисунков реализуется через объект (компонент) Image, который связывает форму со статическим рисунком в формате BMP. Image имеет ряд методов и свойств для реагирования на различные события. Будем использовать его свойство Picture для указания места (пути), где находится присоединяемый рисунок.

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

Прежде всего, для размещения рисунка в таблице базы данных используется поле с типом GENERAL. Для того чтобы поместить рисунок в поле GENERAL нужно при просмотре таблицы по команде BROWSE дважды щелкнуть мышью по полю GENERAL; появиться окно для встраивания объекта. Необходимо указать источник, например, Paint Brush. Для этого щелкните мышью по пункту меню Edit главного меню FoxPro, а затем укажите Insert Object. После этого в окне источников найдите «Точечный рисунок» и укажите пункт «Создавать из файла» и, наконец, с помощью кнопки Browse найдите ваш файл. Теперь нажимайте кнопки OK. Указанный вами точечный рисунок будет помещен в поле GENERAL. Обратите внимание на то, как много различных типов файлов может содержать поле GENERAL. Это и анимационные, и мультимедийные, и звуковые файлы и др. Итак, мы добились того, что наша база данных содержит рисунки. Но можно ли было связать рисунки с полем GENERAL иначе, например, через команду INSERT. Увы! Visual FoxPro позволяет добавлять объекты с помощью команды

APPEND GENERAL

Но эта команда добавляет OLE-объекты, например, таблицы Word или Excel. Если же вы хотите добавить рисунок, то сначала нужно этот рисунок вставить в OLE-контейнер, сохранить этот объект в файле, а затем использовать его в команде APPEND GENERAL. Поэтому отложим на время этот путь и вернемся к простейшему варианту через Browse и пункт меню Edit/Insert Object. Все работает нормально. Теперь создадим в проекте форму и добавим в нее компонент OleBoundControl. Этот компонент как раз и будет отображать рисунок из GENERAL-полей нашей таблицы. Все, что требуется сделать – это указать свойство ControlSource объекта OleBoundControl в значение имени поля GENERAL.

Разместим на форме кнопку и запрограммируем ее так:

IF (EOF() = .T.)

GO TOP

ELSE

SKIP

ENDIF

Thisform. OleBoundControl1.Refresh

3. ВСТАВКА РИСУНКОВ В OLE-КОНТЕЙНЕР

Остается рассмотреть технологию вставки рисунка в OLE-контейнер и использование команды APPEND GENERAL. Эта команда имеет следующий формат:

APPEND GENERAL имя_GEN_поля

[FROM имя_файла] [LINK] [CLASS имя_OleClass]

Здесь Имя_файла определяет имя файла, содержащего OLE-объект. Должен быть прописан полный путь к файлу. LINK – создает связь между файлом источником и OLE-объектом, вставляемым в GENERAL-поле. Наличие связи означает, что любое изменение в OLE-объекте автоматически переносится на сам файл. Кроме того, сам OLE-объект не переносится в GENERAL-поле.

Рассмотрим следующий элементарный пример:

APPEND BLANK

APPEND GENERAL Genfld FROM e:workbook1.xls;

CLASS EXCELCHART

Сначала в открытую базу добавляется пустая запись, а затем в поле Genfld заносится диаграмма EXCEL-документа.

4. ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ

Необходимо реализовать две технологии работы с рисунками; одна технология должна использовать объект OleBoundControl и осуществлять вставку рисунка из GEN-поля базы данных. Вторая технология должна базироваться на использовании команды APPEND GENERAL. Для демонстрации обеих технологий создайте базу данных и используйте набор кнопок для навигации по ней.

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Чем отличается компонент Image от OleBoundControl? Чем отличается OleContainer от OleBoundControl?

2. Расскажите о двух технологиях работы с рисунками.

3. Можно ли вставить рисунок с помощью команды INSERT?

4. Какой тип поля БД используется для размещения рисунка?

5. Расскажите, как бы вы создали динамически изменяющуюся картину?