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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: BASIC: Как удалить элементы управления с листа? [Решено]  (Прочитано 1554 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Форумчанин
***
Offline Offline

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



« Стартовое сообщение: 15 Март 2020, 23:05 »

Я просто изучаю Calc (попутно).
Знатоки, это, конечно, не большая проблема: сперва хотел удалить кнопки на скопированном листе (там нужны только данные, а лист-источник содержит элементы управления на листе)... но не вышло.
Пришлось скрыть. В режиме разработки они отображаются. Вопрос чисто учебный.

Кто подскажет: почему не удаляются кнопки? Связь с макросом, однако, обрывается (вне зависимости от включенного режима).

<Фрагмент кода>

   Dim e
   ' Скрываем элементы управления на скопированном листе (который новый).
REM   Xray oNewSheet.DrawPage.Forms(0)

   With oNewSheet.DrawPage.Forms(0)
'      Call SwitchControlDesignMode(True)  'включает режим разработки
'      For Each e In .ElementNames()
'         .getByName(e).EnableVisible = False  'gets button by name & hides it
'         .removeByName(e)  'увы, удаляет только связь с макросом, а кнопка остаётся (SwitchControlDesignMode?)
'      Next
'      Call SwitchControlDesignMode(False)

      For Each e In .ControlModels()
         e.EnableVisible = False  'hides button
      Next
   End With



Sub SwitchControlDesignMode(Optional vState)
   Dim document   as object
   Dim dispatcher as object

   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   Dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "SwitchControlDesignMode"
   args1(0).Value = IIf(IsMissing(vState), Not args1(0).Value, CBool(vState))

   dispatcher.executeDispatch(document, ".uno:SwitchControlDesignMode", "", 0, args1())
End Sub
« Последнее редактирование: 19 Март 2020, 12:01 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
Rafik
Форумчанин
***
Offline Offline

Сообщений: 107


« Ответ #1: 16 Март 2020, 07:20 »

У меня на 5 версии LO кнопки удаляет такой цикл.
' Удаляем кнопки из нового документа
For jj = 0 To oSheet.DrawPage.Count - 1 ' получаем кол-во кнопок   
   oSheet.DrawPage(jj).Control.dispose ' Удаляем кнопку
Next
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #2: 16 Март 2020, 16:13 »

Какая-то путанная закольцованная модель…
Rafik, ваш метод <control.dispose> объекта Shape что-то таки делает: кнопки становятся невидимыми, но их по-прежнему можно (не с первой попытки) выделить, затем открыть окно свойств... Однако странный выбор термина для удаления (обычно: remove, delete, drop)
« Последнее редактирование: 16 Март 2020, 16:15 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
Bigor
Мастер
*****
Offline Offline

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


« Ответ #3: 16 Март 2020, 16:48 »

Вот здесь, было что-то про удаление кнопок
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #4: 16 Март 2020, 23:17 »

Вроде, удаляет. Тему считаем прикрытой... на время.
Вот здесь, было что-то про удаление кнопок
Спасибо. Подглядел у mikekaganski.
<Фрагмент>

   Dim i%, oShape
REM   Xray oSheet.DrawPage

   For i = oSheet.DrawPage.Count - 1 To 0 Step -1
      oShape = oSheet.DrawPage.getByIndex(i)
      If oShape.supportsService("com.sun.star.drawing.ControlShape") Then
REM         oShape.Control.dispose()
         oSheet.DrawPage.remove(oShape)
      End if
   Next


' Проверим свойство DrawPage.Count - как и было до удаления. Однако, если сохранить, закрыть и заново открыть файл, то счетчик обновляется (0).

Sub TestDrawPage()
   Xray ThisComponent.CurrentController.ActiveSheet.DrawPage
End Sub

Во всяком случае, есть какая-то логика теперь: удаляет именно кнопки, не трогая чего-то ещё (стрелки и пр.), с более-менее понятным синтаксисом.
« Последнее редактирование: 16 Март 2020, 23:26 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.2.0.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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