Примечание: Можно щелкнуть по клавише Cancel, если надо установить свойства OLE при помощи кода программы. В этом случае отпадает необходимость в работе с диалоговыми панелями. Несомненно, что если создать исполняемый файл с установленной в момент разработки приложения связью OLE, то размер этого файла будет намного больше, чем в случае установки связей OLE при помощи кода в момент выполнения приложения.
Меню Paste Special
Иногда бывает необходимо установить связь или встроить объект, используя информацию, хранящуюся в буфере папки обмена Windows, путем установки свойств SourceDoc и Sourceltem. Для этого сперва нужно скопировать данные из приложения в буфер папки обмена, воспользовавшись находящейся в приложении командой Copy. После этого следует использовать диалоговую панель Paste Special, которая всегда доступна во время разработки приложения при нажатии правой кнопки мышки, при условии, что фокус находится на элементе управления OLE. В появившемся всплывающем меню надо выбрать пункт Paste Special. Диалоговая панель автоматически проверит содержимое буфера папки обмена для установки соответствующих свойств 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: