3

Есть ли способ быстро отредактировать цвет в OpenOffice?

Я знаю, что цвета можно изменить в Tools -> Colors -> OpenOffice.org -> Colors , но я бы хотел изменить цвета более быстрым способом. Я пытаюсь создать презентацию в Impress, и мне часто нужно быстро протестировать некоторые нестандартные цвета (для точной настройки цвета шрифта по сравнению с фоном). Сейчас мне нужно перейти в вышеупомянутое диалоговое окно, изменить значения RGB, нажать "Изменить", нажать "ОК" и вручную выбрать этот цвет в диалоговом окне "Цвет шрифта". Цвет не обновляется автоматически после принятия изменений.

Кто-нибудь знает, как изменить цвета (цвета шрифта, цвета фона) на лету и / или сделать так, чтобы изменение определенного цвета палитры применялось мгновенно?

1 ответ1

1

Это возможно с помощью макросов. Ниже приведено решение, в котором макросы присоединяются к новой пользовательской панели инструментов. Элементы на панели инструментов можно использовать для постепенного изменения значений красного, зеленого и синего цветов шрифта.

Также было бы возможно вводить значения с помощью InputBox в макросах вместо постепенного изменения значений.


Инструкция по установке следующая. Желательно строго следовать им, поскольку способ определения / работы с макросами в OpenOffice не очень интуитивен.

  1. Старт Импресс. Создайте пустую презентацию или откройте существующую презентацию.

  2. Скопируйте код в конце этого ответа в буфер обмена. Создайте макрос для увеличения значения Red на 20: меню Tools/Macros/ Organize Macros/ OpenOffice.org Basic/. Затем разверните «Мои макросы / Стандарт /», чтобы выбрать "Стандарт". Нажмите кнопку "Новый".

  3. Щелкните правой кнопкой мыши на вкладке в левом нижнем углу и выберите "Переименовать" и введите "RedUp". Нажмите в области редактирования (чтобы установить фокус), выберите все ( Ctrl + A) и вставьте в код. Измените строку с помощью changeValue(0, 0, 0) на changeValue(20, 0, 0) . Это для увеличения значения красного на 20.

    Щелкните правой кнопкой мыши вкладку в левом нижнем углу и выберите «Вставить / ОСНОВНОЙ модуль».

  4. Повторите шаг 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)
    
  5. Создать новую панель инструментов: меню Инструменты / Настройка / вкладка Панели инструментов / нажмите кнопку Создать / <назовите ее "Цветная панель инструментов"> / OK

  6. Затем добавьте / OpenOffice.org Macros/ My Macros/ Standard / RedUp / <выберите "Main"> / Add / Close / Modify / Rename / Red Up / OK. (Примечание: если "Main" не выбран, то ошибка скрипта произойдет позже, потому что "changeValue" выбрана по умолчанию.)

  7. Повторите для 5 других. Измените порядок элементов на панели инструментов, чтобы сохранить тот же порядок, что и в таблице выше.

  8. Наконец нажмите ОК, чтобы закрыть диалог.

Теперь цвет переднего плана выделенного текста можно изменить, и результат будет виден практически сразу! (выбор должен быть очищен, поскольку он инвертирует цвет.)

Если вы хотите применить текущий цвет к другому тексту, добавьте 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .