Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2016, 15:23   #1
Ecosasha
Форумчанин
 
Регистрация: 22.05.2009
Сообщений: 248
По умолчанию OpenOffice Writer Жирный ли текст, где находится курсор?

Вроде как раздела на форуме по OpenOffice нет, поэтому здесь.

Есть примеры, где описывается, где по всему тексту можно искать жирный ли текст, но не могу понять, как где расположен курсор записать в переменную жирный или не жирный текст там при вызове макроса.

Кто-нибудь может подсказать в какую сторону копать?
Ecosasha вне форума Ответить с цитированием
Старый 15.09.2016, 15:26   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что за примеры?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.09.2016, 15:36   #3
Ecosasha
Форумчанин
 
Регистрация: 22.05.2009
Сообщений: 248
По умолчанию

Например, такой пример из книги Эндрю Питоньяк OpenOffice.org
Macros Explained
Код:
Листинг 275. ReplaceFormatting может быть найдена в модуле Writer в файле исходных
текстов этой главы SC13.sxw. 
Sub ReplaceFormatting
REM Исходный код : Alex Savitsky
REM Изменен : Laurent Godard
REM Изменен : Andrew Pitonyak
- 338-
Поиск и замена
REM Цель этого макроса состоит в том, чтобы окружить все ЖИРНЫЕ элементы 
REM {{ }} и изменить признак Жирный на ОБЫЧНЫЙ с использованием регулярных
REM выражений.
Dim oReplace
Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue
Dim ReplAttributes(0) as new com.sun.star.beans.PropertyValue
oReplace= ThisComponent.createReplaceDescriptor()
oReplace.SearchString= ".*"  'Регулярное выражение. Соответствует
'любому тексту
oReplace.ReplaceString= "{{ & }}"  'Заметьте & помещает найденный текст
'назад
oReplace.SearchRegularExpression=True  'Использовать регулярные выражения
oReplace.searchStyles=True  'Мы хотим искать стили
oReplace.searchAll=True  'Выполнить на всем документе
REM Атрибуты поиска
SrchAttributes(0).Name= "CharWeight"
SrchAttributes(0).Value= com.sun.star.awt.FontWeight.BOLD
REM Атрибуты для замены
ReplAttributes(0).Name= "CharWeight"
ReplAttributes(0).Value= com.sun.star.awt.FontWeight.NORMAL
REM Установим атрибуты в описателе замены
oReplace.SetSearchAttributes(SrchAttributes())
oReplace.SetReplaceAttributes(ReplAttributes())
REM Теперь сделаем работу!
ThisComponent.replaceAll(oReplace)
End Sub
Есть также другие, где проход по всему тексту есть, с учетом структуры документы, там параграфы и так далее, но суть задачи у меня другая. Просто привел к вышесказанному вопросу.
Ecosasha вне форума Ответить с цитированием
Старый 15.09.2016, 16:38   #4
Ecosasha
Форумчанин
 
Регистрация: 22.05.2009
Сообщений: 248
По умолчанию

Например, в MS Word задача решается просто:


Код:
If Selection.Font.Bold = True Then
' Selection.TypeText ("YesBold")
End If
А как то же самое в OpenOffice?
Ecosasha вне форума Ответить с цитированием
Старый 15.09.2016, 17:16   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Немного погуглил, так вроде бы работает (по крайней мере в простых случаях, и в LibreOffice, в OpenOffice не проверял):

Код:
oCurSelection = thisComponent.getCurrentSelection()
if oCurSelection.supportsService("com.sun.star.text.TextRanges") then
   nCount = oCurSelection.Count
   if nCount >= 1 then
      oTextRange = oCurSelection.getByIndex(0)
      if oTextRange.CharWeight = com.sun.star.awt.FontWeight.BOLD then
            MsgBox("Bold")
      end if
   end if
end if
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.09.2016, 18:54   #6
Ecosasha
Форумчанин
 
Регистрация: 22.05.2009
Сообщений: 248
По умолчанию

Да, вроде бы работает нормально. Как понял, сначала текущее выделение (Current selection) находим, потом присваиваем это Range области и после этого уже делаем сравнение.
Да, на сайте у них есть такой код про нахождение текущего выделения, но что-то не додумался.
https://wiki.openoffice.org/wiki/Current_selection
Ecosasha вне форума Ответить с цитированием
Старый 15.09.2016, 20:44   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Ecosasha, на соседнем форуме по ООо Вам все подскажут оперативно
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 15.09.2016, 21:30   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Ecosasha, на соседнем форуме по ООо Вам все подскажут оперативно
ага, 27 гостей и 1 пользователь онлайн подскажут.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.09.2016, 08:28   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

2-3 завсегдатаи там решают ~80% вопросов.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
textarea и вставка текста где находится курсор SevenXP JavaScript, Ajax 1 29.09.2012 21:11
как узнать номер ячейки в таблице Ворда, где находится курсор? Ципихович Эндрю Microsoft Office Word 22 07.04.2012 13:00
Вопрос по OpenOffice Writer remlin100 Общие вопросы Delphi 1 16.03.2011 11:51
Взаимодействие С# с OpenOffice Writer Game1024 Общие вопросы .NET 0 14.01.2010 04:34
OpenOffice writer table in C# kven Общие вопросы .NET 2 28.07.2009 23:12