有没有什么方法可以快速编辑 OpenOffice 中的颜色?
我知道可以在 中更改颜色Tools -> Colors -> OpenOffice.org -> Colors
,但我想以更即时的方式更改颜色。我正在尝试在 Impress 中创建演示文稿,并且经常需要快速测试一些非标准颜色(以微调与背景相比的字体颜色)。此时我需要转到上述对话框,更改 RGB 值,单击“更改”,单击“确定”,然后手动重新选择从字体颜色对话框中选择颜色。提交更改后,颜色不会自动刷新。
有谁知道如何动态更改颜色(字体颜色、背景颜色)和/或立即应用特定调色板颜色的更改?
答案1
可以使用宏。以下是将宏附加到新的用户定义工具栏的解决方案。工具栏中的项目可用于逐步更改字体颜色的红色、绿色和蓝色的值。
也可以通过使用
InputBox
宏来输入值,而不是逐步改变值。
安装说明如下。建议严格遵循这些说明,因为在 OpenOffice 中定义/使用宏的方式不太直观。
开始留下深刻印象. 创建一个空的演示文稿或者打开一些现有的演示文稿。
将此答案末尾的代码复制到剪贴板。创建一个宏,将红色的值增加 20:菜单工具/宏/组织宏/OpenOffice.org Basic/。然后展开到“我的宏/标准/”,以便选择“标准”。按下“新建”按钮。
右击左下角的选项卡,选择“重命名”,输入“RedUp”。单击编辑区域(将焦点设置在那里),选择全部(Ctrl+ A)并粘贴代码。将带有 的行更改
changeValue(0, 0, 0)
为changeValue(20, 0, 0)
。这是将 Red 的值增加 20。右键单击左下角的选项卡并选择:插入/BASIC 模块。
重复步骤 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)
创建新工具栏:菜单工具/自定义/选项卡工具栏/按下按钮新建/<将其命名为“颜色工具栏”>/确定
然后添加/OpenOffice.org 宏/我的宏/标准/RedUp/<选择“Main”>/添加/关闭/修改/重命名/Red Up/确定。(注意:如果没有选择“Main”,则稍后会发生脚本错误,因为默认选择了“changeValue”。)
对其他 5 个重复此操作。重新排列工具栏中项目的顺序,以便保持与上表相同的顺序。
最后按“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