Раскладка клавиатуры.

Чем хорош и чем плох MS Word 97, рассуждать можно долго и с переменным успехом. Хотя лично я, конечно, убежден, что он весьма удобен. И для текстового редактора возможностей у Word просто навалом. Но, как говорится, "сколько волка не корми... " (продолжение вы знаете). Так и с пользователем: вроде уж столько всяких прибамбасов, а вот чего-то не хватает.

(c) Компьютерная газета

К чему я завел этот разговор? — спросите Вы. А все к тому, что в силу специфики места нашего с вами проживания даже в Word нам требуются дополнительные функции.
Для начала ответьте себе на вопрос: много ли Вы знаете людей, работающих в MS Word (не важно, какой версии)? Что, почти все, кто имеет доступ к компьютеру? А кто из них не сталкивался с проблемой, когда быстренько, вслепую (глядя только на клавиатуру), набираешь несколько предложений, поднимаешь глаза на экран и... что такое — на экране надпись типа "Ljrkfl j ghjltkfyyjq hf,jnt" вместо "Доклад о проделанной работе"? Тут вы хватаетесь за голову и понимаете, что всего-то забыли переключить язык. Далее Вы со вздохом нажимаете проклятый "Ctrl + Shift" (или как там у вас настроено переключение раскладки) и начинаете все с начала.
Конечно, "любимая-всеми-компания" не позаботилась об этой проблеме, ведь им-то раскладку не нужно переключать.
Но не все так плохо, как кажется. Ведь, слава богу, в MS Word есть встроенный язык Visual Basic, на котором можно писать чудесные макросы. Так в чем же дело, хватит тупо набирать то, что уже набрано! Пусть компьютер работает, а человек — думает! И так как я сам часто сталкивался с описанной выше проблемой, в конце концов мне это надоело и я такой макрос написал. А поскольку всем известно, что "Ленин завещал делиться", делюсь с вами своим макросом.
Для начала выбираем в меню Сервис\Макрос\Редактор Visual Basic (или просто нажимаем Alt+F11). На экране появится окно с редактором Visual Basic. Слева видим окно "Проект" с древовидной структурой. Выбираем в этом окне строку "Normal" (обычно находится в самом верху). Теперь выбираем Вставка\Модуль. Появляется окно модуля, в котором пока ничего нет. Здесь мы и будем писать наш макрос.
Итак набираем (не забывая переключать в нужный момент раскладку клавиатуры:-)):

Sub Кириллица()

'Определяем переменные

Dim UpAlphEng$
Dim UpAlphRus$
Dim DwnAlphEng$
Dim DwnAlphRus$
Dim AlphSC$
Dim StartZam
Dim EndZam
Dim StrZam$
Dim StrRez$
Dim Flag$
Dim i
Dim TecChar$
Dim NumTecCharUp
Dim NumTecCharDwn
Dim NumTecCharSC

'Присваиваем переменным значения для распознавания символов

UpAlphEng$ = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,."
UpAlphRus$ = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
DwnAlphEng$ = "qwertyuiop[]asdfghjkl;'zxcvbnm,."
DwnAlphRus$ = "йцукенгшщзхъфывапролджэячсмитьбю"

' Учитываем дополнительные символы

AlphSC$ = "<>{}:'"
ReDim NumSC__(6)
NumSC__(1) = 31
NumSC__(2) = 32
NumSC__(3) = 11
NumSC__(4) = 12
NumSC__(5) = 22
NumSC__(6) = 23

'Проверяем выделение, и если фрагмент текста не выделен, сообщаем об этом
'и заканчивам выполнение макроса.

StartZam = WordBasic.GetSelStartPos()
EndZam = WordBasic.GetSelEndPos()
If StartZam = EndZam Then
WordBasic.MsgBox "Выделение не определено.", "Ошибка"
Exit Sub
Else

'Далее идет кусок макроса, строящий новый текст

