Как правильно передать параметры?

Автор Auga, 15 сентября 2023, 21:29

0 Пользователи и 1 гость просматривают эту тему.

Auga

   Event = CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor")
With Event
    .AddListenerParam = ""
    .EventMethod = "actionPerformed"
    .ListenerType = "XActionListener"
    .ScriptCode =  "vnd.sun.star.script:Standard.PRINT.ButtonPushEvent?language=Basic&location=application"
    .ScriptType = "Script"
End With
  Form.registerScriptEvent(0, Event)

Sub ButtonPushEvent(par)
  Print par
End sub

Как правильно передать параметры в ButtonPushEvent ?

sokol92

Судя по Вашему фрагменту макроса параметр par- это UNO-структура ActionEvent. Ваша процедура ButtonPushEvent будет вызвана после нажатия кнопки.
Выдача на экран (Print) этой структуры приведет к ошибке.
Можно установить знаменитое расширение MRI и с его помощью изучить эту струтуру (либо посмотреть в отладчике). Свойство source структуры возвращает объект - источник (кнопку).
Владимир.

Auga

Спасибо за ответ.

но я бы хотел уточнить можно ли передать параметры вместе с нажатием кнопки,
что-то типа такого:
.ScriptCode =  "vnd.sun.star.script:Standard.PRINT.ButtonPushEvent(par)?language=Basic&location=application"

или, где-то видел, типа такого:
.ScriptCode =  "vnd.sun.star.script:Standard.PRINT.ButtonPushEvent(par)?language=Basic&location=application&par=1"

sokol92

Схема vnd.sun.star.script не предусматривает параметры, кроме вышеуказанных.
Если у Вас есть одна процедура обработки на несколько кнопок, то Вы можете проанализировать в ней программное имя кнопки (name), надпись на кнопке (label), свойство tag кнопки и т.д.
Владимир.

economist

Еще можно макросом по клику кнопки просто считать параметр с яч. Листа Calc или Переменной Writer, где обычно "параметры" и находятся.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

#5
Вы можете передать аргументы с помощью интерфейса XScript. Для этого Вы в коде используете метод провайдера getScript. Провайдер можно получить с помощью ThisComponent.getScriptProvider("").
С уважением,
Михаил Каганский