Это возможно с помощью макросов. Ниже приведено решение, в котором макросы присоединяются к новой пользовательской панели инструментов. Элементы на панели инструментов можно использовать для постепенного изменения значений красного, зеленого и синего цветов шрифта.
Также было бы возможно вводить значения с помощью InputBox
в макросах вместо постепенного изменения значений.
Инструкция по установке следующая. Желательно строго следовать им, поскольку способ определения / работы с макросами в OpenOffice не очень интуитивен.
Старт Импресс. Создайте пустую презентацию или откройте существующую презентацию.
Скопируйте код в конце этого ответа в буфер обмена.
Создайте макрос для увеличения значения Red на 20: меню Tools/Macros/ Organize Macros/ OpenOffice.org Basic/.
Затем разверните «Мои макросы / Стандарт /», чтобы выбрать "Стандарт".
Нажмите кнопку "Новый".
Щелкните правой кнопкой мыши на вкладке в левом нижнем углу и выберите "Переименовать" и введите "RedUp".
Нажмите в области редактирования (чтобы установить фокус), выберите все ( Ctrl + A) и вставьте в код.
Измените строку с помощью changeValue(0, 0, 0)
на changeValue(20, 0, 0)
. Это для увеличения значения красного на 20.
Щелкните правой кнопкой мыши вкладку в левом нижнем углу и выберите «Вставить / ОСНОВНОЙ модуль».
Повторите шаг 3 пять раз, чтобы всего было 6 модулей:
Module name changeValue line
----------------------------------------------
RedUp changeValue( 20, 0, 0)
RedDown changeValue( -20, 0, 0)
GreenUp changeValue( 0, 20, 0)
GreenDown changeValue( 0, -20, 0)
BlueUp changeValue( 0, 0, 20)
BlueDown changeValue( 0, 0, -20)
Создать новую панель инструментов: меню Инструменты / Настройка / вкладка Панели инструментов / нажмите кнопку Создать / <назовите ее "Цветная панель инструментов"> / OK
Затем добавьте / OpenOffice.org Macros/ My Macros/ Standard / RedUp / <выберите "Main"> / Add / Close / Modify / Rename / Red Up / OK. (Примечание: если "Main" не выбран, то ошибка скрипта произойдет позже, потому что "changeValue" выбрана по умолчанию.)
Повторите для 5 других. Измените порядок элементов на панели инструментов, чтобы сохранить тот же порядок, что и в таблице выше.
Наконец нажмите ОК, чтобы закрыть диалог.
Теперь цвет переднего плана выделенного текста можно изменить, и результат будет виден практически сразу! (выбор должен быть очищен, поскольку он инвертирует цвет.)
Если вы хотите применить текущий цвет к другому тексту, добавьте 7-й элемент на панель инструментов, где строка changeValue : changeValue(0, 0, 0)
. Или нажмите «Вверх» и «Вниз», чтобы выбрать цвет (который не слишком близок к 0 или 255.)
Текущий цвет также запоминается при перезапуске программы, поскольку значение RGB сохраняется в файле настроек. Пример пути к файлу настроек:
C:\Documents and Settings\peterm\Application Data\OpenOffice.org\3\user\prefs\settings.ini
Если что-то пойдет не так, то settings.ini
можно просто удалить. Он будет воссоздан при следующем использовании этой функции.
Я протестировал его с OpenOffice 3.2.0, en-GB, но я ожидаю, что он будет работать с OpenOffice 3.1.
Код (строка с changeValue (0, 0, 0) должна быть изменена):
REM ***** OOoBasic. <http://en.wikipedia.org/wiki/StarOffice_Basic> *****
Global RedDecimal as Long
Global BlueDecimal as Long
Global GreenDecimal as Long
Sub Main
rem Default values if settings have not been stored yet.
RedDecimal = 210
GreenDecimal = 100
BlueDecimal = 40
changeValue(0, 0, 0)
End Sub
sub changeValue(aRedChange, aGreenChange, aBlueChange)
ReadSettings
RedDecimal = newChannelValue(RedDecimal, aRedChange)
GreenDecimal = newChannelValue(GreenDecimal, aGreenChange)
BlueDecimal = newChannelValue(BlueDecimal, aBlueChange)
WriteSettings
dim document as object
document = ThisComponent.CurrentController.Frame
dim dispatcher as object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem Set font (foreground) colour. Note that lines for background colour
rem are outcommented - it does not work in Impress, but it does work
rem in Calc.
dim args3(0) as new com.sun.star.beans.PropertyValue
rem args3(0).Name = "BackgroundColor"
args3(0).Name = "Color"
args3(0).Value = RedDecimal * 256 * 256 + GreenDecimal * 256 + BlueDecimal
rem dispatcher.executeDispatch(document, ".uno:BackgroundColor", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Color", "", 0, args3())
End Sub
rem *************************************************************************
Function newChannelValue(aStartValue as Long, aChange as Long) as Long
Dim toReturn as Long
toReturn = aStartValue + aChange
If toReturn > 255 Then
toReturn = 255
End If
If toReturn < 0 Then
toReturn = 0
End If
newChannelValue = toReturn
End Function
rem *************************************************************************
Sub WriteSettings
SubstService = CreateUnoService("com.sun.star.util.PathSubstitution")
UserPath = SubstService.substituteVariables("$(user)", true)
PrefFile = UserPath + "/prefs/settings.ini"
f1 = FreeFile()
Open PrefFile for output as #f1
Print #f1, RedDecimal
Print #f1, GreenDecimal
Print #f1, BlueDecimal
Close #f1
End Sub
rem *************************************************************************
Sub ReadSettings
SubstService = CreateUnoService("com.sun.star.util.PathSubstitution")
UserPath = SubstService.substituteVariables("$(user)", true)
PrefFile = UserPath + "/prefs/settings.ini"
If FileExists(PrefFile) Then
f1 = FreeFile()
Open PrefFile for Input as #f1
dim redStr as String
dim greenStr as String
dim blueStr as String
Line Input #f1, redStr
Line Input #f1, greenStr
Line Input #f1, blueStr
Close #f1
RedDecimal = CInt(redStr)
GreenDecimal = CInt(greenStr)
BlueDecimal = CInt(blueStr)
Else
WriteSettings
End If
End Sub