Добавить Event Listener на кнопки

Автор reinhard, 12 октября 2012, 10:47

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

reinhard

Приветствую!

Есть большое количество xls файлов с внедренными макросами VBA и формой с кнопками, к которым VBA макросы были привязаны.
Макросы я переписал на StarBasic.
Однако менять их руками и пересохранять в ODS не очень хочется.
Нашел у Питоньяка как копировать библиотеку из макроса, вроде тут проблем не будет.
Но встал вопрос как назначать вызов макросов на нажатие кнопки из другого макроса.
Руками назначается без проблем, но хотелось бы меньше ручной работы.
Кнопки находятся элементарно, например так:

SheetsEnum = ThisComponent.Sheets.CreateEnumeration
Do While SheetsEnum.HasMoreElements()
   oSheet = SheetsEnum.nextElement
   FormsEnum = oSheet.DrawPage.Forms.CreateEnumeration
   Do While FormsEnum.HasMoreElements()
      oForm = FormsEnum.nextElement
      ElemEnum = oForm.CreateEnumeration
      Do While ElemEnum.HasMoreElements()
         oElem = ElemEnum.NextElement
         MsgBox oElem.Label, 0, oSheet.Name
      Loop
   Loop
Loop


Но вот как навесить на кнопки Event Listener  я так и не разобрался.
Вроде как надо брать текущий контроллер:

         CtlView = ThisComponent.CurrentController.GetControl(oElem)

И у него есть метод AddEventListener, как говорит MRI.
А вот как этот метод использовать, т.е. какую переменную ему подсовывать я так и не нашел.
Подскажите, pls, в каком направлении копать, если с примером кода, то вообще хорошо.

Заранее благодарен!

ALexey7ov

Насчёт макросов, которые меняют назначенные события элементов во внедрённой форме ничего не скажу, но есть свой вариант. Заключается он в следующем:

  • 1) открыть *.ods-файл через архиватор;
  • 2) найти в нём файл с именем content.xml и распаковать;
  • 3) отредактировать его текстовым редактором или тем же самым Writer с помощью макроса или в полуручном режиме. В этом xml на элемент кнопки, например, указывает тэг <form:button> и закрывающий его </form:button>. Вот как раз между ними и находятся интересующие свойства элемента, в том числе и действия при выполнении события. Внутри тэгов для свойств элемента находится параметр script:event-name="тип_события" и xlink:href="путь_к_необходимому_макросу". Ну а дальше можно через макрос текстового процессора с помощью метода createSearchDescriptor и текстовых курсоров править эти самые пути;<
  • 4) обратно запаковать исправленный content.xml в *.ods.