Шаг 5.
Вкладка System. Компонент TOLEContainer

    На этом шаге мы рассмотрим компонент TOLEContainer.

    Компонент TOleContainer является удобным контейнером для размещения связанного или внедренного OLE-объекта (Object Linked or Embedding - связывание или внедрение объекта). Такие объекты (таблицы, картинки, фрагменты текста и т.п.) на форме Delphi-программы выглядят как обычно или заменяются значками. Особенностью OLE-объекта является то, что его активизация (обычно двойным щелчком мышью) приводит к активизации связанной с объектом программы, которая называется OLE-сервером и которая после загрузки показывает на экране свое окно и предоставляет пользователю средства редактирования объекта.

    Типичными OLE-серверами являются такие системные утилиты, как Paint и Notepad, текстовый процессор Word, табличный процессор Excel и др.

    Чтобы наглядно продемонстрировать возможности компонента, проделаем следующее действия.

    Запустим программу и дважды щелкнем на изображении мышью. После паузы, вызванной загрузкой программы-сервера, мы увидем окно, показанное на рис.2.


Рис.2. Работа с контейнером OLE

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

    Компонент может создавать как связанные, так и внедренные объекты и открывать окно сервера как в отдельном окне, так и в окне содержащей его программы-клиента. В последнем случае при запуске сервера происходит автоматическая замена пунктов главного меню программы с групповыми индексами 1, 3 и 5 (если они есть - вот почему в примере вставлено главное меню с незадействованной командой Файл) пунктами главного меню сервера, а также вставка в окно программы инструментальных панелей сервера. Если компонент открывается в окне клиента, его свойство Align (или такое же свойство панели, на которую он помещен) должно иметь значение alClient.

    Свойства компонента TOleContainer:

Таблица 1. Свойства компонента TOleContainer
Свойство Описание
Property AllowActiveDoc: Boolean; Определяет поддержку интерфейса IOleDocumentSite. При установке значения True контейнер OLE размещает элементы ActiveDoc (DocObject).
Property AllowInPlace: Boolean; Определяет способ размещения OLE-сервера. Если имеет значение True и свойство Icon = False, окно сервера с редактируемым объектом размещается в пределах компонента, в противном случае создается отдельное окно для сервера (независимо от значения Icon).
TAutoActivate = (aaManual, aaGetFocus, aaDoubleClick);
Property AutoActivate: TAutoActivate;
Определяет способ активизации OLE-объекта:
  • aaManual - активизируется путем программного вызова метода DoVerb (ovShow);
  • aaGetFocus - активизируется при получении фокуса ввода;
  • aaDoubleClick - активизируется при двойном щелчке мышью.
Property AutoVerbMenu: Boolean; Если имеет значение True, для компонента автоматически создается вспомогательное меню, содержащее доступные команды OLE-сервера.
Property CanPaste: Boolean; Имеет значение True, если буфер обмена (clipboard) содержит OLE-объект (или связь с ним), который(ую) можно вставить в компонент. Доступно только для чтения.
Property CopyOnSave: Boolean; Если содержит True, перед сохранением объекта в файле или потоке данных он предварительно сжимается для экономии размеров файла (потока данных). Если в компоненте размещен очень большой объект и динамической памяти может не хватить для создания временной копии сжатого объекта, в свойство следует поместить значение False.
Property Iconic: Boolean; Содержит True, если объект будет заменяться значком OLE-сервера, и False, если объект изображается так, как он появится в окне сервера.
Property Linked: Boolean; Содержит True, если объект связан с программой, и False - если является ее частью (внедрен в нее). Доступно только для чтения.
Property Modified: Boolean; Содержит True, если объект был изменен (в том числе заменен другим или уничтожен).
Property NewInserted: Boolean; Содержит True, если объект был заново создан с помощью метода InsertObjectDialog. В этом случае вызывайте метод DoVerb (ovShow), чтобы показать объект в окне сервера. Доступно только для чтения.
Property ObjectVerbs: TStrings; Содержит список команд, которые программа может посылать серверу. Доступно только для чтения.
Property OldStreamFormat: Boolean; В это свойство следует поместить True перед чтением объекта из файла или потока данных, если объект был создан версией Delphi 1.
Property OleClassName: String; Содержит имя класса, под которым (именем) был зарегистрирован OLE-сервер в реестре Windows. Доступно только для чтения.
Property OleObject: Variant; Содержит ссылку на OLE-объект.
Property PrimaryVerb: Integer; Содержит индекс умалчиваемой команды для OLE-объекта.
TSizeMode = (smClip, smCenter, smScale, smStretch, smAutoSize);
Property SizeMode: TSizeMode;
Определяет способ размещения OLE-объекта в контейнере:
  • smClip - отсекаются любые части объекта, выходящие за границы контейнера;
  • smCenter - центрируется в контейнере;
  • smScale - масштабируется так, чтобы целиком заполнить границы контейнера;
  • smStretch - масштабируется так, чтобы не нарушились пропорции объекта;
  • smAutoSize - изменяются границы контейнера, чтобы полностью отобразить объект без искажений.
