2015-02-16 11 views

ответ

2

Как вы хотите преобразование «на лету», вы можете либо изменить 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 
] 
+0

Замена должна быть выполнена во время ввода. Я хочу понять, как R3Gui (или VID) обрабатывает ввод и отображение символов. – noein

+0

Я добавил несколько способов получить преобразование «на лету» – sqlab

+0

Код для R3 идеален (вы считаете, что вставка строки вместо символа намного сложнее?). – noein

2

После чтения некоторых файлов 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 
     ] 
    ] 
] 

Область представляет собой соединение стилей. Он состоит из текстового поля и скроллера . Они содержатся в лицах/именах.

 Смежные вопросы

  • Нет связанных вопросов^_^