如何在 OpenOffice 3.1 中快速访问颜色编辑?

如何在 OpenOffice 3.1 中快速访问颜色编辑?

有没有什么方法可以快速编辑 OpenOffice 中的颜色?

我知道可以在 中更改颜色Tools -> Colors -> OpenOffice.org -> Colors,但我想以更即时的方式更改颜色。我正在尝试在 Impress 中创建演示文稿,并且经常需要快速测试一些非标准颜色(以微调与背景相比的字体颜色)。此时我需要转到上述对话框,更改 RGB 值,单击“更改”,单击“确定”,然后手动重新选择从字体颜色对话框中选择颜色。提交更改后,颜色不会自动刷新。

有谁知道如何动态更改颜色(字体颜色、背景颜色)和/或立即应用特定调色板颜色的更改?

答案1

可以使用宏。以下是将宏附加到新的用户定义工具栏的解决方案。工具栏中的项目可用于逐步更改字体颜色的红色、绿色和蓝色的值。

也可以通过使用 InputBox宏来输入值,而不是逐步改变值。


安装说明如下。建议严格遵循这些说明,因为在 OpenOffice 中定义/使用宏的方式不太直观。

  1. 开始留下深刻印象. 创建一个空的演示文稿或者打开一些现有的演示文稿。

  2. 将此答案末尾的代码复制到剪贴板。创建一个宏,将红色的值增加 20:菜单工具/宏/组织宏/OpenOffice.org Basic/。然后展开到“我的宏/标准/”,以便选择“标准”。按下“新建”按钮。

  3. 右击左下角的选项卡,选择“重命名”,输入“RedUp”。单击编辑区域(将焦点设置在那里),选择全部(Ctrl+ A)并粘贴代码。将带有 的行更改changeValue(0, 0, 0)changeValue(20, 0, 0)。这是将 Red 的值增加 20。

    右键单击左下角的选项卡并选择:插入/BASIC 模块。

  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. 创建新工具栏:菜单工具/自定义/选项卡工具栏/按下按钮新建/<将其命名为“颜色工具栏”>/确定

  6. 然后添加/OpenOffice.org 宏/我的宏/标准/RedUp/<选择“Main”>/添加/关闭/修改/重命名/Red Up/确定。(注意:如果没有选择“Main”,则稍后会发生脚本错误,因为默认选择了“changeValue”。)

  7. 对其他 5 个重复此操作。重新排列工具栏中项目的顺序,以便保持与上表相同的顺序。

  8. 最后按“OK”关闭对话框。

现在可以更改所选文本的前景色,并且几乎可以立即看到结果!(必须清除选择,因为它会反转颜色。)

如果要将当前颜色应用于其他文本,则在工具栏中添加第 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

相关内容