кодировку символов. Символьные константы для
Функция действует подобно Clipper-команде KEYBOARD, но использует иную
кодировку символов. Символьные константы для используемой кодировки
определены в поставляемом с CT II файле описаний NT2SCAN.CH и включены
в "Введение в Clipper Tools II/5.0": Приложение Б.
Использование функцией KEYSEND() скан-кодов клавиш позволяет помещать
в буфер те коды, которые недопустимы для Clipper-команды KEYBOARD
(меньше 0 и больше 255), например, коды всех функциональных клавиш и
большинства <Alt>-комбинаций. То же самое относится к различным, но
имеющим один INKEY-код клавишам. Поэтому при необходимости эмулировать
нажатие функциональных или управляющих клавиш лучше вместо команды
KEYBOARD использовать четко их различающую функцию KEYSEND().
Как при выполнении Clipper-команды KEYBOARD, так и при вызове
KEYSEND(), содержимое буфера клавиатуры стирается перед записью новых
символов. Однако, если функция вызвана со значением .T. параметра
<lAdditiveMode>, новые коды добавляются к текущему содержимому буфера.
Примечания
. Таблица кодов клавиш в CT II расширена, однако прежние коды
также действительны (см. файл описаний NT2SCAN.CH).
. Максимальная длина строки для записи в буфер клавиатуры
вычисляется по формуле:
максимальная выделяемая память / 2
Коды клавиш, записываемые командой KEYBOARD в Clipper-буфер
клавиатуры, не распознаются функцией KEYREAD(). Для решения
проблемы может быть предложено использование в программе
директивы препроцессора:
#command KEYBOARD(<c>) => KEYSEND(EXPAND(<c>), .F., .T.)
. Вызов функции EXPAND() позволяет преобразовать строку
однобайтовых INKEY-кодов клавиш в строку двухбайтовых
последовательностей. Значение .T. третьего параметра указывает
функции KEYSEND() игнорировать ненулевые значения скан-кода
эмулируемой клавиши.