Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
384.51 Кб
Скачать

6.3.5.5.3. Методика создания приложения с ole-контейнером

Методика создания приложения с OLE-контейнером включает в себя следующие этапы.

  1. Создание формы с MDI - многодокументным интерфейсом.

  2. Разработка процедуры вставки объектов.

  3. Разработка процедуры переноса объектов из Clipboard.

  4. Разработка процедуры перетаскивания объектов.

  5. Разработка процедур поддержки хранения объектов в файлах.

1. Создание формы с mdi - многодокументным интерфейсом

Многодокументный интерфейс - это средство, позволяющее в приложении открывать много документов-файлов, каждый с своем окне. Окна, которые добавляются в приложение при открытии каждого документа, называются дочерними.

Создание MDI-приложения - простая задача для Delphi. Достаточно свойству FormStyle главного окна приложения придать значение fsMDIForm, затем добавить новую форму в приложение, свойству FormStyle которой придать значение fsMDIChild.

В дочернюю форму необходимо добавить компонент TOleConteiner.

Дадим следующие имена введенным объектам:

  1. главной форме - OLEFrameForm : TOLEFrameForm;

  2. дочерней форме - OLEObjectForm : TOLEObjectForm;

  3. OLE-контейнеру - OleContainer : TOLEContainer.

Разработка меню приложения

Объектно-ориентированное приложение, начиная с TurboVision DOS, работает следующим образом. Создается меню приложения, к позициям которого "привязываются" процедуры. При выборе необходимой позиции меню вызывается соответствующая процедура.

В нашем случае меню приложения может подвергнуться трансформации путем динамического добавления в него позиций.

Во-первых, оно трансформируется при открытии дочернего окна. Во-вторых, оно трансформируется при активизации сервера, поддерживающего OLE 2.0.

Позиции, в которые внедряются новые элементы меню дочерних окон и сервера, определяются свойством меню GroupIndex. Элементы старого меню могут быть "затерты", а могут быть сдвинуты. Если групповые индексы совпадают, то элементы меню сервера замещают соответствующие элементы меню контейнера. Элементы меню с большими индексами размещаются правее в строке меню.

Меню главного окна: File

New

Open c GroupIndex = 0.

Меню дочерних окон: File Edit Object

New Insert Deactivate

Open Paste

Save с GroupIndex = 0, 1, 2 соответственно.

Реакция на выбор элемента меню File | New описывается следующими методами:

function TOLEFrameForm.CreateChild: TOLEObjectForm;

begin

CreateChild := TOLEObjectForm.Create(Self);

end;

procedure TOLEFrameForm.New1Click(Sender: TObject);

begin

CreateChild

end;

Реакции на выбор других элементов меню - ниже.

2. Разработка процедуры вставки объектов

Вставить объект можно, выбрав пункт меню Edit | Insert. В качестве реакции на выбор создадим следующую процедуру:

procedure TOLEObjectForm.InsertObject1Click(Sender: TObject);

var

Info: Pointer;

begin

if InsertOLEObjectDlg(OLEFrameForm, 0, Info) then begin

InitializeOLEObject(Info);

end;

end;

При вызове этой процедуры выполняется специальная диалоговая функция:

function InsertOLEObjectDlg( Form : TForm;

HelpContext : THelpContext;

Var PInitInfo : Pointer).

Эта функция открывает специальное диалоговое окно, позволяющее выбрать тип OLE-объекта для вставки, например, Audio Recorder, Bitmap Image, Video Clip, Wave Sound и т. д.

Самое важное - это то, что в случае выбора типа объекта, функция создает структуру данных для инициализации OLE-контейнера и возвращает указатель на эту структуру в переменной Info. Эта структура не документирована.

Инициализация OLE-контейнера происходит, когда указатель на описанную структуру передается свойству PInitInfo компонента OLE-контейнера.

В нашем примере это производится с помощью процедуры IntializeOLEObject, которая имеет следующее описание:

procedure TOLEObjectForm.InitializeOLEObject(Info: Pointer);

begin

OLEContainer.PInitInfo := Info;

ReleaseOLEInitInfo(Info); освобождение памяти

end;

При инициализации устанавливаются свойства компонента OLE-контейнера ObjClass, ObjDoc, ObjItem в соответствие с состоянием диалогового окна вставки объекта.

При инициализации OLE-контейнера активизируется OLE-сервер и берет на себя управление, если объект уже существовал, то он передается в сервер. Пользователь теперь может редактировать объект как хочет.

После завершения работы с объектом, его необходимо деактивировать. Деактивация производится сдвигом фокуса к другим объектам приложения. В общем случае для деактивации объекта, необходимо установить свойство Active OLE-контейнера в состояние False. В примере это делает следующая процедура, вызываемая из меню Object|Deactivate:

procedure TOLEObjectForm.Deactivate1Click(Sender: TObject);

begin

OLEContainer.Active := False;

end;

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в папке Шпоры по СПО