|
Несмотря на то что уже после публикации этой статьи в JAWS версии 7.00 появилась поддержка Буфера обмена с накоплением текста, эта публикация остаётся полезной в качестве примера использования функций языка сценариев JAWS для работы с Буфером обмена. Буфер обмена (clipboard) в операционной системе MS Windows служит для временного хранения данных (текста, картинок, звука, видео и пр.) во время операций копирования и вставки. Это весьма удобно, поскольку позволяет копировать данные из одного приложения в другое (например, из электронной таблицы в текстовый редактор). Но вот есть одна неприятная мелочь, из-за которой приходится порой выполнять много лишней работы. Речь идёт о том, что новые данные, попадая в Буфер обмена, уничтожают информацию, находившуюся там прежде. Представьте, что необходимо из одного текстового документа скопировать десяток цитат в другой документ. Чтобы это сделать, придётся десять раз повторить следующее: выделить одну цитату, скопировать её в Буфер обмена, переключиться на другой документ, вставить текст из Буфера обмена, вернуться в прежний документ. Было бы гораздо проще, если бы удалось сначала скопировать все цитаты в Буфер обмена, а затем поместить их в нужный документ. Именно эту задачу мы и постараемся решить средствами языка сценариев JAWS. Сразу следует отметить, что разговор пойдет исключительно о текстовых данных. Для реализации многократного сохранения в Буфере обмена нетекстовых данных (графики, видео, аудио и т.п.) следует использовать специальные программы, расширяющие функциональность Буфера обмена. Начиная с JAWS версии 5.10 язык сценариев пополнился встроенной функцией Всего же в скриптах для JAWS версии 5.10 и выше можно использовать четыре функции для работы с Буфером обмена:
Дополнительную информацию об этих функциях можно почерпнуть из Справочника разработчика скриптов. Там же есть описание встроенных скриптов для работы с Буфером обмена. Из четырёх указанных функций нас интересуют две последние. С помощью них можно организовать сохранение данных в Буфере обмена с накоплением его содержимого. Алгоритм действий весьма прост: прежде чем записывать данные в Буфер обмена, необходимо взять оттуда старые данные и сохранить их в промежуточной строковой переменной, затем объединить их с новыми данными и все это поместить в Буфер обмена. На основе этого алгоритма напишем скрипт, который можно поместить либо в файл скриптов по умолчанию (default.jss), либо в файл скриптов того текстового редактора, с которым вы работаете. Приведённый ниже скрипт был проверен в JAWS версии 5.10. Необходимо, используя Диспетчер скриптов, ввести исходный код в файл скриптов и назначить комбинацию клавиш для вызова скрипта (например, Insert + Alt + C). Include "HjConst.jsh" ; Скрипт для многократного копирования данных в Буфер обмена. Script MultiClipboard() Var String sBuf1, String sBuf2 let sBuf1 = GetSelectedText () If !StringIsBlank (sBuf1) Then let sBuf2 = GetClipboardText () If !StringIsBlank (sBuf2) Then let sBuf1= sBuf2 + sBuf1 EndIf CopyToClipboard (sBuf1) Say("Добавлено в буфер", OT_MESSAGE) Else Say("Не выделен текст", OT_MESSAGE) EndIf endScript Если компиляция скрипта прошла без ошибок, то вы можете приступать к работе с ним. Теперь во время работы в текстовом редакторе можно выделить текст и нажать комбинацию клавиш, назначенную этому скрипту, после чего прозвучит сообщение "Добавлено в буфер", означающее, что текст был добавлен в Буфер обмена к уже существующим данным. Затем можно выделить другой фрагмент текста и опять добавить его в буфер. Так можно повторять несколько раз, а потом весь накопленный в Буфере обмена текст вставить в документ при помощи меню Правка -> Вставить или комбинации клавиш Control+V. Следует учитывать, что после вставки из Буфера обмена текст не пропадает и может быть вставлен несколько раз подряд. Для того чтобы очистить Буфер обмена от накопившегося в нем текста, необходимо либо обычным способом скопировать в Буфер обмена пробел (меню Правка -> Копировать или комбинация клавиш Control + C), либо добавить ещё один скрипт, удаляющий данные из Буфера обмена. Ниже приведен пример такого скрипта: Script ClearClipboard() ;Помещаем пробел в Буфер обмена. CopyToClipboard (" ") Say("Буфер очищен",OT_MESSAGE) endScript При использовании этого скрипта следует учитывать, что в процессе копирования в Буфер обмена средствами языка сценариев JAWS не сохраняется форматирование текста и иногда может нарушаться кодировка символов при работе в MS Windows XP. Кроме того, в некоторых текстовых редакторах при выделении строки целиком не выделяется символ перевода строки, поэтому при последовательном копировании нескольких строк в Буфер обмена они могут оказаться "склеившимися". |
||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети