|
|
|
| Народ привет.
В общем я одолел всю хрень со штрихкодами. Да и не мучился особо. Правда для этого скачал TBar в котором уже все стартовые и финишные символы с контрольными суммами формируются. Не важно. В отчете формируется штрихкод, выводит на этикетку, распознает штрихкод. В общем все ОК.
Однако. Решил задачу усложнить. Что бы по штрихкоду находил номенклатуру - это один список, а от него соответствующей номенклатуре серию и прочее в другом списке. Можно было конечно форму на запрос сделать и там уже искать, формировать, но для этого еще одна лишняя форма.. и т.д.
В общем у меня так: Код формируется по полю счетчика, который не последовательные числа, а формат основной. Там 13 и более значные числа формируются. Так как одновременно сразу надо искать в 2 таблицах, сделал комбинированный код. Т.Е. код номенклатуры, потом вставляется символ "b" и код серии. При сканировании распознается код тот что до b и затем тот, что после. В опреедленной последовательности осуществляется и поиск по спискам. Все работает.
Но тут проблема. Сканер настраивается "колибруется" на английскую раскладку клавы. А тут баг како-то вышел. В общем если клава на русском, то вместо b распознается "и", ну и соответственно ошибка.
Внимание вопрос: когда включаем поиск по штрихкоду, у меня есть галка на форме, клик на которой открывает поле для сканирования. Как переводить клаву на английский?
Может быть можно как-то транслит делать, если "и", то перекодировать на "b"
Или просто выводить сообщение об ошибке, что бы клаву перевели на английский...
Что-то кажется сам себе же и ответил... переводить транслит... Может после сканирования пробегать по полю посимвольно, среди цифр обнаружить букву.... или что? | |
|
| |
|
|
|
| http://www.cyberforum.ru/vba/thread462688.html | |
|
| |
|
|
|
|
'Переключает на русский
Public Function switchToRussian()
Dim SS As String
SS = getCurrentLanguage
If InStr(SS, "419") = 0 Then
LoadKeyboardLayout "00000419", 1
End If
End Function
'Переключает на английский
Public Function switchToEnglish()
Dim SS As String
SS = getCurrentLanguage
If InStr(SS, "409") = 0 Then
LoadKeyboardLayout "00000409", 1
End If
End Function
|
| |
|
| |
|
|
|
| Спасибо одному и другому. Вопрос решил простым способом. Коли сканер привязан к раскладке клавы и распознает либо "и" либо "b", то вставил код, что после получения кода в поле, в этом поле проходит посимвольная проверка. И если находится "и", то автоматически заменяется на "b" в переменной, если "b" то так и остается. И вопрос отпал. ))
Но код раскладки клавы все равно нужен. Только это уже другая история. | |
|
| |
|
|
|
| Блин. Ругается вот на это: LoadKeyboardLayout выделяя его синим цветом.
а так задумка классная. | |
|
| |
|
|
|
| Извиняюсь.
Надо добавить
Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (pwszKLID As Any) As Long
Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal HKL As String, ByVal Flags As Long) As Long
Public Function getCurrentLanguage()
Dim z As Long
z = GetKeyboardLayoutName(bArr(1))
If z = 0 Then
getCurrentLanguage = ""
Else
getCurrentLanguage = decodeString
End If
End Function | |
|
| |
|
|
|
| Понятно. Теперь имею кучу функций. Стал ругаться на bArr, выделяя его черным.
Это как понимаю надо сажать в модуль. Вот в модуле эта и две предыдущие. Теперь при попадании курсора в поле запускаю через call нужную функцию. Но ведь ругается. Может какую библиотеку подключить надо. | |
|
| |
|
|
|
| Щас
Dim bArr(500) As Byte | |
|
| |