Курс лекций по V B 5.0
поиск, сортировка) осуществляются DAO посредством объектов Recordset.
Объект Recordset представляет записи исходной таблицы или записи,
получаемые в результате выполнения запроса. Существуют 5 типов объектов
Recordset:
Объект Recordset типа table работает с локальной таблицей базы данных или
вешней базы данных, созданной MS Jet. Этот объект можно индексировать,
используя индекс, созданный для исходной таблицы, что намного ускоряет
сортировку и поиск по сравнению с другими типами объектов Recordset.
Объект Recordset типа dynaset (динамический набор) создается для локальных
или связанных таблиц или с результатами запросов. Фактически, это набор
ссылок на записи одной или более таблиц. С помощью dynaset можно получать и
модифицировать данные более, чем одной таблицы, включая связанные таблицы
из других баз данных. Набор dynaset и его исходные таблицы модифицируют
друг друга. Dynaset - наиболее гибкий и мощный тип набора записей, хотя
поиск в них работает не так быстро, как в случае table.
Объект Recordset типа snapshot (моментальный снимок) содержит фиксированную
копию данных в состоянии на момент создания snapshot. Snapshot, созданный
на базе источника данных MS Jet, не может быть обновлен. Snapshot требует
меньших затрат обработки, чем dynaset или table, и запросы в них
выполняются быстрее.
Объект Recordset типа forward- only (листаемый снимок, только вперед),
обеспечивает подмножество функций snapshot. Он предоставляет меньше всего
возможностей, но зато самое высокое быстродействие. Он не является
обновляемым, и он позволяет перемещаться по записям только в прямом
направлении.
Объект Recordset типа dynamic - результирующий набор запроса одной или
нескольких исходных таблиц, в котором можно добавлять, изменять или удалять
записи.
Выбор того или иного типа набора записей зависит от того, какие
функции необходимо выполнить, нужно ли изменять или просто просматривать
данные. Обычно Объект Recordset типа table почти всегда обеспечивает
наивысшую эффективность.
Создание перемещений RecordSet
Для этого используется метод OpenRecordSet
Set rstNew = dbs.OpenRecordSet(“Customers”, dbs.Open RecordSet),
где rstNew - переменная, dbs.OpenRecordSet(“Customers”, dbs.Open
RecordSet) - ссылка на объект, возвращаемый методом OpenRecordSet.
Этот метод доступен не толко для объекта Database, но и Connection,
TableDef, QueryDef и существующих наборов RecordSet.
Set rstNew = qdf.OpenRecordSet
Например, создается объект RecordSet из сохраненного в текущей БД
запроса.
Dim dbs As Database, Rst As RecordSet
Set dbs=OpenDatabase (“Nwind.mdb”
[ Set rst = dbs.OpenRecordSet (“Сохраняет_Запрос”)]
или если сохранение запроса не существует
Dim strQuerySQL As String
Set dbs=OpenDatabase (...
StrQuerySQL=“Select * From Products”_ & “Order by ProductName”
Set rst=dbs.OpenRecordSet (strQuerySQL)
Перемещение по набору записей
Методы MoveFirst, MoveLast, MoveNext, MovePrevious - перемещает
указатель.
Move [n]
Переделы набора записей определяется свойствами BOF и EOF, количество
записей свойством - RecordCount.
Найти определенную запись в наборе можно с помощью метода Seek (для
Table) и Find (dynaset, snapshop): FindFirst, FindLast, FindNext,
FindPrevious.
Например
rstOrderDetails.Find “Order ID= ” & rstOrders.[Order ID] - для первой
записи в Orders найти .... запись в OrderDetails
rst Suppliers.Index=“CompanyName”
rst Suppliers.Seek “=” str CompanyNAme
If rst Suppliers. NoMatch Then ...
(используется текущий индекс таблицы, определенной свойством Index).
Свойство NoMatch используется для проверки найденной записи, критерий
поиска.
После создания объекта RecordSet типа table или dynaset в переменной
можно удавлять или добавлять, модифицировать новые записи (Update, Delete,
AddNew).
.... модификации намного эффективнее с помощью запросов SQL.
Dim dbs As DataBAse, qdfChangeTitles As QueryDef
Set dbs = Open Database (‘ Nwind.mbb)
Set qdfChangeTitles=dbs.Create QueryDef (“ “)
qdf ChangeTitles.SQL=“Update Employers” & “Where Title = ‘Бухг’”
После извлечения записи можно обращаться к ее отдельным полям через
коллекцию Fields объекта RecordSet по его свойству Name (имя столбца в
таблицк)
rst Employers.Fields (“LastName”)
или rstEm.LastName
или rstEm.Fields(0) - индексом в коллеции
Типы данных объекта Field: dbChar, bdByte, dbDouble, dbInteger,
dbSingle, dbLong, dbText.
При работе с данными Field используется его свойство Value.
Sub Change Title( )
rstEmployces.LastName.Value=strName
Dim dbsSales As Database
Dim rstEmp As RecordSet, fldTitle As Field
Dim wspCurrent As WorkSpace
Set wspCurrent As WorkSpace
Set wspCurrent=dbEngine WorkSpace(0)
Set dbsSales=OpenDatabnase (“Nwind.mdb”
Set rstEmp=dbsSales.Open RecordSet(“Employes”, dbOpenTable)
Set fldTitle=rstEmp.Fields(“Title”)
rst Emp.MoveFirst
Do Until rstEmp.EOF
If fldTitle=“Ком. предст.” Then
rstEmp.Edit
fldTitle=“Ком. агент”
rstEmp.Update
End If
rstEmp.MoveNext
Loop
rstEmp.Close
dbsSales.Close
End Sub
Создание запросов
Методв CreateQueryDef:
Set запрос = БД.CreateQueryDef ([имя] [, строка SQL])
- запрос - объектная переменная, в которых будет храниться ссылка на
вновь создаваемый объект типа QueryDef
- БД - объектная переменная, хранящая ссылку на объект Database, в
коором будет храниться создаваемый объект QueryDef
- имя - имя запроса
- строка SQL - выражение SQL, ..... объект QueryDef
Например,
Dim dbs As Database
Dim myqdf As QueryDef
SQL str = “Select * From Products”
SQL str = SQl str & “Where price >1000 and price <2000”
SQL str = SQL str “Order by ProductName”
Set myqdf = dbs Create QueryDef (“NewProducts”, SQL str)
Связь с другими приложениями Windows
VB позволяет использовать многозадачность Windows, позволяя
активировать любое из заданных приложений, либо посылать напрямую команды
активному приложению из проекта VB. Обмен информацией между приложениями
Windows средствами VB осуществляется одним из трех способов:
1) использование буфера обмена Clipboard;
2) технологии DDE - динамический обмен данных;
3) технологии OLE - связывание и встраивание объектов.
Буфер обмена
Буфер обмена позволяет обмениваться текстовыми и графическими данными
между несколькими приложениями с помощью операций вырезки - вставки.
Методы объекта Clipboard
Метод Clear - очищает буфер обмена перед его использованием,
Clipboard.Clear
Метод SetText - посылает текстовую информацию, содержащуюся в
строковой переменной или строковом выражении в буфер, уничтожая старую
информацию.
Clipboard.SetText.StringData
Метод GetText - возвращает копию текста, хранящегося в буфере обмена
(операция вставки). Этот метод используется как обычная функция:
txtUser.SelText= Clipboard.GetText( ) - вставляет содержимое буфера в
текстовое поле.
При работе с буфером обмена и полями ввода используются операции
выделения текста. Выделенному тексту присущи три свойства:
SelStart - номер позиции текста, с которой начинается выделение.
txt.User.SelStart = 0 - выделение текста с начала поля ввода.
SelLength - количество символов в выделенном фрагменте текста.
txtUser. SelLength = Len (txt.User.Text) - выделены все символы поля
ввода.
SelText - выделенный фрагмент текста. Если текст не выделен, то = “ “
A$ = txtUser.SelText - переменная A$ примет значение выделенной
строки.
Пример. Процедура копирования в буфер выделенного текста
Private Sub Copy_Click ()
Clipboard.SetText txtUser.SelText
Enb Sub
Операция вырезать:
Private Sub Cut_Click
Clipboard.SetText txtUser.SelText
txtUser.SelText = “ ”
Enb Sub
Операция вставки:
Private Sub Paste_Click
txtUser.Text = Clipboard.GetText( )
Enb Sub
Перенос графических изображений с помощью буфера обмена.
Чтобы правильно восстановить графическое изображение из буфера обмена,
VB должен знать его тип.
Таблица типов данных буфера.
|Символьные константы |Значение |Формат |
|VbCFText |1 |текст .txt |
|VbCFBitmap |2 |побитовое изображение .bmp |
|VbCFMetafile |3 |побитовое изображение .wmf |
|VbCFDib |8 |побитовое изображение .dib |
|VbCFPalette |9 |цветовая палитра |
Можно узнать тип данных в буфере с помощью метода GetFormat:
Clipboard GetFormat (Format %), где Format % - значение или константа
из таблицы. Возвращает значение True, если данные из буфера имеют
соответствующий формат.
If Clipboard.GetFormat (2) Then MsgBox “Побитовое изображение”.
Для получения изображения из буфера используется метод GetData:
Clipboard. GetData (Format %), где Format %
Пример.
If Clipboard. GetFormat (VbCFText) Then
txtUser.Text = Clipboard.GetText ( )
Else If Clipboard.GetFormat (VbCFBitmap) Then
pic My.Picture = Clipboard. GetData(VbCFBitmap)
Else If Clipboard.GetFormat (VbCFMetafile) Then
pic My.Picture = Clipboard. GetData(VbCFMetafile)
Else If Clipboard.GetFormat (VbCFDib) Then
pic My.Picture = Clipboard. GetData(VbCFDib)
Else MsgBox “Не определн графический объект”
End If
Копирование изображения из графического окна в буфер обмена в формате
побитового изображения:
Private Sub PictureCopy_Click( )
Clipboard.Clear
Clipboard.SetData Pic.My.Picture,2
DDE
При использовании метода DDE одно приложение Windows (клиент)
запрашивает у другого приложения (сервера) какую-либо информацию. Для VB в
качестве сервера может выступать текстовая форма, а клиентами могут быть
поля ввода, графические окна или надписи. Однако элементы управления на
форме могут также передавать информацию с помощью своих свойств. Любое
приложение может выступать одновременно и как клиент и как сервер:
Excel(VB(WinWord.
Для установки связи нужно знать имя соответствующего приложения,
например, WinWord, Excel, имя DDE для формы VB соответствующего имени
исполняемого файла, либо имени проекта без расширения, если в среде
разработки.
Кроме того, задается предмет DDE-связи, в частности, специфические
имена файлов. Например для Excel это .xls и .xle.
И третье, указывается, какая информация передается - элемент данных
DDE-связи. Например для Excel-сервера DDE элементом данных будет ячейка ...
Для VB как сервера DDE элементом данных будут графические окна, поля ввода,
надписи.
Свойства DDE.
LinkTopic формат: имя сервера \ имя приложения, например
Excel\ C:\ EXCEL\ Sheet1.xls
Можно устанавливать значение этого свойства для поля ввода,
графического окна, надписи. Изменение значения свойства приводит к закрытию
всех связей с данным приложением. Это позволяет приложению-клиенту
переключаться на другие объекты.
LinkItem - определяет конкретные данные, которые будут передаваться от
сервера к клиенту. Например, содержание ячейки первого столбца первой
строки листа Excel Ric1/
Синтаксис: [имя формы, ] имя элемента управления.LinkItem = Item $
Item $ - строкове выражение, которое определяет элемент данных сервера.
LinkMode - режимя связи: LinkMode = 1 - горячая связь, LinkMode = 2 -
холодная связь, LinkMode = 0 нет (связь разрывается)
Горячая связь - сервер посылает данные, содержащиеся в элементе связи
DDE, когда эти данные изменяются в приложении-сервере; холодная - клиент
должен требовать новой передачи данных.
События DDE
LinkOpen - генерируется всякий раз при установлении связи (например,
информация пользователю)
Private Sub picMy_LinkOpen (Cancel As Integer)
M$ = “DDE связь установлена с” + PicMy.LinkTopic “поданным”+
M$ = M$ + PicMy.LinkItem
MsgBox
End Sub
LinkClose - завершение сеанса DDE;
для формы - Private Sub frmMy_LinkClose( ),
для элемента управления Private Sub txtMy_LinkClose(Index As Integer)
LinkExecute - если клиенту необходима какая-либо информация от
сервера, когда клиент посылает команду серверу.
Private Sub Form_LinkExcecute(Command As String, As Integer )
LinkError - для обработки ошибок в сеансе связи
Private Sub FormMy_LinkError(LinkErr As Integer )
Методы DDE
LinkExecute - для посылки команд серверу DDE
элемент управления.LinkExecute Командная строка
LinkPoke - пересылка содержимого любого элемента управления DDE-
клиента серверу.
Например, txtMy.LinkPoke (посылает содержание .Text)
LinkRequest - посылка запроса DDE-серверу.
LinkMode = 2
txtMy.LinkRequest - запрос на пересылку информации в свойство Text
LinkSend - если форма выступает в качестве DDE-сервера и необходимо
послать содержание окна изображения.
picMy.LinkSend (при внесении существенных изменений в изображении).
OLE
OLE, сокращение от object linking and embedding (связывание и
встраивание объектов), сначала рассматривалась как технология, дополняющая
и расширяющая динамический обмен данными DDE. Впоследствии она далеко ушла
от своего начального предназначения. В частности, сейчас этот термин
рассматривается отдельно от других и имеет собственное предназначение.
Одним из отличий OLE от DDE является то, что переданный объект
полностью сохраняет свой внешний вид и свойства, которыми он обладал в
создавшем его приложении. Т.е. электронные таблицы представляются как
электронные таблицы, текстовые документы выглядят так же, как они выглядели
в текстовом процессоре и т.д. После того как в проект Visual Basic
добавляется контейнерный элемент OLE, по сути дела создается мост,
связывающий пользователя с другим приложением Windows, и этот элемент
выглядит точно так же, как он выглядел в другом приложении.
При работе с OLE первым и самым важным понятием является объект.
Объект представляет собой данные, которые поставляются приложением Windows,
поддерживающим OLE, например, для Excel это электронная таблица (или ее
часть). Для работы с объектами OLE необходимо использовать переменные типа
Object (см. главу II), а для передачи информации в эти объекты используется
тип данных Variant.
Для понимания смысла связывания представим себе группу, совместно
работающую над этой книгой. Кроме автора, в работе принимают участие
технический редактор, помощник редактора, корректор и многие другие.
Наиболее эффективным способом работы над книгой для такой группы будет
использование единого экземпляра документа с возможностью внесения
изменений в текст книги каждым участником рабочей группы. Заметим, что
необходимо использовать один экземпляр книги (например, на центральном
сервере); в этом случае группе не придется беспокоиться о том, что какие-то
важные исправления будут пропущены. (Выражаясь на жаргонном языке, это
позволяет работать в большей степени параллельно, чем последовательно,
нескольким участникам группы.) В случае со связанными объектами данные
остаются в приложении, которое их создало. Представим себе процесс
связывания как прикрепление связи к уже существующим данным. Технически при
связывании в приложение Visual Basic вставляется значок, указывающий на
связь, а изображение данных cохраняется в элементе управления OLE.
Идея встраивания находит применение в том случае, когда создается
документ, объединяющий различные приложения Windows "под одной крышей".
Встраивание в OLE позволяет пользовательским элементам встраивать внутрь
себя данные. Когда Visual Basic обращается к управляющему элементу OLE,
элемент переключается обратно в приложение, в котором он был создан, что
позволяет использовать возможности "родного" приложения для внесения в
элемент необходимых изменений.
Одной из основных задач, возложенных фирмой Microsoft на технологию
OLE, являлось разрушение у пользователей стереотипов, при которых
приложение рассматривалось в качестве важнейшей составляющей работы
пользователя. Вместо этого на первое место было поставлено понятие
документа. Например, предположим, что разрабатывается сложный отчет,
включающий в себя табличные данные и графические объекты. При этом надо при
работе с одной из частей документа использовать текстовый редактор, а с
другой - систему управления электронными таблицами. При использовании
технологии OLE другое приложение временно получает управление при работе со
специфическими данными, встроенными в элемент управления. При встраивании
объекта в клиентский управляющий элемент OLE ни одно другое приложение не
может получить доступ к этим данным (напротив, в случае связывания другие
приложения могут получить доступ к этим данным). Более того, приложение,
которое создало встроенные данные, будет автоматически запускаться в тот
момент, когда пользователь начнет работу с этими данными.
Другая часть OLE, называемая OLE Automation, позволяет управлять
другим приложением. Несомненно также и то, что приложения Visual Basic
могут управляться из других приложений. Например, из Visual Basic можно
управлять приложением Excel, используя его встроенную версию языка Visual
Basic, или можно управлять редактором Word, опять же используя встроенную в
него версию Visual Basic. (В системе Office'97 присутствует унифицированная
версия языка для всех его приложений, которая основывается на Visual Basic
for Application Version 5.0.)
И, наконец, необходимо отметить, что в настоящий момент OLE является
составной частью более общей технологии, которую очень часто называют
COM/OLE (сокращение СОМ происходит от component object model). Суть идеи
основывается на важности понятия объекта для современного программирования.
В 90-х годах стало ясно, что все большее количество людей считает пересылку
объектов по сети Internet достаточно легким делом, поэтому они вовсю
выступают за политику, которую можно условно назвать "объекты везде".
Использование COM/OLE представляется достаточно удобным способом пересылки
объектов по сети и даже, в скором времени, между различными платформами.
Использование OLE
Когда пользователь добавляет клиентский элемент управления OLE в
проект Visual Basic, фактически создается то, что фирма Microsoft называет
составным документом OLE (OLE compound document). (При создании клиентского
элемента управления Visual Basic выводит на экран диалоговую панель, в
которой запрашивается имя приложения, объект которого предполагается
вставить.) Клиентский элемент управления OLE поставляется со всеми версиями
Visual Basic. Его значок обычно находится в нижней части панели
инструментов и представляет собой сетку с надписью "OLE" внутри.
Точно так же, как и в случае с DDE, проект Visual Basic может
выступать как в роли приложения-клиента (или контейнера), которое получает
информацию, так и в роли приложения-сервера (или источника), которое
посылает информацию. В большинстве случаев при работе с OLE приложение
Visual Basic получает информацию, т.е. выступает в роли клиента. В любом
случае элемент управления OLE, который поставляется с Visual Basic,
является клиентским элементом управления и не позволяет приложению Visual
Basic выступать в роли OLE-сервера (хотя Visual Basic 5.0 позволяет это:
все, что необходимо, это написать код или свой собственный элемент, который
будет выступать в роли OLE-сервера).
Создание OLE-объектов
Как уже было отмечено ранее, OLE-объект представляет собой данные, с
которыми может работать элемент управления OLE. Это может быть графическая
диаграмма, группа ячеек, вся электронная таблица или часть документа
текстового процессора. Любое приложение, поддерживающее OLE, имеет
библиотеку объектов, каждый из которых может быть "отдан" другому
приложению. (Слово "отдан" является жаргонным и означает следующее: "вот
вещь, с которой можно работать. Кроме того, можно работать с ней следующими
установленными путями: ...") Перед тем как приступить к дальнейшему
описанию технологии ОLE, необходимо дать определение следующему термину:
класс OLE (OLE-class). Это приложение, которое предоставляет OLE-объект.
Любое приложение, поддерживающее технологию OLE, имеет уникальное имя
класса OLE, например, "WordDocument" или "ExcelWorksheet". (Необходимо
отметить, что в названии класса учитывается регистр символов.) Можно
получить список доступных имен классов, нажав на изображение эллипса в
свойстве Class в окне Properties для управляющего элемента OLE.
Существует четыре способа создания объектов OLE. Простейшим из них
является:
Встроить или установить связь с объектом для контейнерного элемента
OLE. Такой способ позволяет изменять объекты на форме во время
выполнения приложения и просто добавлять связанные объекты.
Описание более сложных методов приведено ниже.
Создание OLE-объекта при помощи панели инструментов
Для добавления OLE-объекта к панели инструментов необходимо выполнить
следующие шаги:
1. Выбрать Project\Components и перейти к закладке Insertable Objects.
2. Установить необходимый флажок типа объекта в появившейся диалоговой
панели.
Например, можно добавить объект Excel Worksheet в панель инструментов,
заполнив диалоговую панель Insertable Objects так, как показано на рисунке
справа.
Теперь, при применении выбранного инструмента к форме соответствующий
объект автоматически встраивается в приложение.
Доступ к объектам через пункт меню Project|References
Большинство современных OLE-компонентов приложений доступно через
диалоговую панель, появляющуюся при вызове пункта меню Project|References.
Эти библиотеки объектов очень полезны, так как они содержат описания всех
объектов, методов и свойств, которые можно просмотреть при помощи Object
Browser. Более того, всегда оказывается доступной справочная информация по
используемым форматам команд из Object Browser. Например, если добавить
подобным способом библиотеку объектов Excel в Visual Basic и затем
использовать Object Browser для ее изучения, то можно одним взглядом
определить необходимый синтаксис.
После того, как установлена ссылка на библиотеку объектов при помощи
диалоговой панели ProjectIReferences, можно воспользоваться функцией
CreateObject с предварительно определенной объектной переменной для
создания такого объекта в коде программы. Ниже приведен пример кода для
объекта электронной таблицы Excel:
Dim objExcel As Object
Set objExcel = CreateObject ("EXCEL.SHEET")
Приведенные выше две строки кода создают объектную переменную (в нашем
случае она имеет имя objExcel). Эта объектная переменная может быть
использована для управления электронной таблицей Excel.
Создание объектов, которые не поддерживаются библиотекой объектов
Библиотеки объектов не поддерживают некоторых объектов (таких, как
Word 6.0); хотя они и поддерживают технологию OLE, однако их поведение еще
недостаточно удовлетворительно. В частности, приложения, не поддерживающие
библиотеки объектов, могут не давать информацию об объектах, их методах и
свойствах. В таких случаях необходимо использовать функцию CreateObject для
создания ссылки на объект. Например:
Dim objWordBasic As Object
Set objWordBasic = CreateObject ("Word.Basic")
(He надо забывать установить объектную переменную в значение Nothing
после ее использования.)
Использование OLE в процессе разработки приложения
По сравнению с OLE 1.0 создание связей или встраиваний в процессе
разработки приложения стало намного проще. По существу, необходимо только
поработать с диалоговыми панелями, которые будут описаны в этом разделе.
После того, как пользователь добавит клиентский элемент управления OLE
в форму, немедленно появится диалоговая панель. (Чем больше приложений
установлено на компьютере, тем больше элементов будет видно.) На этой
панели приведены названия всех приложений Windows, объекты из которых можно
встроить в свое приложение. Можно иметь объекты, изображаемые значком, или
же с видимыми данными в элементе управления OLE. Для этого необходимо
установить флажок Display as Icon в правой части диалоговой панели. Два
переключателя в левой части панели предназначены для указания того,
предполагается ли работать с файлами, созданными соответствующими
приложениями (связанные объекты) или требуется вызвать другое приложение
для создания нового объекта (встраиваемые объекты). Если выбрать опцию
Create from File ( для создания связи с объектом, хранящимся в файле), то
на экране появится панель. Можно щелкнуть по кнопке Browse для открытия
диалоговой панели, позволяющей выбрать необходимый файл. После того, как
будут сделаны все необходимые действия, не надо забывать проверить флажок
Link.
Примечание: Можно щелкнуть по клавише Cancel, если надо установить
свойства OLE при помощи кода программы. В этом случае отпадает
необходимость в работе с диалоговыми панелями. Несомненно, что если
создать исполняемый файл с установленной в момент разработки
приложения связью OLE, то размер этого файла будет намного больше, чем
в случае установки связей OLE при помощи кода в момент выполнения
приложения.
Меню Paste Special
Иногда бывает необходимо установить связь или встроить объект,
используя информацию, хранящуюся в буфере папки обмена Windows, путем
установки свойств SourceDoc и Sourceltem. Для этого сперва нужно
скопировать данные из приложения в буфер папки обмена, воспользовавшись
находящейся в приложении командой Copy. После этого следует использовать
диалоговую панель Paste Special, которая всегда доступна во время
разработки приложения при нажатии правой кнопки мышки, при условии, что
фокус находится на элементе управления OLE. В появившемся всплывающем меню
надо выбрать пункт Paste Special. Диалоговая панель автоматически проверит
содержимое буфера папки обмена для установки соответствующих свойств OLE.
Совет: Контекстное меню контейнерного элемента управления OLE содержит
много полезных пунктов, поэтому следует отнестись к нему с вниманием.
Свойства OLE
Как наверное, читателю уже ясно, диалоговая панель дает простой путь
для установки свойств управляющего элемента OLE. Можно их изменять также
при помощи окна Properties или через код. (Это обязательно должно делаться
через код, если работа с элементами OLE идет во время выполнения
приложения).
Свойство SizeMode позволяет устанавливать, как будет выглядеть элемент
управления во время выполнения программы. Если надо растянуть изображение
по размерам управляющего элемента OLE, следует установить значение этого
свойства в I (vbOLESizeStretch). И, наконец, можно указать элементу, чтобы
он автоматически изменял свои размеры, установив значение свойства в 2
(vbOLESizeAutoSize).
Появляющаяся диалоговая панель также позволяет устанавливать
определяющее свойство Class, которое указывает на приложение, содержащее
данные. Свойство OLETypeAction определяет тип объекта, который будет
создаваться, т.е. будет ли он связанным, встроенным или и тем и другим
одновременно. Свойство SourceDoc содержит имя связанного объекта или файла,
использующегося в качестве шаблона для встроенного объекта. Свойство
Sourceltem используется только для связанных объектов и указывает ту часть
связанного документа приложения Visual Basic, которое будет с ним работать.
(Например, любая часть электронной таблицы может быть задана путем
установки этого свойства в значение типа "R1C1 :R1C10".)
Общие методы OLE-контейнера
И, наконец, существует ряд важных методов, которые могут быть
применены с контейнерными элементами управления OLE и которые позволяют
точно указать действия, которые необходимо произвести с OLE-объектом.
Требуется ли обновить объект, создать или удалить его, сохранить информацию
объекта в файле, считать ее из файла и многое другое. Далее мы вкратце
расскажем о наиболее общих методах работы с OLE-объектами.
CreateEmbed. Этот метод создает встроенный OLE-объект. Чтобы сделать
это, сперва необходимо установить (через диалоговую панель OLE или
посредством кода) оба свойства Class и OleTypeAllowed. Напомним, что
свойство OleTypeAllowed равно 0 для связывания, равно 1 для встраивания и 2
- для того и другого. Свойство Class устанавливает тип OLE-объекта. (Имя
класса доступно из диалоговой панели OLE или через окно Properties. Можно
использовать свойство OLEType для определения типа связи во время
выполнения приложения.) При создании нового встроенного OLE-объекта
необходимо, чтобы приложение, в котором он будет создаваться, было активным
(для этого можно использовать инструкцию AppActivate) или путь к нему
должен быть известен системе.
CreateLink. Создает связанный OLE-объект из существующего файла. Для
этого сперва надо установить свойства OleTypeAllowed и SourceDoc. В этом
случае OleType Allowed может быть равным 0 (связанный объект) или 2
(связанный и встроенный объект).
Свойство SourceDoc содержит имя файла для связанного объекта. Если
надо работать только с частью связанного объекта, следует установить
соответствующим образом свойство Sourceltem.
Точно так же, как и в случае со встраиванием документа, приложение
должно быть активным или же его путь должен быть известен системе.
Copy. Этот метод пересылает все данные и свойства связанного объекта в
буфер папки обмена Windows. Как связанная, так и встроенная информация
может быть скопирована в буфер папки обмена.
Paste. Копирует данные из буфера папки обмена в элемент управления
OLE. Не надо забывать установить свойство PasteOK элемента управления.
Update. Это очень важный метод, так как именно он передает данные из
приложения в элемент управления OLE.
Do Verb. Этот метод позволяет управлять OLE-объектом. Для его
использования необходимо передать параметр Verb, который указывает
действие, которое надо произвести над объектом.
Примечание: Если установить значение свойства AutoActivate элемента
управления в double-click (значение=2), то элемент управления OLE
автоматически будет активизировать текущий объект после того, как
пользователь дважды щелкнет по нему мышкой. Если приложение
поддерживает "In Place Activation", то можно сделать так, что
приложение будет активизироваться всякий раз, когда элемент управления
OLE будет получать фокус (для этого надо установить значение
AutoActivate в 1).
Close. Для OLE-объектов. Этот метод используется только для встроенных
объектов, так как он закрывает OLE-объект и прекращает связь с приложением,
которое отвечает за объект.
Delete. Этот метод следует использовать для удаления объекта. Объекты
OLE автоматически удаляются при закрытии формы.
SaveToFile. Этот метод жизненно важен для встроенных объектов OLE. Так
как данные управляющего элемента OLE принадлежат только самому OLE-объекту,
то они могут быть потеряны, если не написать соответствующий код,
использующий метод SaveToFile.
ReadFromFile. Этот метод считывает данные объекта из файла после того,
как они были там сохранены методом SaveToFile. Код, необходимый для
использования этого метода, похож на код, предназначенный для сохранения
данных в файле при помощи метода SaveToFile.
InsertObjDlg. При вызове этого метода появляется диалоговая панель
InsertObject, которую Visual Basic использует при помещении OLE-объекта на
форму. Во время выполнения приложения можно использовать этот метод для
обеспечения пользователю простого способа создания связанных и встроенных
объектов.
PasteSpecialDlg. Этот метод вызывает на экран диалоговую панель Paste
Special. Во время выполнения приложения эта диалоговая панель дает
пользователю возможность вставлять объекты из буфера папки обмена Windows.
Fetch Verbs. Используется для получения списка действий,
поддерживаемых приложением.
SaveToOLEIFile. Этот метод следует использовать для обеспечения
обратной совместимости с предыдущими версиями OLE.
OLE Automation (управление другими приложениями при помощи OLE)
Visual Basic является расширяемым языком программирования, в этом
заключается его основное достоинство. Однако не всем нравится необходимость
создания собственных элементов управления или библиотек динамической
компоновки DLL, которые дублируют возможности других приложений, таких, как
Word или Excel. В таких случаях можно воспользоваться технологией OLE
Automation, при помощи которой можно легко управлять другими приложениями.
При помощи Visual Basic можно создать приложение, которое будет управлять
данными и объектами других приложений.
Некоторые объекты, поддерживающие OLE Automation, также поддерживают
связывание и встраивание. Если какой-либо объект из контейнерного
управляющего элемента OLE поддерживает OLE Automation, можно получить
доступ к его свойствам и методам при помощи свойства Object. При
непосредственном создании объекта на форме или через код можно напрямую
использовать его свойства и методы. Полное обсуждение возможностей OLE
Automation выходит за рамки данной книги. Если после прочтения этой главы
захочется узнать побольше об OLE Automation, можно обратиться к
руководству, поставляемому с Visual Basic.
Использование OLE Automation
Как уже было показано раньше, можно создать ссылку на объект в коде
программы при помощи ключевого слова New, CreateObject или GetObject без
обращения к OLE-серверу, создавшему объект. Объекты таких приложений, как
Microsoft Word и Microsoft Excel, могут использоваться в качестве примера
типов объектов. Некоторые вспомогательные объекты, как, например, ячейка
электронной таблицы Excel, могут быть доступными только через методы более
высокоуровневых объектов.
Например, перейдем к пункту ProjectIProperties, затем выберем
библиотеку объектов Excel для доступа к ним через Visual Basic. Теперь
добавим к форме поле ввода. Теперь можно написать код OLE Automation,
который будет заполнять ячейки из второго столбца электронной таблицы Excel
последовательными значениями, после чего эти значения будут просуммированы,
а результирующее значение будет помещено в поле ввода на форме Visual
Basic:
Private Sub Form_Ciick()
Dim obj Excel As Object
Set obj Excel = CreateObject ("EXCEL .SHEET")
objExcel .Application .Visible = True
For I = I To 10
objExcel.Cellsd, 2).Value = I
Next I
objExcel. Cells (11, 2) .Formula = "=sum(BI.-BIG)"
Textl.Text=objExcel.Cells(ll, 2)
objExcel .Application.Quit
Set objExcel = Nothing
End Sub
И напоследок дадим несколько замечаний:
* OLE Automation требует определенного уровня знакомства с объектами
приложения, с которым надо работать. При этом очень часто
используется хитроумный синтаксис. (В этом деле Object Browser
поможет сэкономить много времени.)
* На Pentium 90 с 16 мегабайтами ОЗУ представленный фрагмент
программы выполняется примерно 0,6 секунды. А на Pentium 166 с 80
мегабайтами ОЗУ этот фрагмент выполняется практически мгновенно. Из
этого легко сделать вывод, что для действительно быстрой работы OLE
Automation необходим быстрый процессор и большой размер памяти на
компьютере.
* В предыдущем пункте было показано, что хотя OLE Automation является
действительно очень мощной технологией, она требует значительных
ресурсов для быстрого выполнения. Поэтому следует очень четко все
обдумать перед тем, как использовать OLE Automation в работе
приложения.
* Для определения типа аппаратного обеспечения можно использовать
вызовы функций Windows API. При этом большее внимание необходимо
уделить объему установленной памяти, чем типу и тактовой частоте
процессора. Не стоит и пытаться использовать OLE Automation, если
на компьютере пользователя установлено 4 мегабайта памяти, и
следует хорошенько подумать, прежде чем воспользоваться
возможностями OLE Automation на машине с 8 мегабайтами. OLE
Automation требует для нормальной работы, как минил1ум, 16
мегабайт, хотя предпочтительнее использовать эту технологию на
машинах с 32 и более мегабайтами ОЗУ.
Страницы: 1, 2
|