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

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

30 Июнь 2022, 20:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как узнать размер ячейки текстовой таблицы  (Прочитано 498 раз)
0 Пользователей и 1 Гость смотрят эту тему.
proger1983
Участник
**
Offline Offline

Сообщений: 17


« Стартовое сообщение: 21 Июнь 2022, 17:11 »

Здравствуйте, форумчане. Имеется таблица в Writer'е (SwXTextTable). Как определить размеры каждой ее ячейки (SwXCell), учитывая, что таблица может содержать разбиение/объединение ячеек?
Записан
sokol92
Мастер
*****
Offline Offline

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


WWW
« Ответ #1: 21 Июнь 2022, 18:40 »

Добрый день! Не думаю, что это просто.
Какова цель такого измерения? Связано с работой с окном?

Зная имя текстовой таблицы и имя ячейки таблицы, можно через интерфейсы AccessibleContext найти окно, соответствующее ячейке и его размеры.
« Последнее редактирование: 21 Июнь 2022, 19:53 от sokol92 » Записан

Владимир.
proger1983
Участник
**
Offline Offline

Сообщений: 17


« Ответ #2: 22 Июнь 2022, 08:04 »

Добрый день! Не думаю, что это просто.
Какова цель такого измерения? Связано с работой с окном?

Зная имя текстовой таблицы и имя ячейки таблицы, можно через интерфейсы AccessibleContext найти окно, соответствующее ячейке и его размеры.

Нет, нужно изображение вставить под размер ячейки.
Записан
sokol92
Мастер
*****
Offline Offline

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


WWW
« Ответ #3: 22 Июнь 2022, 14:31 »

Можно установить изображение как фон ячейки текстовой таблицы.
При этом свойство ячейки BackGraphicLocation должно быть установлено как com.sun.star.style.GraphicLocation.AREA.

Спасибо Михаилу Каганскому за консультации.

Пример.

Код:
' Устанавивает фоновое изображение ячейки "C2" первой таблицы документа и масштабирует изображение по размеру ячейки.
' Переменная url задает путь к изображению.
Sub InsertBackGraphic
  Dim oCell, oProvider, url As String
  Dim oProps(0) as new com.sun.star.beans.PropertyValue 
 
  url="https://forumooo.ru/Themes/default/images/seageals/sggm.png"
 
  oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
  oProps(0).Name  = "URL"
  oProps(0).Value = url

  oCell=ThisComponent.TextTables(0).getCellByName("C2") 
  With oCell
    .BackGraphic=oProvider.queryGraphic(oProps())
    .BackGraphicLocation=com.sun.star.style.GraphicLocation.AREA
  End With

End Sub
« Последнее редактирование: 22 Июнь 2022, 15:20 от sokol92 » Записан

Владимир.
proger1983
Участник
**
Offline Offline

Сообщений: 17


« Ответ #4: 24 Июнь 2022, 08:17 »

Можно установить изображение как фон ячейки текстовой таблицы.
При этом свойство ячейки BackGraphicLocation должно быть установлено как com.sun.star.style.GraphicLocation.AREA.

Спасибо Михаилу Каганскому за консультации.

Пример.

Код:
' Устанавивает фоновое изображение ячейки "C2" первой таблицы документа и масштабирует изображение по размеру ячейки.
' Переменная url задает путь к изображению.
Sub InsertBackGraphic
  Dim oCell, oProvider, url As String
  Dim oProps(0) as new com.sun.star.beans.PropertyValue 
 
  url="https://forumooo.ru/Themes/default/images/seageals/sggm.png"
 
  oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
  oProps(0).Name  = "URL"
  oProps(0).Value = url

  oCell=ThisComponent.TextTables(0).getCellByName("C2") 
  With oCell
    .BackGraphic=oProvider.queryGraphic(oProps())
    .BackGraphicLocation=com.sun.star.style.GraphicLocation.AREA
  End With

End Sub

А можно ли потом у фона узнать получившийся размер? Изображение должно генерироваться под размер, а не растягиваться/сжиматься под существующую ячейку. И таких изображений может быть несколько в ячейке, главное в ширину столбца влезать.
Записан
sokol92
Мастер
*****
Offline Offline

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


WWW
« Ответ #5: 24 Июнь 2022, 17:27 »

Для определения ширины ячейки (возможно, объединенной) текстовой таблицы можно применить следующую последовательность действий.

1. Определить относительную ширину ячейки. Для этого нужно проанализировать свойство TableColumnSeparators строки текстовой таблицы, к которой относится ячейка (массив разделителей учитывает возможное обьединение ячеек).  Полученное значение относительной ширины, к примеру, 3000 будет означает, что ширина ячейки составляет 30% от ширины всей таблицы (TableColumnRelativeSum).

2. Определить ширину всей таблицы. По этому поводу см. раздел "8.9. How wide is a text table?" книги А.Питоньяка AndrewMacro.odt

3. Определить абсолютную ширину ячейки на основе п.1-2. При определении "полезной" ширины ячейки необходимо еще дополнительно учесть поля слева и справа.

Большое спасибо Михаилу Каганскому за консультации!  Улыбка


P.S. Не уверен, что в ответе на форуме нужно цитировать полностью предыдущее сообщение. Это, возможно, повышает мой индекс цитирования, но вряд ли способствует комфортному просмотру темы...  Улыбка
« Последнее редактирование: 24 Июнь 2022, 17:43 от sokol92 » Записан

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

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