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

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

13 Октябрь 2019, 23:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: На лист Calc помещен элемент управления "Список". Как в м...  (Прочитано 3303 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 703


« Стартовое сообщение: 31 Октябрь 2016, 11:22 »

Компонент: Calc
Версия продукта: 5.x
Сборка: Версия: 5.2.2.2 ID сборки: 8f96e87c890bf8fa77463cd4b640a2312823f3ad Потоков ЦП: 4; Версия ОС: Windows 6.1; Отрисовка ИП: по умолчанию;  Локаль: ru-RU (ru_RU); Calc: group
ОС: Win7 32

На лист Calc помещен элемент управления "Список". Как в макросе получить к нему доступ? Обратится, например, к его свойствам.


--
Подпись: Alex
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 31 Октябрь 2016, 14:47 »

На лист Calc помещен элемент управления "Список". Как в макросе получить к нему доступ? Обратится, например, к его свойствам.
Код:
Sub Main
oDrawPages=ThisComponent.DrawPages(0)        'рисованная страница первого листа
oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию (Форма), но может быть другим
oListBox=oForm.getByName("Список 1")         'имя списка по умолчанию (Список 1), но может быть другим
End Sub
Записан

Alex16
Форумчанин
***
Offline Offline

Сообщений: 114


« Ответ #2: 31 Октябрь 2016, 15:51 »

Спасибо большое за ответ. Пришлось зарегистрироваться, что бы продолжить дискуссию.
Я только начал изучать этот либреофис, до этого немного писал в микрософтском екселе...

В примере выше (кстати это единственный пример, который скомпилировался без ошибок из найденных в интернете)
oListBox теперь ссылается на наш список, но если я следующей строкой пишу, например:
oListBox.Visible=False
Выходит ошибка "не найдено свойство или метод Visible" тоже самое и с методом addItems
Что же возвращает метод getByName?
Можно немного расширить пример, например, в макросе списку задать "Исходный диапазон ячеек"
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 31 Октябрь 2016, 16:24 »

Выходит ошибка "не найдено свойство или метод Visible" тоже самое и с методом addItems
Вместо Visible должно быть EnableVisible, а вместо addItemsinsertItemText:
Код:
Sub Main
oDrawPages=ThisComponent.DrawPages(0)        'рисованная страница первого листа
oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию, но может быть другим
oListBox=oForm.getByName("Список 1")         'имя списка по умолчанию, но может быть другим
oListBox.insertItemText(5,"новый")           'вставляет элемент по имени "новый" в пятую позицию
wait 3000                                    'ждёт 3 секунды
oListBox.EnableVisible=false                 'скрывает
wait 3000                                    'ждёт 3 секунды
oListBox.EnableVisible=true                  'показывает
End Sub
Записан

Alex16
Форумчанин
***
Offline Offline

Сообщений: 114


« Ответ #4: 31 Октябрь 2016, 16:38 »

Большое спасибо. Пример сработал как надо. Ну и наверное последние пару вопросов. Подскажите пожалуйста где посмотреть свойства и методы элементов управления?
В частности этого листбокса. Как он (листбокс, список) вообще правильно называется в LibreOffice Basic?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 31 Октябрь 2016, 17:10 »

Подскажите пожалуйста где посмотреть свойства и методы элементов управления?
Есть хорошее расширение MRI
Записан

Alex16
Форумчанин
***
Offline Offline

Сообщений: 114


« Ответ #6: 1 Ноябрь 2016, 10:23 »

Установил MRI... немного запутался. Но пока разбирался, наткнулся на xRay. Хорошие штуки.
Но все равно не получается некоторые вещи реализовать. Вот нужно в макросе задать исходный диапазон ячеек для списка:
Код:
Sub ButtonPr
  oDrawPages=ThisComponent.DrawPages(0)        'рисованная страница первого листа
  oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию, но может быть другим
  oListBox=oForm.getByName("Список 1")         'имя списка по умолчанию, но может быть другим
  'Пытаюсь задать так
  oListBox.ListEntrySource.CellRAnge.StartColumn = 0
  oListBox.ListEntrySource.CellRAnge.StartRow = 3
  oListBox.ListEntrySource.CellRAnge.EndColumn = 0
  oListBox.ListEntrySource.CellRAnge.EndRow = 13
  xRay oListBox ' Но все равно рентген показывает другие значения.
End Sub

Как же задать этот диапазон? Или это свойство только для чтения?
« Последнее редактирование: 1 Ноябрь 2016, 10:44 от Alex16 » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #7: 1 Ноябрь 2016, 14:20 »

... немного запутался.
Мне кажется немного запутались разработчики списка Смеющийся
Задать исходный диапазон, а за одно и связанную ячейку для списка:
Код:
Sub main
oDrawPages=ThisComponent.DrawPages(0)        'рисованная страница первого листа
oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию, но может быть другим
oListBox=oForm.getByName("Список 1")         'имя списка по умолчанию, но может быть другим
oRange=ThisComponent.Sheets(0).getCellRangeByName("A1:A25").RangeAddress  'диапазон значений для списка
oCell=ThisComponent.Sheets(0).getCellRangeByName("C2").CellAddress        'адрес связанной ячейки
Dim arg1(0) As New com.sun.star.beans.NamedValue
arg1(0).Name="CellRange"
arg1(0).Value=oRange
oListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource",arg1)
oListBox.setListEntrySource(oListSource)     'назначение диапазона списку
Dim arg2(0) As New com.sun.star.beans.NamedValue
arg2(0).Name="BoundCell"
arg2(0).Value=oCell
oVal=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellValueBinding",arg2)
oListBox.setValueBinding(oVal)                'назначение связанной ячейки списку
End Sub
Записан

Alex16
Форумчанин
***
Offline Offline

Сообщений: 114


« Ответ #8: 1 Ноябрь 2016, 15:16 »

... немного запутался.
Мне кажется немного запутались разработчики списка
Спасибо за поддержку и помощь Подмигивающий

Сам я "сделал" (нашел в инете и немного переделал) вот как:
Код:
Sub TestListBoxButtonPress
  oDrawPages=ThisComponent.DrawPages(1)        'рисованная страница первого листа
  oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию, но может быть другим
  oListBox=oForm.getByName("SpisSotrud")         'имя списка по умолчанию, но может быть другим
 
  addr = createUnoStruct("com.sun.star.table.CellRangeAddress")
  addr.StartColumn=0
  addr.StartRow=1
  addr.EndColumn=0
  addr.EndRow=ThisComponent.Sheets(0).getCellByPosition(0,0).Value-1
 
  dim initParam(0) as new com.sun.star.beans.NamedValue
  initParam(0).Name="CellRange"
  initParam(0).value = addr
  oCellRangeListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", initParam )
  oListBox.setListEntrySource(oCellRangeListSource)
  oListBox.insertItemText(0,"<(Общий)>")
  >>>oListBox.SelectedItems=1
  'xRay oListBox
End Sub

Работает. Я так понял это примерно одно и тоже. Но вот теперь не получается установить ItemIndex(или как он тут у него называется) в этом ListBox'е. На отмеченной >>> строчке ошибка "Объектная переменная не установлена"
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #9: 1 Ноябрь 2016, 15:36 »

Выбрать второй элемент:
Код:
oListBox.SelectedItems=Array(1)
Записан

Alex16
Форумчанин
***
Offline Offline

Сообщений: 114


« Ответ #10: 2 Ноябрь 2016, 10:11 »

Раз тема была про доступ к списку. Спрошу еще раз в этой теме.
Если нужен доступ к одному и тому-же объекту из разных процедур как правильно сделать?
Я сделал так:
Код:
REM  *****  BASIC  *****
    'Option Explicit
    'Public SpisSotrud as Object

Function ListBox(NameList as String) as Object
oDrawPages=ThisComponent.DrawPages(1)        'рисованная страница первого листа
oForm=oDrawPages.Forms.getByName("Форма")    'имя формы по умолчанию, но может быть другим
ListBox=oForm.getByName(NameList)     'имя списка
End Function

Sub ButtonPress
Addr = createUnoStruct("com.sun.star.table.CellRangeAddress")
Addr.Sheet=0
Addr.StartColumn=0
Addr.StartRow=2
Addr.EndColumn=0
Addr.EndRow=ThisComponent.Sheets(0).getCellByPosition(0,0).Value-1
  
Dim InitParam(0) as new com.sun.star.beans.NamedValue
InitParam(0).Name="CellRange"
InitParam(0).Value = Addr
oCellRangeListSource=ThisComponent.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", InitParam )

oSpisSotrud=ListBox("SpisSotrud")
oSpisSotrud.setListEntrySource(oCellRangeListSource)
oSpisSotrud.insertItemText(0,"<(Общий)>")
oSpisSotrud.SelectedItems=Array(0)
  'xRay oListBox
End Sub

Sub TTT
ListBox("SpisSotrud").insertItemText(0,"ТЕКСТ")
End Sub
, насколько это (не)верно?
И ещё, если включить 'Option Explicit переменные Addr и oCellRangeListSource заранее объявлять какого типа, Object?
« Последнее редактирование: 2 Ноябрь 2016, 10:19 от Alex16 » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #11: 2 Ноябрь 2016, 10:58 »

Если нужен доступ к одному и тому-же объекту из разных процедур как правильно сделать?
Можно и так, если результат подходит.
Записан

rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 783


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #12: 2 Ноябрь 2016, 11:05 »

И ещё, если включить 'Option Explicit переменные Addr и oCellRangeListSource заранее объявлять какого типа, Object?
Если не знаете какой нужен тип, можно не указывать его, по умолчанию будет Variant (я типы Object и Variant не указываю), но для других типов очень желательно указывать.
Записан

Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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