Створення та відображення OLE-документів у формах стор.1. Технологія OLE (Object Linking and Embedding)

Access 2010 має можливість додавати об'єкти в поле з типом даних OLE . У разі, коли тип даних заданий, як OLE (Object Linking and Embedding– зв'язування та використання об'єкта), тоді СУБД Accessзберігає зовнішній об'єктв спільному файлібази даних, відводячи його зберігання стільки місця, скільки цей об'єкт займає як окремого файла. Під об'єктамислід розуміти файли, створені у вигляді додатків у графічних редакторів, відеокліпів, у програмах MS Office і т.д. При заповненні таблиці даними, які є об'єктами, у відповідній позиції поля з типом даних OLE формується повідомлення про програму, за допомогою якої можна відкрити цей об'єкт. Відображення об'єктуздійснюватиметься лише у формах та звітах.

Для вбудовування об'єктау полі з типом даних OLEнеобхідно відкрити таблицю в режимі "Конструктор".Додати нове поле, наприклад "Фото товару".Вибрати тип даних "Поле об'єкта OLE", після чого зберегти таблицю.

Потім у режимі «Таблиця»у рядку для введення даних клацнути правою клавішею миші, у меню слід вибрати рядок з командою , що призведе до відкриття діалогового вікна (рис. 3.38, рис. 3.39).

Мал. 3.38 Вставлення об'єкта

Мал. 3.39 Діалогове вікно для додавання нового об'єкта до таблиці Access

Слід пам'ятати, що є дві можливості вбудовувати об'єкти як даних. Перша можливість передбачає використання типових додатківдля створення файлу, який підтримує Access, друга можливість вставки об'єкта , що дозволяє використовувати будь-який файл як джерело даних (рис. 3.40).

Мал. 3.40 Додавання нового об'єкта до таблиці Access із файлу

1. Створення об'єкта із файлу.

Коли йдеться про дані, які є об'єктами для бази даних, і є зовнішніми файлами, потрібно мати ці файли. Тому потрібно створити кілька файлів, щоб надалі побачити їх відображення в базі даних, а також спробувати провести зміну цих файлів. Наприклад, якщо ви маєте фотографію об'єкта у файлі Монітор.jpg(jpg - універсальний фотоформат). Щоб цей файл зберігся у базі даних, слід у вікні (рис. 3.40) поставити позначку "Створити з файлу" , після чого з'явиться вікно, що представлене малюнку 3.41. За допомогою кнопки «Огляд»слід вибрати потрібний файл.

Мал. 3.41 Пошук файлу під час створення об'єкта у базі данных

У відповідному рядку для поля, наприклад, "Фото товару"з'явиться слово "Пакет" (Package)Це означає, що файл прив'язаний до програми, за допомогою якої він був створений. Тому, при перегляді бази даних, чи буде це запит, форма або звіт, користувач побачить зображення файлу у вигляді значка , а при подвійному натисканні по цьому зображенню система спочатку знайде додаток, а потім у ньому відобразить вміст файлу (в даному прикладіце фотографія). Винятком є ​​файли із зображеннями, збережені з розширенням .bmp(bit map format). Разом з тим, слід нагадати, що файли, створені в програмах Microsoft, будуть відображатися відразу у формах та звітах. Висновок простий, фотографії можна вставляти в такі програми як Paint, Word, Power Point, зберігати у вигляді окремих файлів, а потім підключати як об'єкт до бази даних. Спробуйте створити кілька файлів із фотографіями та текстом, використовуючи різні редактори Windows. Наприклад, можна відкрити документ Word, вставити з файлу фотографію, додати текст, а потім зберегти як: Монітор.docx(Рис. 3.42).

Мал. 3.42 Файл із фотографією, створений у Word

2. Створення нових об'єктів.

Під створенням нових об'єктів у базі даних слід мати на увазі використання програми, в якій створюється файл, а потім підключається до поля з описом типу цього OLE. Для запуску режиму створення нових об'єктів, необхідно відкрити таблицю режимі «Таблиця», вибрати варіант "Створити новий" у діалоговому вікні (рис. 3.39), а потім у списку виділити Тип об'єкта (необхідний додаток). Перелік додатків, які підтримує Access для створення об'єкта, знаходяться у списку (рис. 3.43), що розкриється після запуску команди "Вставити об'єкт" .

