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

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

Перетаскивание OLE-объекта из сервера и опускание его в OLE-контейнер - это наиболее связать или встроить объект. В этом случае нет необходимости вызывать специальные диалоговые функции создания нового объекта или чтения объекта из Clipboard-а.

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

procedure RegisterFormAsOleDropTarget(Form : TForm;

Const Fmts : Array Of BOLEFormat);

Этот вызов целесообразно включить в процедуру TOLEFrameForm.FormCreate.

Когда объект перетаскивается на форму, имеет место событие OnDragDrop. Форма приложения имеет обработчик этого события FormDragDrop. Процедура-обработчик имеет параметр Source, в котором ей передается перетаскиваемый объект как наследник класса TOLEDropNotify. Этот класс имеет свойство PInitInfo, соответствующее свойству PInitInfo OLE-контейнера. Поэтому для инициализации контейнера при перетаскивании достаточно присвоить полю контейнера PInitInfo значение поля PInitInfo передаваемого параметра как наследника TOLEDropNotify. Это делает следующая процедура:

procedure TOLEFrameForm.FormDragDrop(Sender, Source: TObject; X, Y: Integer);

var

NewChild : TOLEObjectForm;

begin

if Source is TOLEDropNotify then begin

NewChild := CreateChild;

with Source as TOLEDropNotify do begin

NewChild.OLEContainer.PInitInfo := PInitInfo;

end with;

end;

end;

Освобождать память, выделенную под InitInfo, в этом случае нет необходимости, т.к. Delphi берет это на себя.

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

Функции сохранения OLE-объектов в файлах и восстановления их из файлов Delphi также берет на себя.

Для сохранения OLE-объекта в файле необходимо использовать метод SaveToFile компонента OLE-контейнера. Для указания имени файла, в котором нужно сохранить объект, можно использовать компонент TSaveDialog, обеспечивающий открытие стандартного диалогового окна сохранения файла.

Процедура, вызываемая из пункта меню File | Save, может выглядеть следующим образом:

procedure TOLEObjectForm.SaveAsClick(Sender: TObject);

begin

if SaveAsDialog.Execute then begin

OLEContainer.SaveToFile(SaveAsDialog.FileName);

end;

end;

Для загрузки OLE-объекта из файла, необходимо использовать метод LoadFromFile компонента OLE-контейнера. Для указания имени файла, из которого требуется загрузить объект, можно использовать компонент TOpenDialog, обеспечивающий открытие стандартного диалогового окна открытия файла.

Процедура, вызываемая из пункта меню File | Open, может выглядеть следующим образом:

procedure TOLEFrameForm.OpenClick(Sender: TObject);

Var

NewChild: TOLEObjectForm;

begin

if OpenDialog.Execute then begin

NewChild := CreateChild;

NewChild.OLEContainer.LoadFromFile(OpenDialog.FileName);

end;

end;

6.3.5.5.4. Выводы

  1. Каждый OLE-объект должен храниться в собственном OLE-контейнере. Активизация OLE-сервера производится двойным щелчком левой клавиши мыши, когда курсор мыши находится в площади контейнера. Для управления позициями меню сервера и клиента, необходимо пользоваться значениями свойства GroupIndex компонентов меню.

  2. Вставка объектов производится с помощью специальной диалоговой функции InsertOLEObjectDlg, возвращающей информацию для инициализации контейнера методом InitializeOLEObject.

  3. Для обеспечения возможности чтения OLE-объектов из Clipboard-а, необходимо зарегистрировать форматы OLE-объектов с помощью функции RegisterClipboardFormat, и сформировать массивы, описывающие эти форматы. Затем необходимо использовать функцию PasteSpecialDlg, возвращающую информацию для инициализации OLE-контейнера.

  4. Для перетаскивания объектов методом Drag&Drop, необходимо форму зарегистрировать как мишень для перетаскивания с помощью метода RegisterFormAsOLEDropTarget. В обработчике событий OnDragDrop необходимо источник события рассматривать как наследника класса TOLEDropNotify, имеющего структуру данных для инициализации OLE-контейнера.

  5. Для работы с файлами объектов следует использовать методы компонента OLE-контейнера LoadFromFile и SaveToFile.

  1. Модель многокомпонентных объектов COM

  2. Автоматизация

  3. Унифицированная передача данных

  4. Структурированные хранилища

  5. Внедряемые компоненты и контейнеры OLE

  6. ATL(Active Template Library)

  7. ATL и элементы управленияActiveX

6.3.3. Обмен данными через Clipboard

6.3.3.1. Общая характеристика технологии обмена данными через Clipboard

6.3.3.2. Передача данных в Clipboard

6.3.3.2.1. Этапы передачи данных в Clipboard

6.3.3.2.2. Подготовка данных для передачи вClipboard

6.3.3.2.3. Открытие Clipboard

6.3.3.2.4. Очистка Clipboard

6.3.3.2.5. Посылка данных вClipboard

6.3.3.2.6. Закрытие Clipboard

6.3.3.3. Прием данных из Clipboard

6.3.3.3.1. Этапы приема данных из Clipboard

6.3.3.3.2. Открытие Clipboard

6.3.3.3.3. Проверка наличия требуемого формата данных вClipboard

6.3.3.3.4. Чтение данных из Clipboard

6.3.3.3.5. ЗакрытиеClipboard

6.3.3.4. Поддержка обмена данными через Clipboardв современных средах программирования

6.3.4. Обмен данными по технологии DDE

6.3.4.1. Общая характеристика технологии DDE

6.3.4.2. Этапы развития технологии DDE

6.3.4.3. Система адресации данных

6.3.4.4. Концепция функции отклика

6.3.4.5. Этапы функционирования DDE-приложения

6.3.4.5.1. Инициализация сервера

6.3.4.5.2. Инициализация клиента

6.3.4.5.3. Обмен данными

6.3.4.5.3.1. Варианты обмена данными

6.3.4.5.3.2. Передача данных от сервера по запросу от клиента

6.3.4.5.3.3. Передача данных от клиента серверу

6.3.4.5.3.4. Передача данных от сервера без запроса от клиента

6.3.4.5.4. Разрыв соединения

6.3.4.6. Организация обмена данными между Delphi-приложениями

6.3.4.6.1. Создание DDE-сервера

6.3.4.6.2. Создание DDE-клиента

6.3.5. Обмен данными по технологии OLE

6.3.5.1. Введение

6.3.5.2. Понятие документно-ориентированной среды

6.3.5.3. Принципы OLE

6.3.5.4. Характеристика технологии OLE2.0

6.3.5.4.1. Редактирование на месте

6.3.5.4.2. Автоматизация

6.3.5.4.3. Хранилища

6.3.5.4.4. Дополнительные возможности OLE2.0

6.3.5.4.5. Внутренние механизмы OLE2.0

6.3.5.4.6. Перспективы OLE

6.3.5.4.7. Недостатки OLE

6.3.5.5. Технология проектирования OLE-контейнера

6.3.5.5.1. Трехуровневая адресация OLE-объекта

6.3.5.5.2. Общая характеристика технологии создания OLE-клиента

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

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

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

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

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

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

6.3.5.5.4. Выводы

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