Проектирование ИС.Часть1(DDE+буфер обмена+OLE)…

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального образования
«РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ»







Утверждено на заседании кафедры ИСС
28 марта 2008 г.







Методические указания
к лабораторным работам по курсу «Проектирование ИС»
Часть 1


















Ростов-на-Дону
2008

УДК 522.5(077В)


Методические указания к лабораторным занятиям по курсу «Проектирование ИС». Часть 1. - Ростов н/Д: Рост.гос.строит.ун-т, 2008.-26 с.



Предназначены для студентов дневной формы обучения специальности ИСТ.

Составители:
канд. экон. наук, доц. Н.В. Петкова
Рецензент:
канд. физ.-мат. наук, доц. М.И. Кадомцев





Редактор Т.М. Климчук
Темплан 2008 г., поз.110
Подписано в печать 18.06.08 . Формат 60х84/16.
Бумага белая. Ризограф. Уч. – изд. л. 1,6. Тираж 100 экз. Заказ
Редакционно-издательский центр
Ростовского государственного строительного университета
344022, Ростов н/Д, ул. Социалистическая, 162


( РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ
СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ, 2008 Введение. Технологии обмена данными
Технологии обмена данными рассматриваются с точки зрения двух аспектов:
обмен данными между компьютерами;
обмен данными между приложениями
Обмен данными между компьютерами стал необходим с появлением систем коллективного пользования. Кратко основные этапы развития систем отражены в табл. 1.
Таблица 1
Период
Характеристика этапа
Тенденция

40-е гг. ХХ в.
Первые ЭВМ
Автономность

60-е гг.
Менфрэймы, перфокарты, перфоленты
Централизация

70-е гг.
Разделение времени, магнитные ленты
Удаленный доступ

80-е гг.
Персональные компьютеры, дискеты, стримеры
Автономность


Конец 80-х, начало 90-х гг.
Локальные вычислительные сети Архитектура клиент-сервер
Централизация


Середина 90-х гг.
Интернет, глобальные сети
Удаленный доступ

Начало XXI в.
Сетевые компьютеры, распределенные вычисления
Централизация


Эволюция обмена данными между приложениями имела следующие этапы:
Бумажный обмен
Безбумажный файловый обмен
Папка обмена
DDE (динамический обмен данными)
ООП, OLE (Объектно-ориентированное программирование, внедрение и связывание объектов)
COM, ActiveX, Java-приложения (программирование объектов)
DCOM (динамическое программирование объектов)
В настоящий момент для проектирования информационных систем используются различные приложения, для обмена данными между которыми необходимо владеть технологиями, перечисленными в пунктах 3-7. В данном разделе методического пособия рассмотрим технологии DDE, буфер обмена и примеры использования OLE-технологий при обмене данными между приложениями.
Тема 1. Динамический обмен данными (DDE)
Содержание темы:
Принципы динамического обмена данными
Транзакции DDE
DDE()
Функции DDEInitiate(), DDESend(), DDEReqest(), Shell()
Инструкции DDEExecute, DDEPoke, DDETerminate, DDETerminateAll
Примеры и задачи: обмен данными между приложениями по протоколу DDE.
1.1 Принципы динамического обмена данными
DDE (Dynamic Data Exchange )– установленный протокол обмена данными в реальном времени между приложениями Windows, несовместимыми с OLE2
Основные определения:
Процесс обмена информацией с использованием DDE называется сеансом связи DDE.
Приложение, начинающее сеанс связи, называется клиентом DDE.
Приложение, предоставляющее данные, называется сервером DDE.
Основными элементами сеанса связи DDE, называемыми транзакциями, являются:
Запрос клиента к серверу на начало сеанса связи
Запрос данных у сервера
Получение данных от сервера
Посылка данных серверу
Посылка команд серверу
Прекращение сеанса связи
На рис.1 приведена схема сеанса связи DDE. Пунктиром обозначены необязательные транзакции.
13 EMBED PowerPoint.Slide.8 1415
Рис.1
Обработка сообщений по протоколу DDE осуществляется Windows FIFO (first-in, first-out). Для поддержания нужного временного режима перемещения сообщений клиент может потребовать подтверждения сервером получения всех сообщений. Такой тип связей называется асинхронным. В синхронном сеансе связи клиент использует метод прерываний и посылает сразу несколько сообщений, а затем ожидает ответа. Если в течение одного периода прерывания ответ от сервера не получен, генерируется сообщение об ошибке.
Структура транзакций DDE
В соответствии с протоколом DDE от сервера к клиенту и обратно могут передаваться текст, числа и реже графическая и специальная информация. При этом получаемые от сервера данные обрабатываются методами и кодом управления приложения-клиента.
При формировании запросов используется трехуровневая иерархия для идентификации необходимых данных:
Приложение (Servise Name). Обычно представляет собой имя выполняемого файла без расширения .exe (WINWORD, EXCEL, MSACCESS, CorelDRW, Pbrush и т.д.). Имя нужного приложения можно получить из контекстного меню значка приложения (Свойства – Версия - Внутреннее имя)
Документ (Topic). Указывает на имя файла (документа Word, книги Excel и пр.), содержащего требуемую информацию. Если приложение не использует файлов, то документ представляет собой строку, специфическую для данного приложения. Возможен также документ System (рассмотрен будет ниже)
Раздел данных (Item). Представляет собой фрагмент данных, содержащийся в указанном документе (имя закладки в документе Word, адрес диапазона ячеек Excel в формате R1C1, ссылку на имя поля в базе данных Access и пр.)
1.2. Транзакции DDE
Транзакции DDE реализуются функциями и инструкциями DDE.
Функция DDEInitiate()
Функция DDEInitiate позволяет открыть канал сеанса DDE, обеспечивающий передачу данных между приложением-сервером и приложением-клиентом.
Синтаксис:
DDEInitiate(приложение, документ)
Функция возвращает номер канала связи (типа Long), который при необходимости используется другими транзакциями.
Функция DDE()
Функция DDE позволяет открыть сеанс динамического обмена данными с приложением-сервером, направить требование на прием данных из этого приложения и вывести полученные данные в элементе управления в форме или отчете приложения-клиента.
Функция DDE записывается в ячейку свойства Данные (ControlSource) следующих элементов управления в форме: поле, поле со списком, группа переключателей или флажок.
Синтаксис:
DDE(приложение, документ, раздел)
С элементами управления формы функция используется следующим образом.
Поле. Выводит содержимое раздела в поле. Например, содержимое ячейки Excel.
Поле со списком. Выводит список раздела. Например, содержимое диапазона ячеек Excel.
Группа переключателей. Числовое значение, возвращаемое функцией DDE, включает соответствующий переключатель (1 – первый, 2 – второй и т.д.)
Флажок. Если DDE возвращает 0, то флажок будет снят, иначе – установлен.
Функция DDERequest()
Функция DDERequest передает в приложение-сервер по открытому каналу связи требование на прием данных из указанного раздела.
Синтаксис:
DDERequest(канал, раздел)
DDERequest возвращает значение типа Variant, содержащее требуемые данные в виде строки.
Функция DDESend()
Передает из элемента управления в форме или отчете приложения-клиента данные приложению-серверу. Функция вводится в ячейку свойства Данные следующих элементов управления: поле, поле со списком, группа переключателей или флажок.
Синтаксис:
DDESend(приложение, документ, раздел, данные)
Инструкция DDEExequte
Инструкция передает по открытому каналу связи команду из приложения-клиента в приложение-сервер. Например, переданная в Excel команда New(Создать), позволяет создать новую электронную таблицу.
Синтаксис:
DDEExequte канал, команда
Аргумент команда представляет собой строковое выражение, задающее команду, принимаемую приложением-сервером.
Допустимые команды:
Имя макроса в базе данных
Макрокоманды VB, являющиеся методами объекта DoCmd
Макрокоманды OpenDetaBase, ClosedataBase.
Инструкция DDEPoke
Инструкция передает текст из приложения-клиента в приложение-сервер.
Синтаксис:
DDEPoke канал, раздел, данные
Инструкции DDETerminate и DDETerminateAll
Инструкция DDETerminate закрывает указанный канал связи.
Синтаксис:
DDETerminate канал
Инструкция DDETerminateAll закрывает все открытые каналы связи.
Синтаксис:
DDETerminateAll
Если открытых каналов связи нет, то вызов этих инструкций приводит в ошибке.
Сеанс связи организуется обычно по следующей схеме:
Открывается сеанс связи (DDE)
Открываются каналы связи (DDEInitiate)
Выполняется обмен данными между клиентом и сервером (DDEExecute, DDEPoke, DDERequest, DDESend)
Закрываются каналы связи (DDETerminate, DDETerminateAll)
1.3. Примеры и задачи: обмен данными между приложениями по протоколу DDE
Использование функции DDE
Задача. Отобразить данные из таблицы Excel на форме базы данных Access с помощью функции DDE.
Создать в Excel книгу с именем T.xls.
В ячейку А1 ввести текст «Город», а в ячейку А2- текст «Ростов-на-Дону».
Сохранить файл в корне диска С: и свернуть книгу.
Открыть новую базу данных, в которой создать форму с 2 полями, значения свойства <Данные> поля0 и поля1 установить соответственно: =DDE("Excel";"С:\T.xls";"R1C1") и =DDE("Excel";"С:\T.xls";"R2C1").
Открыть форму в режиме формы.
Просмотреть результат (рис.2)

Рис.2
Передача данных из Excel в Access с помощью модуля Access
Задача. Отобразить данные из таблицы Excel на форме базы данных Access, используя функцию DDERequest .
В Access создать форму с 2 полями:
Поле <Жилая площадь>, свойство <Данные> которого содержит строку: =Т();
Поле <Стоимость>, свойство <Данные> которого содержит строку: =Т1().
В MSAccess создать модуль с 2 функциями:
Function T() As String
Dim chanel As Long
chanel=DDEInitiate(“Excel”,”C:\T.xls”)
T=DDERequest(chanel, “R1C1”)
DDETerminate chanel
End Function
Function T1() As String
Dim chanel1 As Long
chanel1=DDEInitiate(“Excel”,”C:\T.xls”)
T1=DDERequest(chanel1, “R2C1”)
DDETerminate chanel1
End Function
Создать в Excel книгу с именем T.xls.
И ячейку А1 внести величину жилой площади- «28», а в ячейку А2- стоимость- «20.000».
Сохранить файл в корне диска С: и свернуть книгу.
Открыть форму в режиме формы.
Просмотреть результат (рис.3)
13 EMBED PBrush 1415
Рис.3
Взаимодействие Access и Word
Задача. С помощью макроса документа Word запросить данные о клиентах из базы Борей, вывести информацию в документ Word и в текстовый файл Данные.txt
Открыть Access и свернуть.
В Word создать макрос:
Sub TestDDE()
chanal1 = DDEInitiate("msaccess", "System")
DDEExecute chanal1, "[OpenDataBase C:\Program Files\Microsoft Office\Office10\Samples\Борей.mdb]"
chanal2 = DDEInitiate("msaccess", "Борей; Table Клиенты")
TableData$ = DDERequest(chanal2, "all") 'Считает все данные из таблицы "Клиенты" в переменную TableData$
DDETerminate chanal2
DDEExecute chanal1, "[CloseDataBase]"
DDETerminate chanal1
Selection.TypeText (TableData$) 'Вставит данные о клиентах в текущий документ Word
Open "C:\Данные.txt" For Append As #1
Print #1, TableData$ 'Запишет данные в текстовый файл
Close #1
End
Выполнить исходный макрос и просмотреть документ и текстовый файл на диске С:
Самостоятельные упражнения
Добавить в макрос печать и форматирование заголовка, предварительную чистку содержимого документа и активацию документа после исполнения файла (команды выделены курсивом)
Создать пользовательскую панель с кнопкой макроса.
Ниже приведен расширенный макрос для выполнения самостоятельного задания:
Selection.WholeStory 'Выделяет все содержимое документа
Selection.Delete Unit:=wdCharacter, Count:=1 'Удаляет содержимое документа
Selection.Style = ActiveDocument.Styles("Заголовок 1") 'Форматирует абзац стилем Заголовок1
Selection.TypeText ("Клиенты") 'Печатает заголовок
Selection.TypeParagraph 'Начинает новый абзац
{Исходный макрос}
ActiveDocument.Activate 'сделает активным окно документа
Взаимодействие Access и Excel
Задача. В Access создать форму для расчетов по формуле с помощью Excel.
Создать в Access форму “Калькулятор”с 3 полями (табл. 2):
Таблица 2
№ поля
Значение свойства “Данные”
Подпись поля

1
=Т3()


2

Введите формулу со знаком “=”

3

Результат

Создать книгу Excel с именем “Calc.xls”, в ячейку А1 ввести текст «Калькулятор», сохранить файл на диске С: и свернуть книгу.
Добавить на форму 2 кнопки: <Очистить> и <Вычислить>
Для поля №1 создать модуль класса:
Function T3() As String
Dim chanel As Long
chanel = DDEInitiate(“Excel”, “С:\Calc.xls”)
T3 = DDERequest(chanel, “R1C1”)
DDETerminate chanel
End Function
Для кнопки <Очистить> создать модуль класса:
Private Sub Очистить_Click()
[Forms]![Форма1]![Поле2] = “”
[Forms]![Форма1]![Поле3] = “”
End Sub
Для кнопки <Вычислить> создать модуль класса:
Private Sub Вычислить_Click()
Dim chanel1 As Long, chanel2 As Long
chanel1 = DDEInitiate(“Excel”, “C:\Calc.xls”)
DDEPoke chanel1, “R2C1”, [Forms]![Форма1]![Поле2]
DDETerminate chanel1
chanel2 = DDEInitiate(“Excel”, “C:\Calc.xls”)
[Forms]![Форма1]![Поле3] = DDERequest(chanel2, “R2C1”)
DDETerminate chanel2
End Sub
Проверить выполнение расчета по формуле (рис.4):
Рис.4
Построение диаграммы с помощью инструкции DDEExecute
Задача. В Access создать код для передачи данных в Excel и построения на их основе диаграммы.
Создать в Access форму с кнопкой, модуль класса которой содержит код:
Private Sub Кнопка0_Click()
Dim chan As Variant, SheetName As Variant, I As Variant, TopicList As Variant
On Error Resume Next
chan = DDEInitiate("Excel", "System")
If Err Then
Err = 0
I = Shell("excel", 1)
If Err Then Exit Sub
chan = DDEInitiate("Excel", "System")
End If
DDEExecute chan, "[New(0)]" Создаст файл Книга1, в которой текущей будет установлена ячейка R1C1
TopicList = DDERequest(chan, "Selection") 'Формирует строку: [Книга1]Лист1!R1C1
SheetName = Left(TopicList, InStr(1, TopicList, "!") - 1) 'Формирует имя рабочего листа: [Книга1]Лист1
MsgBox SheetName
DDETerminate chan
chan = DDEInitiate("Excel", SheetName)
For I = 1 To 10
DDEPoke chan, "R1C" & I, I
Next I ' Создает диапазон из 10 ячеек со значениями от 1 до 10
DDEExecute chan, "[Select(""R1C1:R1C10"")][New(2,0)]" Параметр 2 функции “New” задает построение диаграммы в отдельной книге
End Sub
При нажатии кнопки будет открыта новая книга Excel, в которой заполнятся 10 ячеек 1-й строки – диапазон для построения диаграммы. Диаграмма будет построена в отдельной книге (рис.5).

Рис.5
Тема 2. Буфер обмена данными
Содержание темы:
Программирование буфера обмена в среде Visual Basic
Методы объекта Clipboard.
Примеры и задачи: программирование обмена данными между приложениями через буфер обмена.
2.1 Буфер обмена данными в VB
Технология обмена данными DDE позволяет создавать динамическую связь между приложениями, при которой изменения данных на сервере отображаются и у клиента. Однако такую связь надо тщательно программировать, кроме того, она работает достаточно медленно.
В простых случаях, когда не требуется устанавливать связь между данными на сервере и данными клиента, используется буфер обмена. Его роль играет программа Clipbrd.exe, содержащаяся в папке system32, окно которой представлено на рис.6.

Рис.6
Так как буфер обеспечивает обмен данными между различными приложениями, то он поддерживает форматы данных различных типов. Доступные форматы выбираются из меню Вид. Например, текст документа MSWord будет доступен в форматах (рис.7):
Рис.7
Таким образом, сервер копирует данные в буфер, а клиент выбирает их из буфера в нужном формате.
Доступ к буферу обмена в VB обеспечивает объект Clipboard.
2.2. Методы объекта Clipboar.
Для работы с текстами и графикой объект Clipboard имеет разные методы SetText и GetText – для работы с текстами; SetData и GetData – для работы с графикой.
Метод SetText – записывает текстовую строку в буфер обмена, заменяя текущее его содержимое. Синтаксис метода:
Clipboard.SetText [.format]
Формат указывает, в каком формате будет записана строка.
Метод GetText – возвращает содержимое буфера в виде текстовой строки. Метод вызывается как функция. Синтаксис метода:
Text=Clipboard.GetText ([format])
Метод SetData – вставляет в буфер графические данные заданного формата. Синтаксис метода:
Clipboard.SetData [.format]
Метод GetData– возвращает содержимое буфера в виде графического изображения. Метод вызывается как функция. Синтаксис метода:
Pict=Clipboard.GetData ([format])
Ниже приведены некоторые именованные константы форматов, которые используются при работе с данными (табл. 3).
Таблица 3
Константа
Значение
Описание.

vbCFLink
&HFFFFBF00
Информация обмена DDE

vbCFPTF
&HFFFFBF01
PTF формат

vbCFText
1
Текст (формат по умолчанию)

vbCFBitmap
2
.BMP формат

vbCFmetafile
3
.WMF формат

vbCFDIB
8
Независимое от устройства растровое изображение .DIB

vbCFPalette
9
Цветовая палитра

vbCFEmetafile
11
Расширенный метафайл .EMF

vbCFFiles
15
Список имен файлов

Замечание. Если при считывании формат не указан, нужный формат выбирается автоматически.
Метод GetFormat возвращает значение False или True в зависимости от того, содержит ли буфер обмена данные в указанном формате. Метод вызывается как функция. Синтаксис метода:
х=Clipboard.GetFormat ([format])
Метод Clear – удаляет содержимое буфера, используется перед экспортом данных в буфер. Синтаксис метода:
Clipboard.Clear
2.3. Примеры и задачи: программирование буфера обмена данными
Задача. Записать графические данные в буфер обмена данными и возвратить данные в другом формате.
Создать Visual Basic форму, на которой разместить элементы управления Picture1, Picture2, Image1 и командную кнопку.
В модуле формы для кнопки создать код:
Private Sub ПУСК_Click()
Picture1.Picture = LoadPicture("C:\Program Files\Microsoft Office\media\office10\autoshap\BD18190_.wmf")
Clipboard.Clear
Clipboard.SetData Picture1.Picture, vbCFMetafile
Picture2.Picture = Clipboard.GetData
Clipboard.SetData Picture1.Image, vbCFBitmap
Image1.Picture = Clipboard.GetData
End Sub
Результат операции обмена представлен на рис.8:

Рис.8
Самостоятельные задания. Выполнить запись текстов в буфер в различных форматах и по требованию пользователя возвратить текст в данном формате (или сообщить, что формат недоступен. Пример интерфейса приведен на рис.9)

Рис.9
Тема 3. OLE-технологии
Содержание темы:
Представление OLE-данных
Элемент управления OLE-контейнер
Создание OLE-объектов
Программирование OLE-контейнера
Объекты OLE как элементы управления
OLE-Automation
3.1. Представление OLE-данных
Термин OLE (сокращение от Object Linking and Embedding -связывание и внедрение объектов) – это метод, позволяющий редактировать данные из одного приложения в другом или переносить их в другое приложение. К OLE непосредственно относится понятие контейнер. Контейнером здесь может служить документ (например, документ Word или книга Excel), форма Vb-проекта и пр.Контейнер может принимать один или несколько объектов, поэтому, воспользовавшись OLE, можно формировать документы из нескольких источников данных. Например, если в книгу Excel внедрено изображение из Paint, то в этом случае Excel является контейнером, изображение – объектом, а приложение Paint - сервер-приложением.
Виды данных объекта.
Каждый объект имеет два различных вида данных:
Данные представления (Presentation Data, PD)
Естественные данные (Native Data, ND)
Данные представления служат для передачи информации о том, каким образом данные отображаются в исходном приложении. Естественные данные – это сами данные. Например, таблица из Excel должна быть представлена в табличной форме (PD), а содержимое таблицы, то есть значения в ячейках, – это естественные данные (ND). В этом заключается одно из отличий OLE от DDE. При DDE переносятся только естественные данные. За представление данных отвечает целевое приложение.
С OLE-объектами можно осуществлять одну из двух операций: связывание или внедрение. При связывании объекты содержат данные представления и ссылку на естественные данные. Это означает, что естественные данные находятся вне контейнера (в другом файле, например), а данные представления – с объектом-контейнером.
При внедрении как естественные данные, так и данные представления хранятся в объекте-контейнере. Поэтому данные недоступны для других приложений и не существуют в виде отдельных файлов.
Другая возможность OLE – OLE Automation. Эта технология позволяет работать с различными объектами как с элементами управления. Используя OLE Automation, можно оперировать связанными объектами при помощи команд (в большинстве случаев имеются в виду макрокоманды связанных объектов, например, команды VBA)
Рассмотрим несколько возможностей использования OLE-технологий в VB.
3.2. Элемент управления OLE-контейнер
Создание OLE-объектов
Наиболее простой способ вставить OLE-объект в VB-проект – разместить на форме элемент управления OLE-контейнер. После добавления OLE –контейнера отображается диалоговое окно вставки OLE-объекта, в котором можно создать новый объект или создать его из файла, указав, будет это внедренный или связанный объект (рис. 10)

Рис.10
В зависимости от выбора пользователя OLE-контейнер будет содержать данные представления и/или естественные данные и предоставлять некоторые возможности для их редактирования. На рис.11 показан пример выбора нового точечного рисунка для размещения в элементе управления OLE1 и создание из файла точечного рисунка – в элементе OLE2.

Рис.11
Новый рисунок был создан на этапе проектирования непосредственно в поле элемента OLE1 инструментом ”карандаш” приложения Paint, в то время как рисунок OLE2 заранее был создан в приложении Paint и сохранен в файле. На рис.12 приведен пример вставки новый объектов: листа MSExcel и документа MSWord.





Рис.12
Созданный из файла объект можно отобразить на форме в виде значка, а также выставить флажок Связь для того, чтобы изменения в исходном файле отображались в OLE-контейнере (рис.13).


Рис.13
На этапе выполнения двойной щелчок на новом объекте загружает часть интерфейса исходного приложения (меню, например) и открывает данные для редактирования (рис.14)

Рис.14
Что касается объекта, созданного из файла, то на этапе выполнения двойной щелчок на объекте полностью разворачивает исходное приложение, в которое загружается данный файл.
Самостоятельные упражнения
Разместить на форме стандартного проекта элементы управления OLE-контейнер для создания объекта Диаграмма MSExcel
На этапе выполнения изменить исходные данные для диаграммы, пользуясь командами из меню Диаграмма, сохранить и закрыть проект.
Открыть разработанный проект и убедиться, что изменения не сохранились.
Программирование OLE- контейнера
Большинство операций по проектированию OLE-контейнера можно выполнить в диалоговом режиме на этапе разработки, как это было показано выше. Однако часто бывает полезным создавать программные коды для более гибкого управления возможностями OLE-контейнера.
Создание внедренного объекта осуществляется методом CreateEmbed. Синтаксис метода:
CreateEmbed <документ-источник>,<класс>
При вызове этого метода достаточно указать имя класса внедряемого объекта. Например,
OLE1.CreteEmbed ””,”Word.Document”
Для связанного объекта используется метод CreteLink, в качестве параметра которого надо указать источник данных, то есть имя файла и раздел данных. Синтаксис метода:
OLE1.CreteLink ”<полное имя файла>”,”<раздел данных>”
Например:
OLE1.CreteLink ”С:\table1.xls”,”C1R1
Упражнение
Создать в Excel книгу Book.xls с непустой ячейкой А1 и сохранить в корне диска С:.
Разместить на форме кнопку <ПУСК>; OLE1 и OLE2, отменив вставку объекта.
Написать код на кнопку:
Private Sub ПУСК_Click()
OLE1.CreateEmbed "", "Word.Document"
OLE2.CreateLink "C:\Book.xls", "R1C1"
End Sub
На рис.15 приведен результат выполнения проекта.

Рис.15
Как становится ясно из самостоятельного упражнения предыдущего пункта, для того чтобы при следующем запуске приложения в контейнере находился тот же OLE-объект, его необходимо сохранять. Сохранение данных в двоичном формате применяется к внедренным объектам, так как связанные объекты сохраняются приложением-источником. Для этого используется метод SaveToFile. Приведем пример кода для созранения данных:
Fn=FreeFile
Open “C:\DATA.OLE” For Binary As Fn
OLE1.SaveToFile Fn
Close #Fn
Загрузка объектов производится аналогичным образом при помощи метода ReadFromFile
Самостоятельное упражнение
На форме стандартного проекта разместить OLE-контейнер с внедренным документом Word и добавить код, сохраняющий данные. На этапе выполнения ввести текст в документ, сохранить и закрыть проект.
Открыть проект и убедиться, что данные созранились.
3.3. Объекты OLE как элементы управления
Наряду с использованием элемента управления OLE-контейнер, VB позволяет добавлять любые объекты, обладающие OLE возможностям из диалогового окна Components (вкладка Insertable Objects, рис.16), выводить их на панель инструментов и использовать в качестве элементов управления.

Рис.16
После добавления значок вставляемого объекта, например, Лист MS Excel появится на панели инструментов, после чего он может быть помещен на форму.
Упражнение
Вывести на панель инструментов значок объекта Лист MS Excel и разместить объект на форме.
Записать следующий код для формы:
Private Sub Form_Load()
Sheet1.object.sheets(1).cells(1).Value = "Звонить"
Sheet1.object.sheets(1).cells(2).Value = "911"
End Sub
Результат выполнения представлен на рис.17

Рис.17
Заметим, что все добавляемые таким образом объекты не имеют особых свойств и методов и интересны в связи с технологией OLE-Automation.
3.4. OLE-Automation
Если серверное приложение поддерживает технологию OLE-Automation, то в клиентском приложении с ним можно работать как с элементом управления. Для OLE-Automation также необходим OLE-объект. Его можно создать, присвоив ссылку объектной переменной. Для этого с помощью команды References меню Project библиотеку объектов серверного приложения следует включить в приложение VB, после чего объекты серверного приложения станут доступны в коде VB вместе со своими свойствами и методами.
Упражнение
Подключить библиотеку Microsoft Word Object Library, Microsoft Office Object Library.
Создать на форме кнопку с кодом:
Private Sub Команда1_Click()
Dim ww As New Word.Application
ww.Visible = True
ww.Documents.Add
Selection.Font.ColorIndex = wdRed
With ww.Selection.Font
.Name = "Times New Roman"
.Size = 10
.ColorIndex = wdRed
.Scaling = 100
.Animation = wdAnimationLasVegasLights
End With
ww.Selection.Font.Bold = wdToggle
ww.Selection.TypeText "Подключение приложения Word"
ww.Quit
End Sub
В результате будет создан новый документ Word, введен и отформатирован текст, после чего приложение будет закрыто с сохранением документа (рис.18)



Рис.18

Приведенный пример демонстрирует, что после того, как объект создан, с ним можно работать с помощью языка макросов серверного приложения.
OLE-оъект можно подключить не только из библиотеки, но также из файла (например. *.DOC, *.XLS). Для этого предназначена функция GetObject, которая возвращает ссылку на объект из файла. Синтаксис:
Set <переменная>=GetObject(<полное имя файла>,<класс>)
Рассмотрим пример создания связанного объекта.
Упражнение
Создать документ MS Word 777.doc и сохранить его в корне диска C:
Разместить на форме элемент OLE1
Добавить следующий код
Private Sub Form_Load()
Dim Vary As Object
Set Vary=GetObject(“С:\777.doc”,”Word.Document”)
OLE1.Createlink “C:\”&Vary
End Sub
В результате в поле элемента OLE1 будет загружен текст из файла 777.doc (рис.19)

Рис.19
В заключении отметим, что список доступных элементов, методов и свойств связанного объекта можно получить из каталога объектов (рис.20).
Рис.20
При добавлении ссылки на соответствующую библиотеку отдельные объекты можно переносить прямо из каталога объектов.











13PAGE 15




13PAGE 15




13PAG
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Root Entry

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

  • doc 3528729
    Размер файла: 726 kB Загрузок: 0

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