- •Укладач Чемолосова а.В.
- •Лекція 18. Створення компонентів під час виконання програми
- •Основі дії при створенні компонентів
- •Створення візуальних компонентів
- •Призначення обробників подій
- •Використання масивів компонентів
- •Лекція 19. Меню та панелі в стилі xp
- •Лекція 29. Сервери автоматизації
- •Створення та використання екземплярів серверів автоматизації
- •Лекція 21. Експорт інформації в ms Word
- •Експорт інформації в Microsoft Word
- •Запуск сервера
- •Взаємодія з сервером на рівні документу
- •Безпосереднє виведення інформації. Об’єкт Selection
- •Форматування тестової інформації
- •Керування додатком Microsoft Word
- •Лекція 22. Експорт інформації в ms Excel
- •Керування сервером автоматизації Excel
- •Керування документами Excel
- •Адресація елементів документу на робочому аркуші
- •Виведення інформації в клітинки робочого аркуша
Лекція 29. Сервери автоматизації
Більшість задач друку інформації в програмних продуктах пов’язана з виведенням текстів і таблиць. При цьому, з одного боку, в програмах необхідно реалізовувати складні алгоритми форматування тексту при вводі, а з другого боку, такі задачі дублюють широко поширені пакети, в яких дані можливості вже реалізовані.
Більше того, виведення інформації на друк жорстко визначає вигляд отриманих документів, на який користувач не може впливати. При цьому з розвитком комп’ютерної техніки друковані документи стають все менш потрібними в зв’язку з широким використанням для обміну інформацією електронної пошти та факсів.
В таких умовах доцільно наділяти програмні продукти можливостями збереження інформації в загальноприйнятих форматах, таких, наприклад, як формат текстових документів RTF, тим більше, що Delphi частково підтримує такі можливості. Однак, робота з такими форматами все ж таки непроста і вимагає від розробника додаткових зусиль, особливо в умовах швидкого обновлення стандартів на формати представлення даних.
Другий підхід до підвищення гнучкості виведення інформації підтримується наявністю в Windows технології OLE (Object Linking and Embedding – зв’язування та впровадження об’єктів), яка дозволяє запускати сторонні додатки та передавати їм дані, викликаючи методи цих додатків. Технологія OLE є частиною технології COM – визнаного стандарту для виконання подібних операцій, і все більше програмних продуктів підтримують такі можливості. Виключенням не є і група продуктів Microsoft Office, кожний додаток якої може бути використаний з Delphi-додатків для передачі в них даних.
COM-об’єкти
COM (Component Object Model) – Модель багатокомпонентних об’єктів є об’єктно-орієнтованою концепцією, що описує правила побудови класів, які називаються COM-об’єктами з метою забезпечення взаємодії між ними незалежно від мови, на якій реалізовані дані класи, і середовища, в якому виконуються додатки.
Об’єкти COM реалізуються в спеціальному двійковому форматі. Він фактично є описом класу, не залежить від мови розробки і надає свою функціональність (дозволяє викликати свої методи) через набір інтерфейсів.
Для ідентифікації COM-об’єкту застосовуються глобальні унікальні ідентифікатори, які є 128-розрядними (16 байт) цілими числами і записуються в наступному форматі, де замість символу ‘x’ зазначається шістнадцяткова цифра (від 0 до F):
[‘{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}’]
Наприклад, головний додаток графічного редактора Adobe Photoshop має такий ідентифікатор: {43191d98-5d34-4103-be42-225a55c2312a}.
COM-об’єкти можуть використовуватися або всередині додатку, або в вигляді модулів, що виконуються (зовнішні COM-об’єкти).
Додаток (додаток-клієнт), що використовує COM-об’єкт, викликає метод, заявлений в інтерфейсі цього COM-об’єкта (об’єкта-сервера). Виклик здійснюється за допомогою імені з передачею необхідних параметрів, незалежно від типу COM-об’єкту (зовнішній або внутрішній). Зв’язування виклику методу з його адресою може бути виконане двома способами:
Через інтерфейс IDispatch.
Через таблицю віртуальних методів.
Таблиця віртуальних методів будується для COM-об’єктів на етапі компіляції програми, яка його використовує, і володіє такими перевагами, як висока швидкість роботи та відсутність помилок при передачі параметрів, оскільки синтаксис виклику перевіряється компілятором. Такий вид зв’язування називається раннім по аналогії з раннім зв’язуванням викликів методів для екземплярів звичайних класів Delphi. Для раннього зв’язування необхідна наявність бібліотеки типів, що містить інформацію про сигнатуру методів.
Другий варіант зв’язування – пізнє зв’язування – здійснюється за допомогою інтерфейсу IDispatch. COM-об’єкти, що реалізують інтерфейс IDispatch, називаються серверами автоматизації.
Приналежність COM-об’єкту до серверів автоматизації не виключає можливість раннього зв’язування – навпаки, інтерфейс IDispatch надає компілятору необхідну інформацію про типи. Інтерфейс IDispatch призначений для використання сервера автоматизації в умовах пізнього зв’язування і має декілька методів для визначення інформації про типи. В ньому визначений метод Invoke, якому передається ім’я методу для виклику та список параметрів. Саме на цьому методі побудований механізм використання серверів автоматизації з Delphi-програм. Метод Invoke має багато складних параметрів, однак від не використовується напряму розробниками прикладного програмного забезпечення. Виклики даного методу додаються в програму автоматично під час компіляції.