一个简单的例子:
如果我输入#" w"在风格"区域"我如何获得#" z"? (例如," qwerty ww" - >" qzerty zz")
答案 0 :(得分:2)
如果您想要即时转换,您可以在加载前修改R3-GUI。因此,将r3-gui.r3加载到本地目录。然后你添加行,如果键==#" w" [键:#" z"] 到函数 do-text-key ,所以它看起来像
do-text-key: funct [
"Process text face keyboard events."
face [object!]
event [event! object!]
key
] [
text-key-map/face: face
text-key-map/shift?: find event/flags 'shift
if no-edit: not tag-face? face 'edit [
key: any [select/skip text-key-map/no-edit key 2 key]
]
either char? key [
if key == #"w" [key: #"z"]
text-key-map/key: key
switch/default key bind text-key-map/chars 'event [
unless no-edit [
insert-text-face face key
]
]
] [
if find event/flags 'control [
key: any [select text-key-map/control key key]
]
text-key-map/key: key
switch/default key text-key-map/words [return event]
]
none
]
可能官方的方式是使用 on-key 和Rebol3
load-gui
view [
a: area on-key [ ; arg: event
if arg/type = 'key [
if arg/key == #"w" [arg/key: #"z"]
]
do-actor/style face 'on-key arg face/style
]
]
最后一种方法是使用Rebol2动态执行此操作
key-event: func [face event] [
if event/type = 'key [
if all [event/key = #"w" ] [
append a/text #"z"
focus a
view w
return false
]
]
event
]
insert-event-func :key-event
view w: layout [
a: area
]
答案 1 :(得分:2)
在阅读r3-gui(text-caret.r3,text-cursor.r3,text-edit.r3,text-keys.r3,text.r3)和editor的一些文件后,我找到了一个解决方案,它不仅可以插入字符,还可以插入字符串:
do %r3-gui.r3
insertText-moveCursor-updateFace: func [
face
string
n-move
][
insert-text-face face string
move-cursor face 'left n-move false
update-text-caret face
see-caret face
show-later face
]
i-m-u: :insertText-moveCursor-updateFace
view [
area on-key [
either arg/type = 'key [
switch/default arg/key [
#"w" [i-m-u face/names/text-box "z" 0]
#"[" [i-m-u face/names/text-box "[]" 1]
#"$" [i-m-u face/names/text-box "func [] []" 4]
] [
;switch/default
do-actor/style face 'on-key arg face/style
]
] [
;arg/type != 'key
do-actor/style face 'on-key arg face/style
]
]
]
区域是复合样式。它由文本框和滚动条组成。它们包含在 face / names 。
中