Программирование

Материал из Forumooo wiki

(Различия между версиями)
Перейти к: навигация, поиск
м (Выпонить макрос по клику на ссылке)
Строка 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>
-
==Доступ к графическому объекту по имени==
+
===Выполнить макрос по клику на ссылке===
-
Перебор всех графических объектов по индексу и сопоставление его имени. Например,
+
-
<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>
+
-
 
+
-
==Доступ к 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>
+
-
 
+
-
==Выполнить макрос по клику на ссылке==
+
Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).
Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).
Строка 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

Выполнить макрос по клику на ссылке

Гиперссылке можно назначить макрос. Для этого есть кнопка События в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).

Снимок-Гиперссылка.png

Кнопка События открывает диалог:

Снимок-Назначить макрос.png

В этом диалоге можно назначить, к примеру, такой макрос (он будет показывать сообщение с текстом гиперссылки при 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
Личные инструменты
Пространства имён
Варианты
Действия
Компоненты
Общие вопросы
Совместимость
Навигация
Инструменты