Мал. 3.43 Перелік типів об'єктів Access, які можна використовувати для створення файлів

Зручністю використання програм для створення об'єктів у вигляді файлів полягає в тому, що надалі ці файли можна використовувати автономно або здійснювати корекцію в базі даних.

Розглянемо варіант створення об'єктівдля бази даних, за допомогою програми paint.

Наприклад, необхідно створити об'єкт із зображенням підприємства та текстом, який надалі користувач бази даних зможе замінити чи виправити. Для цього необхідно вибрати зі списку об'єкт Bitmap Image, подальша технологія створення об'єкта показано малюнку 3.44.

1. Відкрийте програма Paint

2. Вставте фотографії з файлу.

3. Додайте текст (якщо це необхідно).

4. Збережіть файл.

5. Закрийте програму.

Мал. 3.44 Технологія створення об'єкта у програмі Paint

Завдання 3.11

1. У таблиці « Товари" в режимі «Конструктор»додайте новий стовпецьз ім'ям "Фото товару", тип даних " Поле об'єкта OLE»Збережіть зміни.

2. У режимі «Таблиця»в полі "Фото товару"оберете рядок «Вставити об'єкт із файлу», виберіть (поставте крапку) "Створити новий"і зі списку, що розкривається, вкажіть документ Microsoft Word . При цьому відкриється текстовий редактор MS Wordтут необхідно вставити малюнок, відповідний товару в даному рядку. Малюнки виберіть зі списку, який зберігається безпосередньо в редакторі (вкладка «Вставка», значок «Зображення», у діалоговому вікні праворуч кнопка «Почати»), або вставте малюнок з інших програм. Можете використовувати програму Paint (об'єкт Bitmap Image), де намалюйте товар самостійно. Створений файл закрийте, він буде автоматично прив'язаний до вашої бази, до рядка, в яку її вставили.

3. Виконайте цю процедурудля всіх рядківвашої таблиці «Товари».

4. Збережіть зміни.

Контрольні питання

1. Які об'єкти можна вставити до бази даних із типом даних OLE?

2. Як можна вставити фото в таблицю як «Таблиця»?

3. Де буде відображатися фотографія в базі даних?

4. Чим відрізняється спосіб «Створити новий об'єкт» від способу «Створити із файлу»?

5. Як помістити файл фотографії товару в базу даних, якщо він має розширення .png?

6. Чи можна здійснювати виправлення файлу, який вставлений як об'єкт у базу даних безпосередньо в файловій системікомп'ютера?

7. Як вставити презентацію до бази даних?

8. Об'єкти яких додатків можна вставити до бази даних?

Огляд

Основи OLE

Об'єкт TOLEContainer

Приклад 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 сервер.

    Наприклад, MicroSoft Word може включати в документ графічні об'єкти, аудіо- та відеокліпи та безліч інших об'єктів (такий документ іноді називають складовим документом - compound document ).

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

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

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

  5. Об'єкт TOLEContainer
  6. Об'єкт 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).

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

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

procedure TOLEForm.SaveOLE(Sender: TObject);

BlSt: TBlobStream;

begin

With Table1 do

BlSt:=TBlobStream.Create(BlobField(FieldByName("OLE")),

bmReadWrite);

OLEContainer.SaveToStream(BlSt as TStream);

BlSt.Free;

OLE-технологія

OLE– технологія (Object Linking and Embedding– об'єктне зв'язування та вбудовування) дозволяє створювати складні складові документи, які містять різнотипні об'єкти, створені різними додатками. Так у текстовий документредактора Word можна вставити таблицю Excel, діаграму, що пояснює текст, або математичну формулу, це залишиться єдиним документом для користувача. Додаток, який відповідає за складовий документ, прийнято називати контейнером. Воно має складну структуру, оскільки вміє працювати з “чужими” об'єктами. Програма, яка створила об'єкт, називається сервером.

