Лабораторная работа №6. Внедрение и связь объектов Цель работы: Познакомиться с возможностями Delphi при работе с технологией OLE Основные понятия: OLE (Object Link and Embedding) – внедрение и связь объектов. Данная технология является стандартом Windows и обеспечивает связывание и встраивание объектов на основе технологии COM. COM (Component Object Model) – модель многокомпонентных объектов. Объекты OLE могут запускаться как в отдельном окне, так и внутри окна приложения. Таким образом, можно получать доступ к чужим приложениям и использовать их в своих целях. Когда OLE-объект запускается внутри окна, то часть меню и панелей заменяются на используемые в программе, которая загружается. При работе с OLE выделяются два способа связи. 1. Связывание объекта OLE с контейнером. В этом случае результирующий файл сохраняется отдельно и должен быть создан до того, как контейнер обратится к нему. Контейнер только ссылается на файл, но не хранит в себе никаких данных. Главное преимущество такого способа – к одной документу может ссылаться множество контейнеров, и при изменении документа все контейнеры получают эти изменения. 2. Встраивание объектов. В этом случае созданный документ хранится в контейнере, и другие приложения не могут получить к нему доступ. В этом случае данные хранятся как часть приложения. Для встраивания объектов в приложение в Delphi используется компонент OleContainer с вкладки System Палитры компонентов. Рассмотрим основные свойства компонента OleContainer: AllowInPlace – если это свойство равно True, то OLE-объект будет создаваться в компоненте, иначе будет запускаться как отдельное приложение. AutoActivate – определяет способ активизации OLE-объекта. Здесь возможны следующие значения: ∙ aaDoubleclick – активизация объекта будет происходить по двойному щелчку кнопки мыши; ∙ aaGetFocus – активизация при получении фокуса; ∙ aaManual – активизация вызовом соответствующей функции; ∙ CopyOnSave – если это свойство равно true, то при попытке сохранения создается временный файл, который сжимается для экономии места на диске. Iconic – если это свойство равно True, то в окне контейнера будет отображаться иконка объекта, иначе – сам объект. Linked – если объект связанный, то здесь True. OleClassName – здесь хранится имя OLE-объекта. OleObject – здесь хранится ссылка на сам OLE-объект. OleObjectInterface – здесь хранится ссылка на интерфейс OLE-объекта. Высокоуровневые методы информатики и программирования Modified – если объект изменён, то это свойство принимает значение True. NewInserted – если объект заново создан командой меню Вставить Объект, то это свойство равно True. OleStreamFormat – если это свойство равно True, то при сохранении будет использоваться старый формат OLE 1.0. SizeMode – управляет размером объекта. Здесь возможны следующие значения: ∙ smAutoSize – размер выбирается автоматически. ∙ smCenter – по центру. ∙ smClip – показывается объект реальных размеров (отображается та часть, которая поместилась в окно). ∙ smScale – объект масштабируется. ∙ smStretch – объект растягивается. Рассмотрим основные методы компонента OleContainer: ChangeIconDialog – показать окно смены иконки. Close – закрыть OLE-объект. Cору – копировать объект в буфер обмена. CreateLinkToFile – создать ссылку на файл OLE-объекта. CreateObject – создать в контейнере OLE-объект. Тут два параметра – имя объекта и булево значение, указывающее на необходимость создания объекта в виде иконки. CreateObjectFromFile – создать объект из указанного файла. Тут два параметра – имя файла и булево значение, указывающее на необходимость создания объекта в виде иконки. DoVerb – передать объекту OLE запрос на выполнение действий. InsertObjectDialog – показать окно вставки нового объекта. LoadFromFile – загрузить объект из файла. В качестве параметра нужно указать имя файла. ObjectPropertiesDialog – показать окно свойств объекта. Paste – вставить из буфера обмена. PasteSpecialDialog – показать окно вставки из буфера обмена. Run – запустить объект. SaveAsDocument – сохранить объект в виде OLE-документа. В качестве параметра нужно указать имя файла. Порядок выполнения работы 1. Запустите Delphi. Создайте новый проект. 2. Назовите форму MainForm с заголовком Главная. Для формы задайте размер 600х800. 3. Сохраните проект в папку D:\Users\...\Lab6\.... Окно сохраните под именем MainUnit, а проект под именем OLETech. 4. На форме создайте: панель высотой 100, сделайте, чтобы она выравнивалась по нижнему краю окна. Измените цвет панели; 2 Высокоуровневые методы информатики и программирования компонент OleContainer, сделайте, чтобы он занимал всю оставшуюся форму. Дважды щелкните левой кнопкой мыши внутри компонента или щелкните правой кнопкой и в появившемся меню выберите пункт Вставить Объект. В открывшемся окне Вставка объекта в списке Тип объекта выберете Рисунок PaintBrush. Если установить флажок В виде значка, то на форме будет только значок объекта, а по двойному щелчку кнопки мыши будет запускаться выбранное приложение (PaintBrush). Если флажок не устанавливать, то приложение встраивается прямо в окно. Нажмите кнопку OK; главное меню. В него не надо добавлять никаких пунктов, OLEкомпонент будет автоматически встраиваться в него своё главное меню; панель ToolBar (вкладка Win32). Используя контекстное меню, создайте пять кнопок ToolButton (Вставить объект, Свойства объекта, Вставить из файла, Открыть объект, Сохранить объект), разделитель, две кнопки (Копировать в буфер, Вставить), разделитель и еще одну кнопку (Закрыть). Сделайте, чтобы на кнопках отображались на рисунки; диалог открытия файла; диалог сохранения файла. 5. В процедуру обработки для первой кнопки введите код: OleContainer1.InsertObjectDialog; По нажатию этой кнопки, программа будет отображать окно Вставка объекта, с помощью которого можно будет сменить OLE-объект. 6. В процедуру обработки для второй кнопки введите код: OleContainer1.ObjectPropertiesDialog; Этот код будет отображать окно свойств объекта. 7. В процедуру обработки для третьей кнопки введите код: If OpenDialog1.Execute Then OleContainer1.CreateObjectFromFile (OpenDialog1.FileName, False); 8. В процедуру обработки для четвёртой кнопки введите код: Try If OpenDialog1.Execute Then OleContainer1.LoadFromFile(OpenDialog1.FileName); Except Application.MessageBox('Не правильный формат файла', 'Ошибка!!!'); End; 9. Запрограммируйте остальные кнопки: Сохранить, Копировать, Вставить и Закрыть. 10. На нижней панели напишите своё Ф.И.О. 3