Справочник по компонентам Delphi. Часть 3 - Активизация загруженного объекта OLE
ОГЛАВЛЕНИЕ
Активизация загруженного объекта OLE
Загруженный объект OLE можно активизировать (то есть вызвать его сервер) тремя способами:
(Рb) property AutoActivate: TAutoActivate;
TAutoActivate = (aaManual, aaGetFocus, aaDoubleClick) ;
Типичным способом (принятым по умолчанию) является двойной щелчок (aaDoubleClick). При установленном aaGetFocus активизация происходит при получении объектом фокуса ввода. Наконец, aaManual обязывает активизировать объект OLE установкой в True одного из свойств:
property Active: Boolean; property InPlaceActive: Boolean;
Различие между ними в том, что второе (по возможности) осуществляет активизацию "по месту".
Запуск и работа сервера OLE может быть длительным процессом. На время, пока объект загружается в сервер, в контейнере устанавливается флаг:
(Ro) property InActivation: Boolean;
После того, как сервер OLE полностью активизировался, происходит событие
(Рb) property OnActivate: TNotifyEvent;
и устанавливается в True свойство:
property Modified: Boolean ;
Если при этом вы снова переключитесь на приложение Delphi, то увидите, что на время работы сервера клиентская область контейнера заштриховывается.
Свойство
(Рb) property Zoom: TZoomFactor;
TZoomFactor = (z025,z050,zlOO,zl50,z200);
показывает, с каким масштабом отображаются объекты OLE внутри контейнера (при этом размеры самого контейнера остаются неизменными; если при увеличении часть изображения объекта выходит за границы контейнера, она отсекается).
Взаимодействие сервера OLE со строкой состояния осуществляется посредством обработки событий:
property OnStatusLineEvent: TStatusLineEvent;
TStatusLineEvent = procedure(Sender: TObject; Msg: String) of object;
Контейнер получает от сервера извещение о наступлении такого события. Он должен обработать это сообщение, например, отобразив где-либо строку Msg.
Инициировать это событие можно также при помощи процедуры:
procedure DoStatusLineMsg (Msg :String);
Контейнер может выгружать/загружать содержимое в поток и буфер обмена:
procedure LoadFromFile(const FileName: strings-procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName: strings-procedure SaveToSCream(Stream: TStream);
procedure CopyToCUpboard (Clear : Boolean);
Параметр Clear в последней процедуре означает необходимость очистки предыдущего содержимого.
TOLEContainer является оконным элементом управления и поддерживает все соответствующие возможности: обработку сообщений от мыши и клавиатуры, фокус ввода, интерфейс Drag&Drop и т. п.
Наконец, в TOLEContainer есть "выходы" на элементы внутреннего устройства интерфейса OLE. Использование этих возможностей не документировано, и более подробное их обсуждение имеет смысл отложить до выхода следующей версии продукта. Здесь мы их только перечислим:
function GetContainer: TIBCont;
property Storage: IStorage;
property Site: TIBSite;
property Part: IBPart;
property PartRect: TRect;
procedure DeleteSite;
procedure DeleteStorage;