223 lines
No EOL
7.2 KiB
QBasic
223 lines
No EOL
7.2 KiB
QBasic
'
|
|
' This file is part of the LibreOffice project.
|
|
'
|
|
' This Source Code Form is subject to the terms of the Mozilla Public
|
|
' License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
' file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
'
|
|
|
|
Function new_doc_component(doc_type As String)
|
|
load_url = "private:factory/" & doc_type
|
|
desktop = createUnoService("com.sun.star.frame.Desktop")
|
|
Set new_doc_component = desktop.loadComponentFromURL(load_url, "_blank", 0, Array())
|
|
End Function
|
|
|
|
Sub use_documents
|
|
use_writer()
|
|
use_calc()
|
|
use_draw()
|
|
End Sub
|
|
|
|
Sub use_writer
|
|
Set doc = new_doc_component("swriter")
|
|
Set xtext = doc.Text
|
|
manipulateText(xtext)
|
|
|
|
' insert TextTable and get cell text, then manipulate text in cell
|
|
Set table = doc.createInstance("com.sun.star.text.TextTable")
|
|
xtext.insertTextContent(xtext.End, table, False)
|
|
|
|
xcell = table.getCellByPosition(0, 1)
|
|
manipulateText(xcell.getText())
|
|
manipulateTable(table)
|
|
|
|
' insert RectangleShape and get shape text, then manipulate text
|
|
Set writer_shape = doc.createInstance("com.sun.star.drawing.RectangleShape")
|
|
|
|
Dim Point As New com.sun.star.awt.Point
|
|
Dim Size As New com.sun.star.awt.Size
|
|
Size.Width= 10000
|
|
Size.Height= 10000
|
|
writer_shape.setSize(Size)
|
|
xtext.insertTextContent(xtext.End, writer_shape, False)
|
|
' wrap text inside shape
|
|
writer_shape.TextContourFrame = True
|
|
|
|
manipulateText(writer_shape)
|
|
manipulateShape(writer_shape)
|
|
|
|
bookmark = doc.createInstance("com.sun.star.text.Bookmark")
|
|
bookmark.Name = "MyUniqueBookmarkName"
|
|
' insert the bookmark at the end of the document
|
|
xtext.insertTextContent(xtext.End, bookmark, False)
|
|
|
|
' Query the added bookmark and set a string
|
|
found_bookmark = doc.Bookmarks.getByName("MyUniqueBookmarkName")
|
|
found_bookmark.Anchor.String = _
|
|
"The throat mike, glued to her neck, " +_
|
|
"looked as much as possible like an analgesic dermadisk." _
|
|
|
|
Set text_table = doc.TextTables
|
|
For i = 0 To text_table.getCount() - 1
|
|
text_table.getByIndex(i).BackColor = &HC8FFB9
|
|
Next
|
|
End Sub
|
|
|
|
Sub use_calc
|
|
doc = new_doc_component("scalc")
|
|
sheet = doc.Sheets(0)
|
|
|
|
' get cell A2 in first sheet
|
|
cell = sheet.getCellByPosition(1, 0)
|
|
cell.IsTextWrapped = True
|
|
|
|
manipulateText(cell.getText())
|
|
manipulateTable(sheet)
|
|
|
|
' create and insert RectangleShape and get shape text,
|
|
' then manipulate text
|
|
shape = doc.createInstance("com.sun.star.drawing.RectangleShape")
|
|
|
|
Dim Point As New com.sun.star.awt.Point
|
|
Dim Size As New com.sun.star.awt.Size
|
|
|
|
shape = doc.createInstance("com.sun.star.drawing.RectangleShape")
|
|
Point.X = 7000
|
|
Point.Y = 3000
|
|
Size.Width= 10000
|
|
Size.Height= 10000
|
|
shape.setSize(Size)
|
|
shape.setPosition(Point)
|
|
|
|
shape.TextContourFrame = True
|
|
sheet.DrawPage.add(shape)
|
|
|
|
manipulateText(shape)
|
|
manipulateShape(shape)
|
|
End Sub
|
|
|
|
Sub use_draw
|
|
doc = new_doc_component("sdraw")
|
|
|
|
Dim Point As New com.sun.star.awt.Point
|
|
Dim Size As New com.sun.star.awt.Size
|
|
|
|
draw_shape = doc.createInstance("com.sun.star.drawing.RectangleShape")
|
|
Point.X = 5000
|
|
Point.Y = 5000
|
|
Size.Width= 10000
|
|
Size.Height= 10000
|
|
draw_shape.setSize(Size)
|
|
draw_shape.setPosition(Point)
|
|
doc.DrawPages(0).add(draw_shape)
|
|
|
|
' wrap text inside shape
|
|
draw_shape.TextContourFrame = True
|
|
|
|
manipulateText(draw_shape)
|
|
manipulateShape(draw_shape)
|
|
End Sub
|
|
|
|
Sub manipulateText(xtext As Object)
|
|
' Insert text content
|
|
|
|
'param xtext: object that implements com.sun.star.text.XText interface.
|
|
|
|
' simply set whole text as one string
|
|
xtext.String = "He lay flat on the brown, pine-needled floor of the forest, " +_
|
|
"his chin on his folded arms, and high overhead the wind blew " +_
|
|
"in the tops of the pine trees."
|
|
|
|
' create text cursor for selecting and formatting
|
|
text_cursor = xtext.createTextCursor()
|
|
' use cursor to select "He lay" and apply bold italic
|
|
text_cursor.gotoStart(False)
|
|
text_cursor.goRight(6, True)
|
|
' from CharacterProperties
|
|
text_cursor.CharPosture = com.sun.star.awt.FontSlant.ITALIC
|
|
text_cursor.CharWeight = 150
|
|
|
|
' add more text at the end of the text using insertString
|
|
text_cursor.gotoEnd(False)
|
|
content = _
|
|
" The mountainside sloped gently where he lay; " +_
|
|
"but below it was steep and he could see the dark of the oiled " +_
|
|
"road winding through the pass. There was a stream alongside the " +_
|
|
"road and far down the pass he saw a mill beside the stream and " +_
|
|
"the falling water of the dam, white in the summer sunlight."
|
|
|
|
xtext.insertString(text_cursor, content, False)
|
|
' after insertString the cursor is behind the inserted text,
|
|
' insert more text
|
|
content = CHR$(10) & " ""Is that the mill?"" he asked."
|
|
xtext.insertString(text_cursor, content, False)
|
|
End Sub
|
|
|
|
Sub manipulateTable(xcellrange As Object)
|
|
'Format a table area
|
|
|
|
':param xcellrange: object that implements com.sun.star.table.XCellRange interface.
|
|
|
|
' enter column titles and a cell value
|
|
xcellrange.getCellByPosition(0, 0).SetString("Quotation")
|
|
xcellrange.getCellByPosition(0, 1).SetString("Year")
|
|
xcellrange.getCellByPosition(1, 1).SetValue(1940)
|
|
|
|
' format table headers and table borders
|
|
' we need to distinguish text and sheet tables:
|
|
' property name for cell colors is different in text and sheet cells
|
|
' we want to apply TableBorder to whole text table, but only to sheet
|
|
' cells with content
|
|
|
|
background_color = &H99CCFF
|
|
|
|
' create description for blue line, width 10
|
|
Dim border_line As New com.sun.star.table.BorderLine
|
|
border_line.Color = &H000099
|
|
border_line.OuterLineWidth = 10
|
|
' apply line description to all border lines and make them valid
|
|
Dim border As New com.sun.star.table.TableBorder
|
|
border.VerticalLine = border_line
|
|
border.HorizontalLine = border_line
|
|
border.LeftLine = border_line
|
|
border.RightLine = border_line
|
|
border.TopLine = border_line
|
|
border.BottomLine = border_line
|
|
border.IsVerticalLineValid = True
|
|
border.IsHorizontalLineValid = True
|
|
border.IsLeftLineValid = True
|
|
border.IsRightLineValid = True
|
|
border.IsTopLineValid = True
|
|
border.IsBottomLineValid = True
|
|
|
|
|
|
If xcellrange.supportsService("com.sun.star.sheet.Spreadsheet") Then
|
|
selected_cells = xcellrange.getCellRangeByName("A1:B2")
|
|
selected_cells.CellBackColor = background_color
|
|
selected_cells.TableBorder = border
|
|
' Print selected_cells.TableBorder.TopLine.Color
|
|
ElseIf xcellrange.supportsService("com.sun.star.text.TextTable") Then
|
|
selected_cells = xcellrange.getCellRangeByName("A1:B1")
|
|
selected_cells.BackColor = background_color
|
|
xcellrange.TableBorder = border
|
|
' Print xcellrange.TableBorder.TopLine.Color
|
|
End If
|
|
End Sub
|
|
|
|
Sub manipulateShape(xshape As Object)
|
|
'Format a shape
|
|
'param xshape: object that implements com.sun.star.drawing.XShape interface.
|
|
|
|
xshape.FillColor = &H99CCFF
|
|
xshape.LineColor = &H000099
|
|
xshape.RotateAngle = 3000
|
|
|
|
xshape.TextLeftDistance = 0
|
|
xshape.TextRightDistance = 0
|
|
xshape.TextUpperDistance = 0
|
|
xshape.TextLowerDistance = 0
|
|
End Sub
|
|
|
|
Sub Main
|
|
use_documents()
|
|
End Sub |