Краткая теория
Макросы в Draw
1. Запустите OpenOffice.org Draw.
Создайте текстовый документ
C:\2kurs\vasya\upr9-1.odg
2. Создайте в документе upr9-1.odg
библиотеку myLibrary1
см. Лабораторную работу 8.
3. Откройте макрос для редактирования в
upr9-1.odt\myLibrary1\Module1
4. Запишите программу на OOo Basic
и сохраните ее.
5. В главном меню выберите
Вид\Панели инструментов\Элементы управления
6. Разместите в документе кнопку
и свяжите с ней макрос.
Макросы в Writer
1. Запустите OpenOffice.org Writer.
Создайте текстовый документ
C:\2kurs\vasya\upr9-1.odt
2. Создайте в документе upr9-1.odt
библиотеку myLibrary1
см. Лабораторную работу 8.
3. Откройте макрос для редактирования в
upr9-1.odt\myLibrary1\Module1
4. Запишите программу на OOo Basic
и сохраните ее.
5. В главном меню выберите
Вид\Панели инструментов\Элементы управления
6. Разместите в документе кнопку
и свяжите с ней макрос.
Упражнения
1. Построить с помощью макроса в документе,
созданном в OpenOffice.org Draw,
график синуса,
1) из фигур Ellipse
2)* из фигур Line.
Пример 1.1. Линейный график
Sub Main
Const N = 10
Const X0 = 2000
Const Y0 = 2000
Const DX = 2000
Const DY = 2000
Dim Doc As Object
Dim Page As Object
Dim EllipseShape(N) As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Size.Width = 1000
Size.Height = 1000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
for i = 1 to N
EllipseShape(i) = Doc.createInstance("com.sun.star.drawing.EllipseShape")
EllipseShape(i).Size = Size
Point.x = X0 + i*DX
Point.y = Y0 + i*DY
EllipseShape(i).Position = Point
Page.add(EllipseShape(i))
next i
End Sub
Пример 1.2. График синуса
Sub Main
Const START_X = - 6.28
Const STOP_X = 6.28
Const D_X = 0.1
Const A = 1
Const SCALE_X = 5000
Const SCALE_Y = 5000
Dim x As Single
Dim y As Single
Dim gx As Integer
Dim gy As Integer
Const N = 10
Const X0 = 30000
Const Y0 = 15000
Const DX = 2000
Const DY = 2000
Dim Doc As Object
Dim Page As Object
Dim Shape As Object
Dim EllipseShape(N) As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Size.Width = 500
Size.Height = 500
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
for x = START_X to STOP_S step D_X
y = A*sin(x)
gx = Int(SCALE_X * x)
gy = Int(SCALE_Y * y)
EllipseShape(i) = Doc.createInstance("com.sun.star.drawing.EllipseShape")
EllipseShape(i).Size = Size
Point.x = X0 + gx
Point.y = Y0 - gy
EllipseShape(i).Position = Point
Page.add(EllipseShape(i))
next x
End Sub
2. Пронумеровать строки текстового документа.
Пример 2.1.
Sub Main
Dim Doc As Object
Dim Cursor As Object
Dim dontEmpty As Boolean
Dim Num As Integer
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor
Num = 1
Do
Cursor.String = Num & ". "
Num = Num + 1
dontEmpty = Cursor.gotoNextParagraph(False)
Loop While dontEmpty
End Sub
3. Проставить номера строк кратные заданному числу.
4.* В заданном тексте документа подсчитать количество
1) абзацев;
2) гласных букв;
3) цифр;
4) слов;
5.* Заполнить одномерный массив целыми случайными числами
и вывести в таблицу.
6.** Заменить все двойные пробелы одиночными.
7.** Заполнить двумерный массив целыми случайными числами
из заданного отрезка и вывести в таблицу.
Пример 7.1. Вывод двумерного массива в таблицу на OpenOffice.org Basic
в документ OpenOffice.org Writer
Sub printMyTable
Const COL_MAX = 4
Const ROW_MAX = 5
Const A = -25
Const B = 15
Dim z(ROW_MAX, COL_MAX) As Integer
Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Dim Rows As Object
Dim RowIndex As Integer
Dim Cols As Object
Dim ColIndex As Integer
Dim CellName As String
Dim Cell As Object
Dim CellCursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(ROW_MAX, COL_MAX)
Doc.Text.insertTextContent(Cursor, Table, False)
Rows = Table.getRows
Cols = Table.getColumns
For RowIndex = 1 To Rows.getCount()
For ColIndex = 1 To Cols.getCount()
z(RowIndex, ColIndex) = Int((B - A)*Rnd + A)
CellName = Chr(64 + ColIndex) & RowIndex
Cell = Table.getCellByName(CellName)
' Cell.String = "row: " & CStr(RowIndex) + ", column: " & CStr(ColIndex)
Cell.String = z(RowIndex, ColIndex)
CellCursor = Cell.createTextCursor()
CellCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
Next
Next
End Sub
Источники
LinuxFormat 104 p.88