Программирование
Материал из Forumooo wiki
Содержание |
Общее
Какие инструменты использовать
Программировать можно на Basic, Java, Python, JavaScript, BeanShell, C++. Basic - имеет встроенную в офис среду разработки (как и JavaScript, и Beanshell), однако у него нет IntelliSense, поэтому вместе с Basic удобно использовать специальные инструменты для инстпектирвания объектов, такие как MRI или Xray Storm (или просто Xray). Для Java можно использовать Netbeans или Eclipse. В этих средах разработки есть IntelliSense. (Удобно в них установить специальные плагины. Инструкция для Eclipse находится по адресу: http://wiki.services.openoffice.org/wiki/JavaEclipseTuto . Инструкция для Netbeans находится по адресу: http://wiki.services.openoffice.org/wiki/OpenOffice_NetBeans_Integration .)
Как добавить интернет-ссылку в диалог Basic
Образец кода на Basic.
Sub Dialog() oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1) A = CreateCtrWithProp("FixedHyperlink", MkRk(30,30,100,20), Array(), Array()) A.Text="кц.рф" A.URL="http://кц.рф" oDlg.addControl("A1",A) oDlg.Execute() End Sub Function CreateCtrWithProp( CtrType, aPosSize, aPropNames, aPropValues ) Dim oCtr As Object, oCtrModel As Object oCtr = createUnoService("com.sun.star.awt.UnoControl" & CtrType ) oCtrModel = createUnoService("com.sun.star.awt.UnoControl" & CtrType & "Model" ) oCtrModel.setPropertyValues( aPropNames, aPropValues ) With oCtr .setModel(oCtrModel) .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _ com.sun.star.awt.PosSize.POSSIZE ) End With CreateCtrWithProp() = oCtr End Function Function MkRk( nX As Long, nY As Long, nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle Dim Rk As Object Rk = createUnoStruct("com.sun.star.awt.Rectangle") With Rk .X = nX .Y = nY .Width = nWidth .Height = nHeight End With MkRk() = Rk End Function
Использование диспетчера
Для использования диспетчера вам необходимо будет получить два объекта API OOo — создать сервис com.sun.star.frame.DispatchHelper и получить доступ к фрейму (носителю GUI) целевого объекта. Далее нужно будет вызвать executeDispatch указав ему целевой фрейм и команду которую необходимо отправить указанному фрейму. Следующий код демонстрирует вставку из буфера обмена в позицию курсора:
Sub PasteFromDispatcher ' Вставка данных из буфера обмена Dim oFrame As Object Dim oDispath As Object ' Получаем фрейм документа oFrame = ThisComponent.CurrentController.Frame ' Создаём диспетчер oDispath = createUnoService("com.sun.star.frame.DispatchHelper") ' Выполняем действие oDispath.executeDispatch(oFrame, ".uno:Paste", "", 0, Array()) End Sub
Для использования некоторых команд вам также придётся создать массив содержащий аргументы команды — массив структур com.sun.star.beans.PropertyValue. В следующем коде, выполняющем вставку формулы в текущую (активную) ячейку Calc, как раз используется команда диспетчера требующая аргументов:
Sub EnterFormulaFromDispatcher ' Ввод формулы в текущую ячейку листа Calc Dim oFrame As Object Dim oDispath As Object ' Получаем фрейм документа oFrame = ThisComponent.CurrentController.Frame ' Создаём диспетчер oDispath = createUnoService("com.sun.star.frame.DispatchHelper") ' Создаём массив аргументов Dim Args(0) As New com.sun.star.beans.PropertyValue Args(0).Name = "StringName" Args(0).Value = "=A1+A2" ' Выполняем действие oDispath.executeDispatch(oFrame, ".uno:EnterString", "", 0, Args()) End Sub
В прикреплённом файле приведён полный перечень команд диспетчеру: HOW-TO Use DispatchHelper (ru).odt
Writer
Как удалить все графические объекты в документе Writer
Sub Main With ThisComponent For i=0 to .GraphicObjects.Count-1 .GraphicObjects(0).dispose() Next End With End Sub
Выполнить макрос по клику на ссылке
Гиперссылке можно назначить макрос. Для этого есть кнопка События в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).
Кнопка События открывает диалог:
В этом диалоге можно назначить, к примеру, такой макрос (он будет показывать сообщение с текстом гиперссылки при Ctrl-кликании по гиперссылке):
sub zzz Doc=ThisComponent VK=Doc.CurrentController.ViewCursor TK=Doc.Text.createTextCursorByRange(VK,FALSE) S=TK.HyperLinkURL Do while TK.HyperLinkURL<>"" TK.goLeft(1,FALSE) If TK.isStartOfParagraph=TRUE then exit do Loop Do while TK.HyperLinkURL<>"" TK.goRight(1,TRUE) If TK.isEndOfParagraph=TRUE then exit do Loop msgbox TK.String end sub
Draw/Impress
Доступ к графическому объекту по имени
Перебор всех графических объектов по индексу и сопоставление его имени. Например,
Sub Main With ThisComponent For i=0 to .DrawPages.Count-1 For j=0 to .DrawPages(i).Count-1 If .DrawPages(i).getByIndex(j).Name="Рисунок1" then msgbox ("Есть рисунок!") else msgbox ("Нету!") Next Next End With End Sub
Base?
Доступ к ListBox на форме
Sub changeLBSource dim oDoc as object, oForm as object dim oListBox as object Dim nCount As Integer oDoc = ThisComponent oForm = oDoc.DrawPage.Forms(0) oListBox = oForm.getByName("ListBox") oListboxControl = oDoc.getCurrentController().getControl(oListBox) oListboxControl.addItem("455", 0) End Sub