Контейнери та сервери можуть підтримувати два режими взаємодії:

    вбудовування (використання) об'єктів. Цей режим означає, що дані об'єкта зберігатимуться разом із основним документом (наприклад, впроваджена таблиця Excelбуде збережено в.doc – файл редактора Word).

    зв'язування об'єктів. У складеному документі зберігається лише посилання об'єкт, дані якого перебувають у іншому документі.

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

Для редагування пов'язаних даних відкривається окреме вікно, додатка, у якому ці дані було створено, тобто. сервера. При впровадженні об'єктів можна запустити сервер у окремому вікні, але можна й редагувати дані «на місці» («in Place»), тобто. у вікні контейнера, якщо це дозволяє. У цьому випадку контейнер повинен мати меню, а «in Place», що завантажився, сервер доповнить його своїми командами.

Компонент OLEContainer

На сторінці System палітри компонент Borland Builder С++ є спеціальний компонент, призначений для впровадження та зв'язування об'єктів з інших додатків - OLEContainer.

Основні властивості

Властивість Stateдозволяє визначити стан об'єкта та його сервера. Його значення:

    osEmpty-контейнер не містить об'єкта;

    osLoaded – об'єкт у контейнері, сервер не виконується;

    osRunning - сервер запущений;

    osOpen - OLE - об'єкт відкритий в окремому вікні сервера;

    osInPlaceActive – об'єкт активовано «на місці», але меню ще не змінено. Це проміжний стан об'єкта перед повним завантаженнямсервера.

    osUIActiveоб'єкт активовано «на місці», меню змінено.

Наступний код дозволяє визначити ім'я об'єкта, завантаженого в контейнер (властивість AnsiString OleClassName), спосіб роботи з об'єктом ( Linked= true – зв'язування, інакше – впровадження), а також отримати ім'я пов'язаного документа:

if (OleContainer1 -> State! = osEmpty)

Label2 -> Caption = OleContainer1 -> OleClassName;

// Стан контейнера – ціле число, починаючи з 0 (osEmpty)

Label6 -> Caption = OleContainer1 -> State;

if (OleContainer1 -> Linked)

Label4 -> Caption = OleContainer1 -> SourceDoc;

Властивість bool AllowInPlaceвизначає можливість редагувати впроваджений об'єкт "на місці". Якщо AllowInPlace = true і Iconic = false (властивість Iconic визначає чи повинен об'єкт бути представлений у вигляді піктограми), то «InPlace» – редагування дозволено. При AllowInPlace = false сервер відкриватиметься в окремому вікні.

Властивість AutoActivateмає три можливі значення: aaManual,aaGetFocus,aaDoubleClickі визначає способи активізації завантаженого в контейнер об'єкта.

За замовчуванням AutoActivate = aaDoubleClick, тобто об'єкт стає активним при подвійному натисканні. Значення aaGetFocusвизначає активізацію при отриманні фокусу введення. При AutoActivate = aaManualза активізацію об'єкта відповідає програміст. У цьому випадку можна використовувати метод компонента-контейнера DoVerb, який відповідає за передачу команд від контейнера серверу. Наприклад, можна скористатися наступним оператором:

OleContainer1->DoVerb (ovShow); // Показати об'єкт

Окрім посилки команд серверу, методи контейнера забезпечують створення, завантаження та руйнування об'єктів. Перейдемо до їхнього розгляду.

Створення та збереження нового об'єкта (впровадження)

Створення нового об'єкта можна забезпечити використанням спеціального діалогового вікна InsertObject(вставка об'єкта) або викликом методу CreateObject. У першому випадку клас об'єкта вибирає користувач із системного списку можливих об'єктів, тоді як у другому програмно створюється конкретний об'єкт.

Для використання діалогового вікна можна скористатися наступним кодом, що розташований, наприклад, у команді меню «новий»:

AnsiString File_Name; // змінна оголошена глобально чи класі форми

if (OleContainer1->InsertObjectDialog())

