Довідник з delphi

Приклад OLE додатки

Збереження OLE об'єкта в базі даних

    1. огляд
    2. Зі статті Ви дізнаєтесь основні відомості про OLE, деякі речі щодо OLE 2 і OLE Automation. У статті розповідається про використання об'єкта TOLEContainer для побудови OLE додатки в Delphi.
    3. основи OLE
    4. Перш, ніж перейти до розгляду основ OLE, потрібно вивчити термінологію.

    Абревіатура OLE означає Objects Linked and Embedded (Приєднані І Вбудовані Об'єкти - ПИВО J). Дані, що розділяються між додатками називаються OLE об'єктом. Додаток, який може містити OLE об'єкти, називають OLE контейнером (OLE Container). Додаток, дані з якого можна включити в OLE контейнер у вигляді OLE об'єкта, називають OLE сервером.

    Як випливає з назви, OLE об'єкти можна або приєднати до OLE контейнеру, або включити в нього. У першому випадку дані будуть зберігатися в файлі на диску, будь-який додаток буде мати доступ до цих даних і зможе вносити зміни. У другому випадку дані включаються в OLE контейнер і тільки він зможе переглядати і модифікувати ці дані.

    У природі існує кілька видів OLE, що відрізняються за способом активації OLE сервера. OLE версії 1 запускає сервер в окремому вікні. OLE 2 реалізує те, що називається in-place activation and editing. В даному випадку сервер запускається "всередині" програми-клієнта, модифікує вид системного меню, лінійки інструментів і ін. Розвиток ідеї OLE призвело до появи OLE automation - додаток-клієнт може виконати частину коду сервера. Тип OLE об'єкта, поміщеного в програму-клієнт, залежить від того, скільки разів OLE підтримує сервер.

  1. об'єкт TOLEContainer
  2. Об'єкт TOLEContainer знаходиться на сторінці System Палітри Компонент і потрібен для створення додатків OLE-контейнерів. TOLEContainer приховує всі складнощі, пов'язані з внутрішньою організацією OLE і надає програмісту досить простий інтерфейс. Побудуємо просте застосування з використанням OLE об'єкта. Створіть новий проект і помістіть на форму TOLEContainer, в інспектор об'єктів двічі клацніть мишкою на властивість ObjClass або ObjDoc - з'явиться стандартний діалог Windows "Insert Object" (див. Рис.1)

    У цьому діалозі є список всіх зареєстрованих в системі OLE-серверів (реєстрація відбувається при інсталяції програми). Тип OLE-об'єкта визначається саме тим сервером, який Ви вкажете. Якщо Ви створюєте новий об'єкт (Create New), то при натисканні кнопки OK запуститься програма OLE-сервер, в якій і формується новий об'єкт. Після виходу з програми-сервера новий OLE об'єкт включається (embedded object) в програму. OLE об'єкт можна створити використовуючи вже наявний файл у форматі одного з OLE-серверів. Для цього потрібно вибрати пункт Create from File (див. Рис.2)

    Обраний об'єкт можна як включити в додаток, так і приєднати, відзначивши пункт Link.

    Отже, давайте при створенні нашого проекту створимо новий об'єкт, вибравши для цього, наприклад, Microsoft Word Document (рис.1). Натисніть OK і після того, як запуститься MS Word, наберіть там будь-який текст ( "Це OLE-об'єкт Microsoft Word document"). Для завершення роботи в меню є спеціальний пункт "File | Close and Return to Form1" (Win'95 + MS Word 7.0). Запустіть проект, він буде виглядати приблизно так:

    Клацніть двічі мишкою на OLE-контейнер - запуститься MS Word з документом з OLE-об'єкта, який можна редагувати, при цьому всі зміни зберігаються в OLE-об'єкт.

    . Якщо під час дизайну Ви вибираєте об'єкт для включення в OLE-контейнер, то він повністю записується в файл форми (FORM1.DFM) і в подальшому прикомпилируется до EXE файлу. У разі дуже великих об'єктів це може привести під час дизайну до тривалих пауз і навіть до виникнення помилки "Out of resource". Тому рекомендується великі об'єкти робити приєднаними (linked).

    TOLEContainer дозволяє відображати в програмі об'єкт в його безпосередньому вигляді (з різним ступенем збільшення або зменшення - властивість Zoom) або у вигляді піктограми, яка визначається в діалозі на рис.1 (Display as Icon).

    Вибір OLE-об'єкта може відбуватися не тільки під час дизайну, але і під час виконання програми (про це трохи нижче). Результати роботи з цим об'єктом можна зберегти у вигляді файлу і наступного разу відновити його звідти, для цього TOLEContainer має два методи SaveToFile і LoadFromFile.

  3. Приклад OLE додатки
  4. Серед демонстраційних прикладів, що входять в Delphi є два, що відносяться до роботи з OLE-об'єктами (в директоріях X: \ DELPHI \ DEMOS \ OLE2 і X: \ DELPHI \ DEMOS \ DOC \ OLE2). Більш повним є другий, який, крім усього іншого є прикладом побудови MDI додатки. Дана програма демонструє всі основні можливості TOLEContainer і дозволяє:

    - створювати новий OLE контейнер під час виконання програми;

    - форматувати OLE об'єкт або в стандартному діалозі Windows "Insert Object", або за допомогою Clipboard, або за допомогою техніки "перенести і кинути" (drag-and-drop);

    - зберегти OLE об'єкт у файлі і відновити його звідти;

    На рис.4 показаний приклад MDI додатки, що містить два дочірніх вікна з OLE об'єктами. Для створення нового OLE об'єкта потрібно вибрати пункт меню File | New і далі Edit | Insert Object. З'явиться стандартний діалог Windows для ініціалізації OLE об'єкта (див. Рис.1). Якщо додаток OLE-сервер має можливість зберігати інформацію про OLE об'єкті в Clipboard, то проинициализировать об'єкт можна за допомогою пункту меню Edit | Paste Special.

    Іноді необхідно зберігати OLE об'єкти не в файлах, а в базі даних (BLOB поле в таблиці). Звичайно, в даному випадку OLE об'єкт повинен бути приєднаним (embedded) з метою переносимості. На жаль, в стандартному постачанні Delphi немає спеціального об'єкта типу TDBOLEContainer для даних цілей, але OLE об'єкт можна зберігати і відновлювати за допомогою методів SaveToStream і LoadFromStream. наприклад:

    procedure TOLEForm.SaveOLE (Sender: TObject);

    OLEContainer.SaveToStream (BlSt as TStream);