Простой пример:Текст и каретка в VID или R3-Гуй
Если я типа # «ж» в стиле «области», как я получаю # «г»? (например, «qwerty ww» -> «qzerty zz»)
Простой пример:Текст и каретка в VID или R3-Гуй
Если я типа # «ж» в стиле «области», как я получаю # «г»? (например, «qwerty ww» -> «qzerty zz»)
Как вы хотите преобразование «на лету», вы можете либо изменить R3-GUI перед загрузкой. Поэтому загрузите r3-gui.r3 в свой локальный каталог. Затем добавьте строку если ключ == # «ж» [ключ: # «г»] функции сделать текстовый ключ, поэтому он выглядит как
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
]
Вероятно официальным способом будет чтобы использовать на ключ Жека 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
]
После чтения некоторых файлов r3-gui (text-caret.r3, text-cursor.r3, text-edit.r3, text-keyss.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
]
]
]
Область представляет собой соединение стилей. Он состоит из текстового поля и скроллера . Они содержатся в лицах/именах.
Замена должна быть выполнена во время ввода. Я хочу понять, как R3Gui (или VID) обрабатывает ввод и отображение символов. – noein
Я добавил несколько способов получить преобразование «на лету» – sqlab
Код для R3 идеален (вы считаете, что вставка строки вместо символа намного сложнее?). – noein