Часть 3. Writer
3.1 Вставка текста в начало документа
Основными действиями, которые нас интересуют в работе с Writer'ом является возможность вставлять текст, например в начало документа и по метке, плюс возможность задавать форматирование текста. Поскольку работа с метками несколько более сложная, разберемся вначале с первым вариантом. Функция вставки текста приведена в листинге 10.
Листинг 10
procedure TOpenOffice.InsertTextWriter(const Text: String);
var
TextPointer: Variant;
CursorPointer: Variant;
begin
TextPointer := Document.GetText;
CursorPointer := TextPointer.CreateTextCursor;
TextPointer.InsertString(CursorPointer, Text, false);
TextPointer.InsertControlCharacter(CursorPointer, 0, false);
end;
|
Рассмотрим эту процедуру подробнее. Прежде чем начать работу с текстом, нам необходимо получить указатель на текст, как на объект документа. Для чего мы используем TextPointer := Document.GetText. Таким образом, схема взаимодействия будет следующей: ServiceManager -> Desktop -> Document -> TextPointer. После этого нам надо создать курсор, что делается методом CreateTextCursor. Только после этого мы уже можем непосредственно вставить строку в начало документа: TextPointer.InsertString(CursorPointer, Text, false). В качестве параметров для этого метода мы передаем созданный курсор, текст для вставки, а также параметр absorb: boolean. Если этот параметр равен False, то текст будет вставляться последовательно, в этом случае TextPointer будет указывать на весть текст, включая последнюю вставленную строку; если же True – тогда только на последнюю вставленную строку, причем, строка, на которую он указывал раньше будет удалена.
Метод InsertControlCharacter вставляет символ завершения строки. Второй аргумент («0») - константа, которая обозначает этот символ (com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK).
Теперь разберемся с форматированием текста. Чтобы поменять размер шрифта или его цвет, нужно установить соответствующее свойство курсора. Например, для установки 20 шрифта это будет выглядеть так:
CursorPointer.SetPropertyValue('CharHeight', 20);
Можно поменять цвет шрифта:
CursorPointer.SetPropertyValue('CharColor', 500);
В этом случае в качестве второго параметра передается цвет в формате RGB.
CursorPointer.SetPropertyValue('CharShadowed', True);
Можно сделать текст подчеркнутым, курсивным и жирным. Это будет выглядеть так:
CursorPointer.setPropertyValue('CharPosture',fsItalic);
CursorPointer.setPropertyValue('CharWeight',fsBold);
CursorPointer.setPropertyValue('CharUnderline',fsUnderline);
В принципе, можно и самому задать степень «жирности» и другие параметры. Ведь fsBold и т.д. есть ни что иное, как константы. Поэтому можно, например ввести вместо fsBold константу 200, текст будет жирными. Советую поэкспериментировать с этим.
Отмечу, что вновь вставленная строка будет обладать установленными свойствами, если их определить до вставки.
И еще пара возможностей для работы с курсором. Можно перейти в начало текста:
CursorPointer.gotoStart(False).
В конец текста:
CursorPointer.gotoEnd(False).
CursorPointer.goLeft(short Count, boolean Expand) – передвигаем курсор влево на Count.
Аналогично goRight(short Count, boolean Expand).
Можно передвигаться по словам:
boolean gotoNextWord(boolean Expand);
boolean gotoPreviousWord(boolean Expand);
boolean gotoEndOfWord(boolean Expand);
boolean gotoStartOfWord(boolean Expand);
Переменная Expand определяет будет ли курсор расширятся при своем передвижении.
Существует и множество других возможностей работы с курсором, но мы остановимся только на этом необходимом наборе.
3.2 Вставка текста по метке
Теперь рассмотрим вставку текста по меткам. Вообще, на мой взгляд, именно операции с метками являются самыми важными с точки зрения автоматизации работы на предприятии. Обычно создается типичный шаблон отчета, туда один раз забиваются все метки и все. Дальнейшая работа программ автоматизации каждый раз вставлять новые данне в этот шаблон по меткам. Поэтому отведем работе с метками повышенное внимание. За работу с метками отвечает интерфейс xBookmarksSupplier. В листинге 11 показан пример вставки текста по метке.
Листинг 11
procedure TOpenOffice.InsertTextByNameWriter(const Text: String, BookmarkName: String );
var
TextPointer: Variant;
CursorPointer: Variant;
BookmarksSupplier: Variant;
Bookmark: Variant;
Flag: boolean;
begin
Flag:=True;
TextPointer := Document.GetText;
CursorPointer := TextPointer.CreateTextCursor;
BookmarksSupplier:=Document.getBookmarks;
try
Bookmark:=BookmarksSupplier.getByName(BookmarkName).getAnchor;
except
ShowMessage('Такой метки нет');
Flag:=False;
end;
if(Flag) then Bookmark.setString(Text);
end;
|
Как видно, начало этого метода ничем не отличается от предыдущего. Далее идут различия в получении метки. Для этого мы используем метод getBookmarks. Таким образом, мы получаем все метки, которые есть в документе. Далее мы можем найти метку, которая нам нужна. Для этого мы из всех меток выбираем метку с именем BookmarkName: BookmarksSupplier.getByName(BookmarkName). Метод getAnchor возвращает текстовый объект, который относится к этой метке. Если такой метки в документе нет, возвращается сообщение об ошибке. Для отслеживания этой ошибки мы вводим переменную Flag: boolean. Если же метка обнаружена, мы можем вставлять текст с помощью метода setString, вызванного для этой метки. На этом разговор о OpenOffice.Writer будем считать законченным и перейдем к OpenOffice.Calc.
|