Программирование
Материал из Forumooo wiki
Clio (Обсуждение | вклад) м (→Выпонить макрос по клику на ссылке) |
Clio (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
- | ==Как добавить интернет-ссылку в диалог Basic== | + | ==Общее== |
+ | ===Какие инструменты использовать=== | ||
+ | Программировать можно на Basic, Java, Python, JavaScript, BeanShell, C++... Basic - имеет встроенную в офис среду разработки (как и JavaScript, и Beanshell), однако у него нет [http://ru.wikipedia.org/wiki/IntelliSense IntelliSense], поэтому вместе с Basic удобно использовать специальные инструменты для инстпектирвания объектов, такие как [http://extensions.services.openoffice.org/ru/project/mri MRI] или [http://myooo.ru/content/view/155/1/ Xray Storm] (или просто [http://ooomacros.org/dev.php#101416 Xray]). Для Java можно использовать [http://www.netbeans.org/ Netbeans] или [http://www.eclipse.org/ Eclipse]. В этих средах разработки есть IntelliSense. (Удобно в них установить специальные плагины. Инструкция для Eclipse находится по адресу: http://wiki.services.openoffice.org/wiki/JavaEclipseTuto . Инструкция для Netbeans находится по адресу: http://wiki.services.openoffice.org/wiki/OpenOffice_NetBeans_Integration .) | ||
+ | |||
+ | ===Как добавить интернет-ссылку в диалог Basic=== | ||
Образец кода на Basic. | Образец кода на Basic. | ||
Строка 38: | Строка 42: | ||
</source> | </source> | ||
- | ==Использование диспетчера== | + | ===Использование диспетчера=== |
Для использования диспетчера вам необходимо будет получить два объекта API OOo — создать сервис com.sun.star.frame.DispatchHelper и получить доступ к фрейму (носителю GUI) целевого объекта. Далее нужно будет вызвать executeDispatch указав ему целевой фрейм и команду которую необходимо отправить указанному фрейму. | Для использования диспетчера вам необходимо будет получить два объекта API OOo — создать сервис com.sun.star.frame.DispatchHelper и получить доступ к фрейму (носителю GUI) целевого объекта. Далее нужно будет вызвать executeDispatch указав ему целевой фрейм и команду которую необходимо отправить указанному фрейму. | ||
Следующий код демонстрирует вставку из буфера обмена в позицию курсора: | Следующий код демонстрирует вставку из буфера обмена в позицию курсора: | ||
Строка 75: | Строка 79: | ||
В прикреплённом файле приведён полный перечень команд диспетчеру: [http://wiki.forumooo.ru/images/9/93/HOW-TO_Use_DispatchHelper_%28ru%29.odt HOW-TO Use DispatchHelper (ru).odt] | В прикреплённом файле приведён полный перечень команд диспетчеру: [http://wiki.forumooo.ru/images/9/93/HOW-TO_Use_DispatchHelper_%28ru%29.odt HOW-TO Use DispatchHelper (ru).odt] | ||
- | ==Как удалить все графические объекты в документе Writer== | + | ==Writer== |
+ | ===Как удалить все графические объекты в документе Writer=== | ||
<source lang="oobas"> | <source lang="oobas"> | ||
Sub Main | Sub Main | ||
Строка 85: | Строка 90: | ||
End Sub</source> | End Sub</source> | ||
- | = | + | ===Выполнить макрос по клику на ссылке=== |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==Выполнить макрос по клику на ссылке== | + | |
Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте). | Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте). | ||
Строка 135: | Строка 115: | ||
msgbox TK.String | msgbox TK.String | ||
end sub</source> | end sub</source> | ||
+ | |||
+ | ==Draw/Impress== | ||
+ | ===Доступ к графическому объекту по имени=== | ||
+ | Перебор всех графических объектов по индексу и сопоставление его имени. Например, | ||
+ | <source lang="oobas">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</source> | ||
+ | |||
+ | ==Base== | ||
+ | ===Доступ к ListBox на форме=== | ||
+ | <source lang="oobas">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</source> |
Версия 17:08, 23 октября 2010
Содержание |
Общее
Какие инструменты использовать
Программировать можно на 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