StrZam$ = WordBasic.[Selection$]()
End If
StrRez$ = ""
Flag$ = "Up"
For i = 1 To Len(StrZam$)
TecChar$ = Mid(StrZam$, i, 1)
NumTecCharUp = InStr(UpAlphEng$, TecChar$)
NumTecCharDwn = InStr(DwnAlphEng$, TecChar$)
NumTecCharSC = InStr(AlphSC$, TecChar$)
If NumTecCharSC <> 0 Then
NumTecCharUp = NumSC__(NumTecCharSC)
NumTecCharDwn = NumSC__(NumTecCharSC)
End If
If NumTecCharUp + NumTecCharDwn <> 0 Then
If NumTecCharUp = 0 Then
Flag$ = "Down"
ElseIf NumTecCharDwn = 0 Then
Flag$ = "Up"
End If

If Flag$ = "Up" Then
StrRez$ = StrRez$ + Mid(UpAlphRus$, NumTecCharUp, 1)
ElseIf Flag$ = "Down" Then
StrRez$ = StrRez$ + Mid(DwnAlphRus$, NumTecCharDwn, 1)
End If

ElseIf i <> Len(StrZam$) Or Asc(TecChar$) <> 13 Then
StrRez$ = StrRez$ + TecChar$
End If
Next i

'Для того чтобы Word не подчеркивал наши перекодированные слова,
' делаем текущим языком — Русский

Selection.LanguageID = wdRussian

'И теперь вставляем в текст наш перекодированный кусок.

WordBasic.Insert StrRez$
End Sub

Ну вот макрос написан. Кавычкой (') помечаются комментарии, которые, как Вы понимаете, набирать совсем не обязательно. Закрываем окно Visual Basic обычным образом.
Теперь дело за малым, требуется только привести работу с макросом в божеский вид. Для этого выбираем в меню Сервис\Настройка — появится окно "Настройка". Кликаем мышкой по кнопке "Создать...". В появившемся окошке пишем название новой панели (например, "Servises") и жмем "Ok". На экране появляется ма-а-аленьная панелька. Перетаскиваем ее вверх к остальным панелям инструментов и размещаем так, как нам удобно. Переходим на вкладку "Команды" и в списке "Категории" выбираем "Макросы". Если Вы все сделали правильно, то справа, в списке "Команды", появится надпись типа "Normal.Модуль1.Кириллица" (рис.1).
Хватаем эту надпись мышкой и перетягиваем в нашу, до сих пор пустую, панель. Теперь в нашей панели появилась кнопка с надписью "Normal.Модуль1.Кириллица". Далее щелкаем правой клавишей мышки по нашей новой кнопке и в появившемся меню в подменю "Выбрать значок для кнопки" выбираем понравившуюся нам пиктограмму. В том же выпадающем меню выбираем пункт "Основной стиль" — в нашей панельке остается только пиктограмма (в общем-то, тут Вы вольны выбрать стиль, который Вам больше нравится). Если подложенные варианты пиктограмм Вас не устраивают, то все в том же контекстном меню, выпадающем по нажатию правой кнопки мыши, выбирайте пункт "Изменить значок на кнопке" и рисуйте себе любую пиктограммку.
Теперь закрываем окно "Настройка" — и все готово к применению.
Для проверки набираем фразу "Проверка макроса", переключившись на английскую раскладку клавиатуры. Видим на экране "Ghjdthrf vfrhjcf". Теперь выделяем этот текст и нажимаем нашу новую кнопочку. Фантастика! Все чудно перевелось!
Пользуйтесь на удовольствие!
Когда я готовил эту статью, мне, как минимум раз пятнадцать, пришлось прибегать к помощи этого макроса.
Напоследок вынужден слегка омрачить радужную картину, описанную выше. Дело в том, что некоторые символы типа "точки" (.) перекодируются не совсем корректно. Это происходит по той причине, что на клавиатуре "точка" в английской раскладке соответствует букве "ю" в русской раскладке. Если кто-то предложит разрешение этой проблемы, буду рад об этом узнать.
Кстати, немного переписав этот макрос, можно адаптировать его и к обратной процедуре перекодировки с русской раскладки в английскую, если это Вам нужно.

Сергей Нематов


Компьютерная газета. Статья была опубликована в номере 47 за 1999 год в рубрике разное :: страна советов

©1997-2024 Компьютерная газета