Чтение онлайн

на главную - закладки

Жанры

Шрифт:
...

Листинг 9.5.

Сохранение документа Microsoft Word

procedure TFormWord.bnSaveClick(Sender: TObject);

begin

//Сохранение документа

Wrd.ActiveDocument.SaveAs(ExtractFilePath(Application.EXEName) +

\'_result.DOC\');

end;

Сохранение осуществляется путем вызова MeTOflaSaveAs объекта ActiveDocument, который в качестве параметра принимает путь к файлу. После нажатия кнопки сохранения документ с текстом будет записан в файл (result. doc) каталога, из которого была запущена программа.

Процедура завершения работы основана на вызове метода Quit (листинг 9.6).

...

Листинг 9.6.

Завершение

работы с Microsoft Word

procedure TFormWord.bnExitWordClick(Sender: TObject);

begin

//Завершение приложения

Wrd.Quit;

end;

Рассмотренное приложение является примитивным контроллером автоматизации и может служить отправной точкой создания более сложных и функциональных программ автоматического составления отчетов и т. п.

Далее приступим к созданию приложения, которое будет подключаться к серверу COM Microsoft Word и выводить текст, дату и время вывода этого текста в активный документ при его смене (переключении между документами). На этот раз мы воспользуемся компонентами WordDocument и WordApplication с вкладки Servers.

Создаем новый проект и на главную форму приложения помещаем компоненты WordDocument nWordApplication. Далее устанавливаем CBoftcTBoConnectKind компонента Wo г dApp licationBc kRunni ng I ns t anc e, а также значение свойства AutoConnect в True. В данном случае приложение Microsoft Word создаваться не будет, а программа подключится к уже существующему серверу. Основную практическую ценность для нас представляет механизм определения активного документа и добавление в него текста, даты и времени (листинг 9.7).

...

Листинг 9.7.

Реакция на смену активного документа

procedure TFormActiveWord.WordApplicationActiveDocumentChange

(Sender: TObject);

begin

//Подключаемся к текущему документу

WordDocumentNew.ConnectTo( WordApplicationActive.ActiveDocument);

//Контроллер добавляет новую строку в текущий документ

WordDocumentNew.Range.InsertAfter(#13#10+\'Переход к документу\'+#13#10+

WordApplicationActive.ActiveDocument.Get_FullName+\' произведен :\'+ DateTimeToStr(Now));

end;

Как вы заметили, подключение к уже существующему серверу происходит каждый раз после смены активного документа. В этот момент в содержимое документа записывается информация: текстовая строка, дата и время перехода к этому документу.

Чтобы просмотреть работу этого приложения, запустите Microsoft Word и создайте в нем два документа. Запустите созданный пример и поочередно активизируйте документы (щелчком кнопкой мыши на Панели задач).

Трюки в Microsoft Excel

Не менее популярным и функциональным приложением из пакета Microsoft Office является Microsoft Excel. Это программа для работы с электронными таблицами. Как и уже знакомое нам приложение Microsoft Word, Microsoft Excel также обладает возможностью создания и редактирования документов (в данном случае таблиц) посредством СОМ. Преимущества использования Microsoft Excel из других программ очевидны, так как она предоставляет широкий спектр возможностей по построению диаграмм, графиков, произведению различных расчетов и пр. Поэтому в качестве примера создадим приложение, которое будет выполнять запуск Microsoft Excel, добавление новой книги, создание листа и помещение в его ячейки текста и формул.

Как и в случае с Microsoft Word, будет использоваться объект THnaOleVariant. Но методы и свойства СОМ-сервера поменяются. Рассмотрим исходный текст приложения для выполнения несложных операций с сервером Microsoft Excel (листинг 9.8).

...

Листинг 9.8.

Работа с Microsoft Excel

unit COMinExcel;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms,

Dialogs,

//Включаем модуль работы с COM-объектами

ComObj;

type

TFormCOMExcel = class(TForm)

//Процедура,

вызываемая при создании формы

procedure FormCreate(Sender: TObject);

//Процедура, вызываемая при завершении работы приложения

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormCOMExcel: TFormCOMExcel;

//Объявление объекта OleVariant с именем Microsoft Excel

Excel: OleVariant;

implementation

{$R *.dfm}

procedure TFormCOMExcel.FormCreate(Sender: TObject);

begin

//Инициализируем объект

Excel := CreateOleObject(\'Excel.Application\');

//Устанавливаем видимым окно приложения Microsoft Excel

Excel.Visible := true;

//Добавляем новую книгу

Excel.Application.Workbooks.Add;

//Вводим текст в ячейку с индексом E5

Excel.Application.Worksheets.Item[\'Лист1\'].

Cells.Item[5,5].FormulaR1C1 := \'! ТЕКСТ !\

//Задаем характеристики шрифта

Excel.Application.Worksheets.Item[\'Лист1\'].

Cells.Item[1,1].Font.Bold := true;

//В ячейку с индексом A1 записываем формулу

Excel.Application.Worksheets.Item[\'Лист1\'].

Cells.Item[1,1].FormulaR1C1 := \'=18*2\

end;

procedure TFormCOMExcel.FormDestroy(Sender: TObject);

begin

//Закрываем приложение Microsoft Excel

Excel.Quit;

end;

end.

Предложенный листинг демонстрирует основы удаленного управления приложением Microsoft Excel. Запуск Microsoft Excel, заполнение ячеек новой таблицы происходит в функции FormCreate.

Во время создания главной формы приложения-примера на экране появится окно программы Microsoft Excel с числом в ячейке с индексом А1 и текстом в ячейке с индексом Е5. Хотя в ячейку с индексом А1 мы записывали =18*2, на экране в этой ячейке будет отображаться 32, так как Microsoft Excel автоматически преобразует выражения в ячейках.

Глава 10 Окна других приложений

• Ловушки Windows

• Программа «Оконный шпион»

Здесь мы будем использовать сведения, приведенные в предыдущих главах (а точнее, в главах 1, 2 и 8), для построения программы, позволяющей проводить различные операции с окнами приложений. Вы также дополнительно познакомитесь с техникой применения ловушек (hook) в Windows и увидите пример реального использования проецирования файла в память для обмена данными между несколькими приложениями. Причем второе в нашем примере обусловлено особенностью работы ловушек, следящих за работой других приложений. Вы также узнаете, как перечислять все открытые окна и, соответственно, получать к ним доступ. Но обо всем по порядку.

10.1. Ловушки Windows

Из предыдущих глав вам должен быть понятен или, по крайней мере, известен механизм, который используется Windows для управления окнами приложений, – сообщения. Вероятно, большая мощь этого механизма и в то же время его уязвимость состоят в возможности посылки сообщений любым окнам (окнам одного процесса или окнам других процессов).

В Windows также предусмотрен мощный механизм, позволяющий следить за некоторыми важными событиями в системе и, конечно, производить мониторинг сообщений, получаемых различными окнами. Речь идет об установке так называемых ловушек. Ловушка представляет собой функцию, вызываемую при возникновении определенного события, например перед получением каким-либо окном нового сообщения, при нажатии клавиши, записи события в системный журнал и т. д.: все зависит от того, для каких событий разработчики предусмотрели ловушки. Интересен тот факт, что в Windows предусмотрены даже ловушки для отладки других ловушек.

Мы рассмотрим некоторые наиболее простые виды ловушек, перехватывающих сообщения окон. По глобальности действия рассмотренные нами ловушки являются устанавливаемыми на отдельный поток: при ошибке в функции-ловушке это безопаснее для системы.

Начинается создание ловушки с написания собственно функции-ловушки, имеющей следующий прототип:

...

function HookProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT stdcall;

Поделиться:
Популярные книги

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Лекарь Империи 8

Лиманский Александр
8. Лекарь Империи
Фантастика:
попаданцы
городское фэнтези
аниме
5.00
рейтинг книги
Лекарь Империи 8

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Матабар VIII

Клеванский Кирилл Сергеевич
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар VIII

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Кодекс Императора

Сапфир Олег
1. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
4.25
рейтинг книги
Кодекс Императора

Последний Паладин. Том 8

Саваровский Роман
8. Путь Паладина
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Последний Паладин. Том 8

Черный Маг Императора 16

Герда Александр
16. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 16

Наследник

Майерс Александр
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник

Вечный. Книга VII

Рокотов Алексей
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Вечный. Книга VII