Проблеммы с языком

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Проблеммы с языком

Сообщение Sirik » 23.09.2004 (Чт) 15:56

У меня есть форма, которая прячется в трей по событию свернуть.
Допустим выбран язык русский. Когда востанавливаю форму, то только на одном компьютере из 4, язык переключался на англ.
Может кто знает как узнать выбранный язык? (англ и рус). И как их программно переключать?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.09.2004 (Чт) 16:23

Код: Выделить всё
'This example was created by Kirill V. Rodionov
'This program needs a Command Button, named Command1

Private Const KL_NAMELENGTH As Long = 9
Private Const HKL_NEXT As Long = 1
Private Const HKL_PREV As Long = 0

Private Declare Function ActivateKeyboardLayout Lib "user32" ( _
    ByVal HKL As Long, _
    ByVal Flags As Long) As Long
   
Private Declare Function GetKeyboardLayout Lib "user32" ( _
    ByVal dwLayout As Long) As Long
   
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" ( _
    ByVal pwszKLID As String) As Long

Private Sub Command1_Click()
Dim lngCurrent_HKL As Long
Dim strCurrent_Buffer As String
Dim lngSwitched_HKL As Long
Dim strSwitched_Buffer As String

'Retrieves current handle to the keyboard layout
   lngCurrent_HKL = GetKeyboardLayout(0)
   
'creates a buffers
   strCurrent_Buffer = String(KL_NAMELENGTH - 1, 0)
   strSwitched_Buffer = String(KL_NAMELENGTH - 1, 0)
   
'Retrieves current name of the active keyboard layout
   GetKeyboardLayoutName strCurrent_Buffer
   
'Switches to the next keyboard layout
   ActivateKeyboardLayout HKL_NEXT, 0
   
'Retrieves "switched" handle to the keyboard layout
   lngSwitched_HKL = GetKeyboardLayout(0)
   
'Retrieves "switched" name of the active keyboard layout
   GetKeyboardLayoutName strSwitched_Buffer
   MsgBox "Keyboard layout was switched" & vbCrLf & "from " & strCurrent_Buffer _
      & " to " & strSwitched_Buffer
     
'Returns to the initial keyboard layout
   ActivateKeyboardLayout lngCurrentHKL, 0
End Sub
Изображение

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 23.09.2004 (Чт) 16:23

Private Declare Function LoadKeyboardLayout _
                    Lib "user32" _
                    Alias "LoadKeyboardLayoutA" (ByVal HKL As String, _
                                                 ByVal Flags As LongAs Long
                                                 
'Переключает на указанную sNewLang раскладку - возвращает старую раскладку
Private Function switchLang(sNewLang As StringAs String
    '"00000419" - русская
    '"00000409" - латинская
    switchLang = getCurrLang
    If StrComp(switchLang, sNewLang) <> 0 Then
        LoadKeyboardLayout sNewLang, 1
    End If
End Function

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 23.09.2004 (Чт) 16:26

:D з.ы. - а у меня код короче, но красивше.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 23.09.2004 (Чт) 16:28

marvan писал(а):Private Declare Function LoadKeyboardLayout _
                    Lib "user32" _
                    Alias "LoadKeyboardLayoutA" (ByVal HKL As String, _
                                                 ByVal Flags As LongAs Long
                                                 
'Переключает на указанную sNewLang раскладку - возвращает старую раскладку
Private Function switchLang(sNewLang As StringAs String
    '"00000419" - русская
    '"00000409" - латинская
    switchLang = getCurrLang
    If StrComp(switchLang, sNewLang) <> 0 Then
        LoadKeyboardLayout sNewLang, 1
    End If
End Function


а что значит getCurrLang ???

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 23.09.2004 (Чт) 16:33

ух я дурья башка, код не глядя дёрнул и радуюсь :(
    Private Declare Function LoadKeyboardLayout _
                    Lib "user32" _
                    Alias "LoadKeyboardLayoutA" (ByVal HKL As String, _
                                                 ByVal Flags As LongAs Long
    Private Declare Function GetKeyboardLayoutName _
                    Lib "user32" _
                    Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As StringAs Long
    Private Const KL_NAMELENGTH = 9

Private Function getCurrLang() As String
    Dim layoutname As String * KL_NAMELENGTH
    Dim z As Long
    z = GetKeyboardLayoutName(layoutname)

    If z = 0 Then
        getCurrLang = ""
    Else
        getCurrLang = StrZ(layoutname)
    End If
End Function

'Переключает на указанную sNewLang раскладку - возвращает старую раскладку
Private Function switchLang(sNewLang As StringAs String
    '"00000419" - русская
    '"00000409" - латинская
    switchLang = getCurrLang
    If StrComp(switchLang, sNewLang) <> 0 Then
        LoadKeyboardLayout sNewLang, 1
    End If
End Function

Private Function StrZ(par As StringAs String
    Dim nSize As Long, i As Long
    nSize = Len(par)
    i = InStr(1, par, Chr$(0)) - 1

    If i > nSize Then i = nSize
    If i < 0 Then i = nSize
    StrZ = Mid$(par, 1, i)
End Function
Последний раз редактировалось marvan 23.09.2004 (Чт) 16:40, всего редактировалось 1 раз.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 23.09.2004 (Чт) 16:39

2 marvan Большое человеское спасибо!!!!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.09.2004 (Чт) 19:50

marvan писал(а)::D з.ы. - а у меня код короче, но красивше.

Целиком - не короче :-D
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList