- •Укладач Чемолосова а.В.
- •Лекція 18. Створення компонентів під час виконання програми
- •Основі дії при створенні компонентів
- •Створення візуальних компонентів
- •Призначення обробників подій
- •Використання масивів компонентів
- •Лекція 19. Меню та панелі в стилі xp
- •Лекція 29. Сервери автоматизації
- •Створення та використання екземплярів серверів автоматизації
- •Лекція 21. Експорт інформації в ms Word
- •Експорт інформації в Microsoft Word
- •Запуск сервера
- •Взаємодія з сервером на рівні документу
- •Безпосереднє виведення інформації. Об’єкт Selection
- •Форматування тестової інформації
- •Керування додатком Microsoft Word
- •Лекція 22. Експорт інформації в ms Excel
- •Керування сервером автоматизації Excel
- •Керування документами Excel
- •Адресація елементів документу на робочому аркуші
- •Виведення інформації в клітинки робочого аркуша
Створення та використання екземплярів серверів автоматизації
Для створення екземпляра сервера автоматизації та його запуску використовується функція CreateOleObject, що описана в модулі CompObj наступним чином:
function CreateOleObject (const ClassName: string): IDispatch;
Функція повертає посилання на інтерфейс IDispatch об’єкту, зареєстрованого в реєстрі Windows під іменем ClassName. Для визначення назви класу слід вивчити документацію до програмного продукту, який надає сервер автоматизації. Для додатку Microsoft Word таким іменем є «Word.Application», а для Microsoft Excel - «Excel.Application». Аналогічні назви класів мають і інші компоненти Microsoft Office.
Якщо сервер автоматизації вже запущений, то посилання на нього можна отримати за допомогою функції GetActiveOleObject:
function GetActiveOleObject (const ClassName: string): IDispatch;
Посилання, які повертають функції CreateOleObject і GetActiveOleObject, слід зберігати в змінних, для подальшого доступу до створеного або отриманого об’єкту. Не дивлячись на те, що тип посилання визначений як IDispatch, змінна, в який це посилання зберігається, повинна мати тип Variant. Це пов’язано з тим, що з даної змінної будуть викликатися методи сервера автоматизації, що не описані в інтерфейсі IDispatch.
var Object: Variant;
……………………….
Object:=CreateOleObject(‘Word.Application’);
………………………
Використання екземпляра сервера автоматизації, тобто виклик його методів, здійснюється за допомогою конструкцій, звичайних для виклику методів у Delphi:
<Посилання на сервер>.<Назва методу>(<Список параметрів>);
Однак механізм, що використовується для реального виклику, суттєво відрізняється від виклику методів Delphi-класів. Назва методу та список його параметрів запаковується в спеціальну структуру, яка потім передається методу Invoke СОМ-об’єкту через посилання, отримане під час виклику функції CreateOleObject (GetActiveOleObject). Метод Invoke визначає, який саме його метод повинен бути викликаний, виконує його, запаковує результат і повертає його в програму, що його викликала.
Для знищення структур даних, пов’язаних використанням СОМ-об’єктів у програмі, слід присвоїти посиланню на нього значення Unassigned.
var Object: Variant;
……………………….
Object:=CreateOleObject(‘Word.Application’);
………………………
Object:= Unassigned;
………………………
Лекція 21. Експорт інформації в ms Word
Додатки, що входять до складу Microsoft Office, мають ієрархічну об’єктну структуру. Структура кожного додатку є складною і суттєво відрізняється від структури інших додатків, що обумовлено різною направленістю самих додатків.
Ієрархічна структура об’єктів відображає представлення даних, що редагуються в тому чи іншому додатку. Наприклад, структура Microsoft Word містить об’єкт верхнього рівня Application, що керує безпосередньо додатком, який, в свою чергу, містить об’єкти типу Document, які надають доступ до документів, відкритих в даний момент. При додаванні чергового документу Document стороннім додатком за допомогою методів сервера автоматизації, Microsoft Word відкриває черговий документ. Аналогічно об’єкти типу Document можуть містити в собі об’єкти типу Paragraph, які є посиланнями на абзаци тексту.
Доступ до об’єктів різного рівня з програми-клієнта, реалізованої, наприклад, на Delphi, здійснюється аналогічним чином через посилання на об’єкти, що знаходяться на більш високому рівні ієрархії.
Об’єкти одного рівня та призначення, наприклад об’єкти типу Document, об’єднуються в одну властивість, так зване сімейство, яке має назву типу об’єктів у множині. Таким чином, об’єкти типу Document об’єднуються в властивість Documents. Такі властивості фактично є списками, для яких можна визначити кількість елементів в кожному з них (властивість Count) та отримати доступ до елементу за допомогою функції Item, що отримує в якості параметру номер об’єкту в списку. Елементи нумеруються від одиниці.
Цікавою особливістю сімейств є те, що властивості підтримують ті ж самі властивості і методи, які підтримується об’єктами, що входять до складу сімейства. Звернення до сімейства еквівалентне зверненню до всіх елементів сімейства по черзі.
Для передачі параметрів у методи об’єктів автоматизації і присвоєння значень їх властивостям використовується спеціальний тип даних OleVariant. Його відмінність від типу Variant полягає в сумісності з операційною системою, яка й підтримує технологію СОМ.