Attribute VB_Name = "Module1" DefInt A-Z Sub ChangeKeyAscii(KeyAscii, Filter$) '******************************************* ' Замена введенного кода клавиши ' KeyAscii — введенный код клавиши (при входе) ' — новый код (при выходе) ' Filter$ — строковая переменная, определяющая ' режим перекодировки и формируемая ' (и используемая) по такому правилу: ' ' LEN(Filter$) = ' 1) = 0 — без перекодировки ' 2) >= 1 — в этом случае первый символ строки ВСЕГДА ' определяет режим ввода "двойных кавычек" (код 34) ' Chr34 = ASC(LEFT$(Filter$,1)) ' = 42 (символ *) — блокировка ввода кавычек ' <> 42 — разрешен ввод кавычек ' Далее возможны такие варианты: ' 2а) = 2 - стандартный вариант преобразования ' Filter$ = CHR$(Chr34%) + CHR$(RusLat*&H10+UpLow), ' где RusLat = 0 — блокировка ввода латинских букв ' = 1 - блокировка ввода русских букв ' = Else — без преобразования ' UpLow = 0 - маленькие —> большие ' = 1 — большие —> маленькие ' = Else — ничего не делаем ' 2б) > 2 - задан список символов: ' MID$(Filter$,3) — список символов ' KodFilter =ASC(MID$(Filter$,2)) ' = 32 — допустимых символов ' <> 32 — недопустимых ' ================================ ' ' определение режима перекодировки LenFilter = Len(Filter$) If LenFilter = 0 Or KeyAscii < 32 Then Exit Sub ' без преобразования ' If KeyAscii = 34 And Asc(Filter$) = 42 Then ' блокировка ввода кавычки KeyAscii = 0: Exit Sub End If ' If LenFilter > 1 Then CodeFilter = Asc(Mid$(Filter$, 2)) If LenFilter = 2 Then ' стандартный вариант 2а) Symbol = -1 ' определение типа символа: 0 - латинский, ' 1 - русский If (KeyAscii >= 65 And KeyAscii <= 90) Then Symbol = 0 If (KeyAscii >= 97 And KeyAscii <= 122) Then Symbol = 0 If KeyAscii >= 192 Then Symbol = 1 ' блокировка ввода If Symbol = (CodeFilter And &HF) Then KeyAscii = 0 If Symbol >= 0 And KeyAscii > 0 Then UpLow = (CodeFilter And &HF0) \ &H10 ' преобразование: большие <-> маленькие ' можно воспользоваться операторами Lcase/Ucase Select Case UpLow Case 0 ' маленькие -> большие KeyAscii = KeyAscii And &HDF Case 1 ' большие -> маленькие KeyAscii = KeyAscii Or &H20 End Select End If Else ' задан список допустимых/недопустимых символов If KeyAscii <> 34 Then CodeFilter = Sgn(CodeFilter - 32) If (Sgn(InStr(3, Filter$, Chr$(KeyAscii))) _ Xor CodeFilter) = 0 Then KeyAscii = 0 End If End If End If End Sub