Справочник по компонентам 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;