Property SourceDoc: String; Содержит имя файла для связанного объекта.
type TObjectState = (osEmpty, osLoaded, osRunning, osOpen, osInPlaceActive, osUIActive);
Property State: TObjectState;
Определяет состояние OLE-объекта:
  • osEmpty - контейнер не содержит объект;
  • osRunning - запущен OLE-сервер;
  • osOpen - объект открыт в отдельном окне;
  • osInPlaceActive - объект открыт в окне контейнера, но сервер еще не заменил команды меню и инструментальные панели программы на свои (промежуточные состояния osUIActive);
  • osUIActive - объект открыт в окне контейнера.

    Методы компонента TOleContainer:

Таблица 2. Методы компонента TOleContainer
Метод Описание
Procedure Close; Закрывает сервер. Все сделанные к этому моменту изменения в объекте автоматически сохраняются.
Procedure Copy; Копирует объект в буфер обмена.
Procedure CreateLinkToFile(const FileName: String; Iconic: Boolean); Создает связанный объект по имени файла FileName. Параметр Iconic содержит True, если изображение объекта заменяется значком.
Procedure CreateObject(const OleClassName: String; Iconic: Boolean); Создает внедренный объект по имени класса сервера OleClassName. Параметр Iconic содержит True, если изображение объекта заменяется значком.
Procedure CreateObjectFromFile(const FileName: String; Iconic: Boolean); Создает внедренный объект по имени файла FileName. Параметр Iconic содержит True, если изображение объекта заменяется значком.
Procedure DestroyObject; Уничтожает объект без сохранения сделанных в нем изменений.
Procedure DoVerb(Verb: Integer); Требует от объекта выполнить действие с индексом Verb из списка ObjectVerbs.
Function GetlconMetaPict: HGlobal; Возвращает указатель на распределенный в куче метафайл для прорисовки значка объекта на другой канве.
Function InsertObjectDialog:Boolean; Создает и показывает диалоговое окно создания объекта. Возвращает True, если пользователь закрыл окно щелчком на кнопке ОК.
Procedure LoadFromFile(const FileName: String); Загружает объект из файла FileName.
Procedure LoadFromStream (Stream: TStream); Загружает объект из потока данных Stream.
Function ObjectPropertiesDialog: Boolean; Создает и показывает диалоговое окно изменения свойств объекта. Возвращает True, если пользователь закрыл окно щелчком на кнопке ОК.
Procedure Paste; Создает объект но данным, хранящимся в буфере обмена.
Function PasteSpecialDialog: Boolean; Создает и показывает диалоговое окно специальной вставки объекта. Возвращает True, если пользователь закрыл окно щелчком на кнопке ОК.
Procedure Run; Запускает сервер, но не активизирует объект. Активизация объекта при запущенном сервере происходит значительно быстрее.
Procedure SaveAsDocument(const FileName: String); Сохраняет объект в файле FileName с использованием формата OLEDocument.
Procedure SaveToFile(const FileName: String); Сохраняет объект в файле FileName.
Procedure SaveToStream(Stream: TStream); Сохраняет объект в потоке данных Stream.
Procedure UpdateObject; Обновляет объект, вновь загружая его из источника.
Procedure UpdateVerbs; Обновляет список ObjectVerbs (некоторые команды могут его изменить, например, команда Play может заменить Play на Stop).
Property OnActivate: TNotifyEvent; Возникает сразу после активизации объекта.
Property OnDeactivate: TNotifyEvent; Возникает сразу после перехода объекта в неактивное состояние.

    Дополнительную информацию по этому компоненту можно получить здесь.

    На следующем шаге мы рассмотрим остальные компоненты вкладки System.




Предыдущий шаг Содержание Следующий шаг