Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
94
Добавлен:
11.05.2015
Размер:
616.76 Кб
Скачать
      1. Какой курсор нужно использовать для удаления строки или параграфа

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

Sub DeleteCurrentLine ' Удаляем текущую строку

Dim oVCurs

oVCurs = ThisComponent.getCurrentController().getViewCursor()

oVCurs.gotoStartOfLine(False)

oVCurs.gotoEndOfLine(True)

oVCurs.setString("")

End Sub

Чтобы удалить текущий параграф, используйте запрос курсора параграфов (paragraph cursor), который не является видимым курсором. Видимый курсор нужен, если требуется найти текущую позицию курсора.

Sub DeleteParagraph

Dim oCurs

Dim oText

Dim oVCurs

oVCurs = ThisComponent.getCurrentController().getViewCursor()

REM Получить текстовый объект из курсора - более надежно, чем предполагать,

REM что объект текстового документа верхнего уровня содержит видимый курсор

REM

oText = oVCurs.getText()

oCurs = oText.createTextCursorByRange(oVCurs)

oCurs.gotoStartOfParagraph(False)

If oCurs.gotoNextParagraph(True) Then

oCurs.setString("")

Else

REM Теперь мы находимся уже в (AT) последнем параграфе

If oCurs.gotoPreviousParagraph(False) Then

oCurs.gotoEndOfParagraph(False)

oCurs.gotoNextParagraph(True)

oCurs.gotoEndOfParagraph(True)

oCurs.setString("")

Else

Rem Существует ровно один параграф

REM Удаляем его

oCurs.gotoStartOfParagraph(False)

oCurs.gotoEndOfParagraph(True)

oCurs.setString("")

End If

End If

End Sub

      1. Удалить текущую страницу

Чтобы удалить страницу целиком, требуется видимый курсор (view cursor), потому что только видимый курсор "знает", где начинается и заканчивается страница. См. следующий упрощенный пример:

Sub removeCurrentPage()

REM Author: Andrew Pitonyak

Dim oVCurs

Dim oCurs

oVCurs = ThisComponent.getCurrentController().getViewCursor()

If oVCurs.jumpToStartOfPage() Then

oCurs = ThisComponent.getText().CreateTextCursorByRange(oVCurs)

If (oVCurs.jumpToEndOfPage()) Then

oCurs.gotoRange(oVCurs, True)

oCurs.setString("")

Else

Print "Нельзя перескочить к концу страницы"

End If

Else

Print "Нельзя перескочить к началу страницы"

End If

End Sub

Я частично проверил этот макрос. Если страница начинается с параграфа и заканчиваестя параграфом, макрос может оставить лишний пустой параграф в тексте. Очень похоже, что метод jumpToEndOfPage(), вероятно, не включает символ конца параграфа.

    1. Вставка индекса или оглавления (table of contents)

Оглавление (TOC = table of contents) - это просто другой тип индекса. Я вставил достаточно комментариев, чтобы ответить на большинство Ваших вопросов о том, как он работает.

Sub InsertATOC ' Вставить TOC (оглавление)

REM Author: Andrew Pitonyak

Dim oCurs 'Используется для вставки текстового содержимого

Dim oIndexes 'Все существующие индексы

Dim oIndex 'TOC , если существует, или новый, если не было

Dim i As Integer 'Найти существующий TOC

Dim bIndexFound As Boolean 'Флаг (признак), что TOC уже найден

Dim s$

REM Во-первых, находим существующий TOC , если он есть. Если удалось,

REM то он будет просто обновлен

oIndexes = ThisComponent.getDocumentIndexes()

bIndexFound = False

For i = 0 To oIndexes.getCount() - 1

oIndex = oIndexes.getByIndex(i)

If oIndex.supportsService("com.sun.star.text.ContentIndex") Then

bIndexFound = True

Exit For

End If

Next

If Not bIndexFound Then

Print "Не найден существующий индекс (content index)"

REM Возможно, нужно создать и вставить новый индекс!

REM Заметьте, что он ДОЛЖЕН быть создан в том документе, который

REM будет содержать этот индекс.

S = "com.sun.star.text.ContentIndex"

oIndex = ThisComponent.createInstance(s)

REM На моем компьютере есть значения по умолчанию

REM Как Вы хотите создавать индекс?

REM CreateFromChapter = False

REM CreateFromLevelParagraphStyles = False

REM CreateFromMarks = True

REM CreateFromOutline = False

oIndex.CreateFromOutline = True

REM Вы можете установить еще много видов других свойств, таких как

REM заголовок (Title) или уровень (Level)

oCurs = ThisComponent.getText().createTextCursor()

oCurs.gotoStart(False)

ThisComponent.getText().insertTextContent(oCurs, oIndex, False)

End If

REM Даже только что вставленный индекс не обновляется до этого места!

oIndex.update()

End Sub

Соседние файлы в папке ooo