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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Выпонить макрос по клику на ссылке)
м (Выпонить макрос по клику на ссылке)
Строка 110: Строка 110:
End Sub</source>
End Sub</source>
-
==Выпонить макрос по клику на ссылке==
+
==Выполнить макрос по клику на ссылке==
Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).
Гиперссылке можно назначить макрос. Для этого есть кнопка '''События''' в дополнительных настройках диалога изменения гиперссылки (кнопка отмечена красным на скриншоте).

Версия 18:46, 20 октября 2010

Содержание

Как добавить интернет-ссылку в диалог 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

Sub Main
With ThisComponent
   For i=0 to .GraphicObjects.Count-1
      .GraphicObjects(0).dispose()
   Next
End With
End Sub

Доступ к графическому объекту по имени

Перебор всех графических объектов по индексу и сопоставление его имени. Например,

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

Доступ к 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

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

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

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