Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

4 Март 2021, 19:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Добавить Event Listener на кнопки  (Прочитано 4139 раз)
0 Пользователей и 1 Гость смотрят эту тему.
reinhard
Новичок
*
Offline Offline

Сообщений: 1


« Стартовое сообщение: 12 Октябрь 2012, 09:47 »

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

Есть большое количество 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
Участник
**
Offline Offline

Пол: Мужской
Расположение: г.Мелеуз
Сообщений: 17



WWW
« Ответ #1: 18 Октябрь 2012, 13:40 »

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!