(File_Name = "";

OleContainer1->DoVerb(ovShow);

У діалоговому вікні необхідно встановити значення RadioButton- кнопки «Створити новий», у списку вибрати необхідний тип об'єкта і клацнути «OK».

Програмно об'єкт можна створити так (оператори можна вставити, наприклад, у відповідні пункти меню):

    таблиця Excel

OleContainer1->CreateObject("Excel.sheet", false);

    документ Word

OleContainer1->CreateObject("Word.Document",false);

Якщо створити потрібно об'єкт, ім'я типу якого невідоме, потрібно звернутися або до відповідної документації по серверу, або написати тестову програму із завантаженням об'єкта методом OleContainer->InsertObjectDialog()і скористатися властивістю OleContainer -> OleClassName для визначення його імені.

Під час створення нового об'єкта використовується впровадження (оскільки зв'язування необхідний файл). І тут за зберігання даних об'єкта відповідає програма - контейнер. Зберегти дані у файлі можна за допомогою методу SaveToFile (<имя файла>), наприклад, у пункті меню «Файл - Зберегти…» можна використовувати наступний код:

void __fastcall TForm1::FSaveClick(TObject *Sender)

( if (File_Name=="")

if (SaveDialog1->Execute())

File_Name = SaveDialog1->FileName;

OleContainer1->SaveToFile(ChangeFileExt(File_Name,".ole"));

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

Функція ChangeFileExtбула використана у прикладі для заміни розширення файлу. При виконанні команд збереження та вилучення даних із файлу можуть знадобитися й інші функції обробки імен файлів:

    ChangeFileExt(const AnsiString FileName, const AnsiString Extension) - примусово змінює ім'я файлу FileName, замінюючи розширення на Extension;

    функція AnsiString ExtractFileExt(AnsiString FileName) повертає розширення файлу і, отже, дозволяє перевірити його тип;

    AnsiString ExtractFileName(AnsiString FileName) повертає ім'я файлу, витягнуте з рядка FileName, тобто. після останнього зворотного слеша або двокрапки;

    AnsiString ExtractFilePath(AnsiString FileName) отримує шлях до файлу, включаючи останній слеш або двокрапка;

    AnsiString ExtractFileDrive(AnsiString FileName) отримує диск файлу з двокрапкою (наприклад, «D:»).

Метод контейнера LoadFromFile(<имя файла>)дозволяє завантажити запам'ятований об'єкт у контейнер:

void __fastcall TForm1::FOpenClick(TObject *Sender)

if (OpenDialog1->Execute())

if (ExtractFileExt(OpenDialog1->FileName)!= ".ole")

File_Name = OpenDialog1->FileName;

OleContainer1->LoadFromFile(File_Name);

OleContainer1->DoVerb(ovShow);

Створення об'єкта з файлу (використання)

Для створення об'єкта з наявного файлу можна скористатися тим самим вікном InsertObject, як і у разі створення нового об'єкта. У разі використання користувач встановлює значення RadioButton-кнопки «Створити з файлу», а для пошуку файлу клацає на кнопці «Огляд…».

Програмний спосіб створення об'єкта із файлу забезпечується методом: OleContainer-> CreateObjectFromFile(AnsiString<имя файла>,boolIconic).

Параметри методи визначають ім'я вихідного файлута режим відображення об'єкта (Iconic=true– об'єкт у вигляді піктограми). Ось такий код можна вставити у відповідний пункт меню:

void __fastcall TForm1::FFileClick(TObject *Sender)

if (OpenDialog1->Execute())

OleContainer1->CreateObjectFromFile(OpenDialog1->FileName,false);

OleContainer1->Repaint();

Метод OleContainer->Repaint()призводить до перемальовки вікна контейнера і, отже, появи даних об'єкта на екрані.

Створення зв'язаного об'єкту

Так само як і при впровадженні створити пов'язаний об'єкт може користувач або програміст.

Користувачеві у вікні Insert Objectслід виконати дії щодо вибору файлу, перелічені вище, та додатково встановити прапорець «Зв'язок».

Програміст повинен скористатися методом: OleContainer->CreateLinkToFile(AnsiString<имя файла>, bool Iconic).

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

Робота із сервером

Оскільки працювати з даними об'єкта може лише програма, що створила об'єкт (сервер), то контейнеру можуть знадобитися знання про можливі дії над об'єктом. Метод DoVerb(int Verb) вимагає виконання однієї з команд, а весь список можливих дій містить властивість ObjectVerbsкомпонент контейнера. Отримати цей список можна тільки після завантаження об'єкта в контейнер, і, звичайно, кожен сервер (а, отже, і об'єкт) має свій список команд.

Константа ovShow – це приклад зарезервованої OLE – команди. Використання методу DoVerb з параметром ovShow, яке вже було розглянуто в одному з попередніх розділів, призводить до негайного відкриття сервера.

Наступний код виявляє список можливих команд об'єкта в компоненті ListBox (команди нумеруються з нуля) і просить виконати другу команду у списку:

ListBox1->Items = OleContainer1->ObjectVerbs;

OleContainer1->DoVerb(1);

Крім цього, контейнер може попросити сервер зберегти дані об'єкта у вигляді документа у форматі сервера. Для цього використовується метод SaveAsDocument(<имя файла>). Цей документ надалі може оброблятися програмою сервером без участі контейнера. Цікаво, що цей метод можна використовувати як для пов'язаних, так і для впроваджених об'єктів.

Після завершення роботи з об'єктом програма може звільнити OleContainer, викликавши метод OleContainer->DestroyObject() - зруйнувати завантажений об'єкт. Цей метод можна викликати перед завантаженням нового об'єкта або в меню «Файл-Вихід».

1. Створити новий додаток. на головній формірозташовані такі компоненти:

  • Декілька елементів Label

І два невізуальні компоненти:

Зразковий вигляд головного вікна програми представлений малюнку. У OleContainer завантажено малюнок (файл з розширенням. bmp). Стан сервера: osRunning.

2. Додати на форму компонент, в якому відображатиметься інформація про об'єкт: «не завантажено» / «впровадження» / «зв'язування».

3. Меню має містити такі команди:

    Об'єкт (InsertDialog, новий об'єкт Excel, новий об'єкт Paint, впроваджений з файлу, впроваджений з ім'я презентації PowerPoint», пов'язаний з файлу, пов'язаний з «ім'я документа Word», Виконати команду);

    "Властивості" (Властивості об'єкта, Команди сервера);

    "Довідка" (Про програму).

Передбачити, щоб пункти меню були доступні лише в той момент, коли відповідні дії можуть бути виконані. Наприклад, пункт "Об'єкт" | "Виконати команду" може бути доступний тільки, якщо об'єкт завантажений в OleContainer, а до списку ListBox розміщено список доступних командсервера.

4. Для всіх команд меню створити відповідні обробники подій.

    "Файл" | "Завантажити об'єкт" - збережений об'єкт завантажується з ole - файлу.

    "Файл" | "Розірвати зв'язок" - розрив зв'язку з об'єктом;

    "Файл" | «Вихід» - коректний вихід із програми (якщо був зв'язок з об'єктом розірвати її);

    "Об'єкт" | InsertDialog – об'єкт та його спосіб завантаження у контейнер вибирається у діалоговому вікні користувачем;

    "Об'єкт" | « Об'єкт Excel» - Створюється новий об'єкт;

    "Об'єкт" | « Об'єкт Paint» - Створюється новий об'єкт;

    "Об'єкт" | «Впроваджений із файлу» – ім'я файлу визначається користувачем у діалоговому вікні OpenDialog;

    "Об'єкт" | «Впроваджений з «ім'я презентації PowerPoint» - у контейнер вставляється попередньо створена презентація слайдів;

    "Об'єкт" | «Пов'язаний із файлу»» – ім'я файлу визначається користувачем у діалоговому вікні OpenDialog;

    "Об'єкт" | «Зв'язаний з «ім'я документа Word» - у контейнер вставляється попередньо створений документ;

    "Об'єкт" | "Виконати команду" - серверу для виконання передається команда, вибрана користувачем у списку ListBox$

    "Властивості" | «Властивості об'єкта» - контейнер запитує у сервера ім'я об'єкта, стан сервера та ім'я пов'язаного документа, виходячи з отриманої інформації робиться висновок: «об'єкт – не завантажений / впроваджений / пов'язаний». Отримана інформація виводиться у компоненти Label головного вікна програми.

    "Властивості" | "Команда сервера" - список команд сервера виводиться в компоненті ListBox;

    "Довідка" | «Про програму…» - вікно з інформацією про додаток та його автора.

5. Провести повне тестування програми на різних об'єктах та серверах.

Технологія ole дозволяє імпортувати об'єкти з інших програм із збереженням зв'язків.Причому якщо вставити зображення з програми як Word чи графік з Excel, воно буде зберігатися у файлі як впроваджений об'єкт, тобто. при надсиланні креслення вам не потрібно його архівувати з кресленням, як це необхідно робити при використанні зовнішніх посилань в Автокаді .

На вкладці "Вставка" розташована команда "Ole-об'єкт" AutoCAD.

Після активації команди з'являється діалогове вікно "Вставка об'єкта".

Тут можна створити новий файл. У цьому випадку вам слід вказати програму (Photoshop, Microsoft Excel, Word, Power Point і т.д.), в якому ви будете працювати, і, згодом, помістити ваш об'єкт в Автокад або відразу працювати на основі існуючого файлу. На практиці набагато частіше використовується саме другий варіант. Розглянемо його докладніше.

У діалоговому вікні "Вставка об'єкта" встановіть галочку "Створити з файлу", після чого натисніть кнопку "Огляд", щоб вибрати відповідний файл. Після виконаних дій прописується шлях до документа.

Існує два варіанти вставки:

1) Незалежна – після вставки об'єкта він «стаціонарно» зберігається в Автокаді. І при зміні вихідного файлу у вашому кресленні жодних змін не відбувається.

2) Зв'язування файлів – в цьому випадку їхнє розташування на комп'ютері має залишатися незмінним. При зміні шляху зв'язок втрачатиметься. Тому ці файли оптимально зберігати в одній папці. Щоб зв'язати файли AutoCADвстановіть галочку «Зв'язок» у діалоговому вікні «Вставка об'єктів»(Рис. 3).

Мал. 3 – Робота з ole-об'єктом Автокад на основі наявного файлу.

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

Мал. 4 – Ole-об'єкт Автокад у вигляді зображення з Word.

Якщо двічі ЛКМ клацнути за таким ole-об'єктом, то відкриється додаток, в якому спочатку він був створений (або зберігався). У цьому прикладі вставлялася проста картинка з Word.

Мал. 5 – Наявність зворотнього зв'язкудозволяє відкрити вихідну програму (у разі Word).

Впровадження Ole у Автокад через буфер обміну.

Ole AutoCAD: секрети та хитрощі.

У цьому курсі на практичні прикладирозглянуто роботу з Ole-об'єктами Авткоад. У відео-форматі розказано про:

Налаштування якості виведення ole-об'єктів на друк;

Як прибрати рамку, яка за умовчанням обрамляє ці об'єкти;

Системні змінні під час роботи з оле Автокад;

Зворотний процес вставки ole-об'єктів з Автокада в інші програми.

Що ж, як бачите, оле-об'єкти в Автокаді – технологія дуже корисна! А найголовніше, використання цього принципу дозволяє відповісти на запитання: "Як вставити картинку в Автокад не посиланням?" Тепер ви можете сміливо впроваджувати логотип своєї фірми на креслення або підкладки до проектів і не боятися, що в інших користувачів ці графічні об'єкти не відображатимуться.

Компонент TOleContainer дозволяє розмістити OLE-документ на поверхню форми. Найчастіше використовуваними властивостями цього компонента є AutoActivate, що визначає, як активізується OLE-докумеит, State, що визначає стан OLE-контейнера, і OleClassName, що визначає ім'я класу (CLSID) OLE-об'єкта, що міститься в контейнері. Найчастіше використовуються наступні методицього компонента:

InsertObjectDialog - виводить стандартне діалогове вікно Object для вибору типу документа або завантаження його з файлу; ш CreateObject - створює OLE-об'єкт; Я CreateObjectFromFile - створює OLE-об'єкт на основі існуючого файлу, що містить OLE-документ, і поміщає його в OLE-контейнер;

У DestroyObject - знищує об'єкт, що міститься в OLE-контейнері.

Створимо найпростіший додаток, що ілюструє використання компонента TOleContainer. З цією метою помістимо на форму компонент TPanel зі властивістю Align, рівним alClient, на нього - компонент TOleContainer і головне меню (можна створити в ньому пункти New object і Exit). Панель і меню потрібні для відображення панелей інструментів і меню OLE-серверів, що обслуговують об'єкти, що відображаються в компоненті TOleContainer. Якщо на формі, що містить компонент TOleContainer, є меню, то меню сервера буде приєднано до меню програми відповідно до правил злиття меню, прийнятих у Windows. Якщо компонент TOleContainer розміщений на компоненті TPanel, останній буде відображати панель інструментів сервера (рис. 5.1).

Мал. 5.1. Форма з компонентом TOleContainer

Створимо обробник події, пов'язаний із вибором пункту меню New Object:

Procedure TForml.NewlClick(Sender: TObject); begin 01eContai nerl.InsertObjectDi alog: end:

Запустивши програму та клацнувши на кнопці, отримаємо діалогове вікно Insert Object (рис. 5.2).


Мал. 5.2. Діалогове вікно вставки об'єкта

У списку, представленому в цьому діалоговому вікні, перераховані всі сервери ОЕЕ-документів, зареєстровані на даному комп'ютері. Можна вибрати один із них (наприклад, Microsoft Excel Worksheet). Тепер після подвійного клацанняна компоненті TOleContainer компонент TPanel міститиме панель інструментів Microsoft Excel і меню меню цієї програми, а сам OLE-контейнер - нову робочу книгу Excel (рис. 5.3).


Мал. 5.3. Активний об'єкт в OLE-контейнері

Якщо тип об'єкта, який відображається в OLE-контейнері, відомий заздалегідь, можна використовувати метод CreateObject компонента TOleContainer:

Procedure TForml.NewExcelworksheetlClick(Sender: TObject). begin 01eContainerl.CreateObjectC"Excel.Sheet". False): end;

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

УВАГА -

Хоча що в діалоговому вікні Insert Object містяться тільки імена серверів OLE-документів, відображати в подібних компонентах можна в принципі будь-які СОМ-сервери, що володіють інтерфейсом користувача, зокрема багато з елементів управління ActiveX. Якщо необхідно відобразити в OLE-коптейпсрі користувальницький інтерфейсСОМ-сервера, який не є сервером OLE-докумсп-тів, слід вказати його ідентифікатор CLSID як перший параметр методу CreateObject

Модифікуємо програму, додавши ще кілька пунктів меню (рис. 5.4). Створимо відповідні обробники подій:

Procedure TForml.ShowPropertieslClickCSender: TObject); begin if 01 eCOntainerl.01eObjectInterface<>nil then 01eContai nerl.ObjectProperti esDi alog else ShowMessage ("OleContainer is empty"); end; procedure TForml.PastespeciallClick(Sender: TObject). begin 01eContai nerl.PasteSpeci alDialog: end

Мал. 5.4. Меню програми, що використовує компонент TOIeContainer

Скомпілюємо додаток і на етапі виконання додамо якийсь об'єкт в OLE-контейнер. Вибравши команду Action Show Properties нашої програми, отримаємо стандартне діалогове вікно з описом властивостей OLE-об'єкта (рис. 5.5).


Мал. 5.5. Діалогове вікно з описом властивостей об'єкта

Помістивши будь-які дані у буфер обміну, виберемо команду Action PasteSpecial нашої програми та отримаємо діалогове вікно спеціальної вставкиоб'єкта із буфера обміну Paste Special (рис. 5.6).


Мал. 5.6. Діалогове вікно спеціальної вставки

Вибравши тин об'єкта, що вставляється в запропонованому списку, ми можемо помістити його в О'Є-контейпер (рис. 5.7).


Мал. 5.7. Результат вставки об'єкта з буфера обміну