Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2009, 22:14   #1
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
Восклицание Как сделать переключение языка ввода при попадании в определенное поле

Вобщем сабж. Есть несколько полей - к примеру 3 поля. В первое и третье надо вводить слова только на русской раскладке, во второе - буквенный код вида D013 по английски. Реально ли соорудить сабж? имхо надо юзать вбскрипт подскажите или лучше ткните готовым... ибо я в скриптах еще плохо разбираюсь... решить задачу способами: поставить пунтасвитчер и изменить буквенный код на "по-русски" Д013 не предлагать Решение может еще кому понадобится, так что тема довольно актуальная. По форуму полазив и погуглив - решения не нашел... если есть где - ткните
smoky вне форума Ответить с цитированием
Старый 20.07.2009, 08:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

реально.

вот, например,

Переключение раскладки на русскую если в данный момент раскладка английская средствами WinAPI:

(с) Автор: Troitsky, Отправлено:10:28 04-11-2006

Код:
Private Declare Function GetKeyboardLayoutName Lib "user32" _ 
Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long 

Private Declare Function ActivateKeyboardLayout Lib "user32" _ 
(ByVal HKL As Long, ByVal flags As Long) As Long 


Sub ChangeKeyboardLayout() 
Dim KeybLayoutName As String 
KeybLayoutName = String(9, 0) 
GetKeyboardLayoutName KeybLayoutName 
'409 - английская, 
'419 - русская 
'Переключение раскладки на русскую если в данный момент раскладка английская 
If Val(CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1)))) = 409 Then 
  ActivateKeyboardLayout 0, 0 
End If 
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.07.2009, 22:29   #3
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию

О! Самое то, спасибо! для тех кому понадобится:
Сам этот скрипт пихаем в редакторе VB в модуль
На нужное нам событие вешаем:
Код:
Private Sub Поле8_GotFocus()
 ChangeKeyboardLayout
End Sub
удобно и просто.
smoky вне форума Ответить с цитированием
Старый 23.05.2012, 20:49   #4
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

а на Delphi 7 ???
Giku вне форума Ответить с цитированием
Старый 23.05.2012, 20:51   #5
Giku
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 53
По умолчанию

sorry не туда записал, но если кто знает скажите плззз
Giku вне форума Ответить с цитированием
Старый 14.09.2017, 22:33   #6
Виталий_Сахно
Новичок
Джуниор
 
Регистрация: 08.07.2017
Сообщений: 2
По умолчанию

Народ! А кто знает как сделать тоже самое но для VBA7 ? Пишет, что функция должна быть описана как PtrSafe Function. Почитал на http://excelvba.ru/articles/WinAPI, попробовал просто (тупо) заменить Long на LongPtr. другой разницы в приведенных примерах не увидел. Однако не заработало. Мало того при компиляции в 2007 сразу выдает ошибку - оно и понятно - таких типов переменных у 2007 нет.
Виталий_Сахно вне форума Ответить с цитированием
Старый 15.09.2017, 07:59   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

У меня так
Код:
#If Win64 Then
    Public Declare PtrSafe Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long  ' для отримання вибраної мови
    
     Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer ' для отримання статусів КАПС, НАМ, СКРОЛ
     
    Public Declare PtrSafe Function ActivateKeyboardLayout& Lib "user32" (ByVal HKL As Long, _
    ByVal flags As Long) ' для переключення розкладки клавіатури
     
    Public Declare PtrSafe Function GetKeyboardLayout& Lib "user32" (ByVal dwLayout As Long)
 #Else
    Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long   ' для отримання вибраної мови

           
    Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer  ' для отримання статусів КАПС, НАМ, СКРОЛ
     
    Public Declare Function ActivateKeyboardLayout& Lib "user32" (ByVal HKL As Long, _
        ByVal flags As Long) ' для переключення розкладки клавіатури
     
    Public Declare Function GetKeyboardLayout& Lib "user32" (ByVal dwLayout As Long)
 #End If
https://msdn.microsoft.com/ru-ru/lib...or=-2147217396
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать фокус ввода в поле Edit Arassir Помощь студентам 14 11.07.2012 12:37
После ввода в поле по Enter нужно перейти на другое поле! •ScReam•™ Помощь студентам 2 16.06.2009 08:47
Может кто знает как вставить текст в чужое поле ввода Dark_Elf Win Api 4 20.08.2008 13:47
Как сделать так, чтобы переключение между окнами было автоматическим? barand Свободное общение 9 07.07.2008 23:54
как сделать, чтобы в определенное время появлялось новое окно Alar Общие вопросы Delphi 0 29.10.2006 20:30