Locale_XXX api constant

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Locale_XXX api constant

Сообщение mayhem » 24.09.2005 (Сб) 17:53

есть строчка кода
nSize = GetLocaleInfo(LCID, dwLCType, sReturn, Len(sReturn))

есть переменная dwLCType которая может быть
Public Const LOCALE_SCOUNTRY = &H6 ' localized name of country
Public Const LOCALE_SENGCOUNTRY = &H1002 ' English name of country

я так понял первая должна выводить "Английский (США)" а вторая "United States" допустим! Но так не происходит!

Как получить список раскладок в текущей локали а не в аглицкой?

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

Сообщение tyomitch » 24.09.2005 (Сб) 20:31

Покажи декларацию. 90%, что проблема там.
Изображение

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 26.09.2005 (Пн) 15:56

hKeyboardID получается c GetKeyboardLayout(tId)
Код: Выделить всё
Public Function getLayoutCaption(hKeyboardID)
    Dim LCID As Long
   
    If hKeyboardID > 0 Then
    '
        If hKeyboardID And &H8000& Then '32768
            LCID = &H8000& Or (hKeyboardID And &H7FFF&) '32767
        Else
            LCID = hKeyboardID And &HFFFF&
        End If
    '
        If LCID Then
            dwLCType = LOCALE_SCOUNTRY      '<-----------------
            '
            Dim sReturn As String
            Dim nSize As Long
            nSize = GetLocaleInfo(LCID, dwLCType, sReturn, Len(sReturn))
            If nSize > 0 Then
                sReturn = Space$(nSize)
                nSize = GetLocaleInfo(LCID, dwLCType, sReturn, Len(sReturn))
                getLayoutCaption = Left$(sReturn, nSize - 1)
            End If
            '
        End If
    End If
End Function

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 26.09.2005 (Пн) 16:12

mayhem писал(а):hKeyboardID получается c GetKeyboardLayout(tId)
Код: Выделить всё
Public Function getLayoutCaption(hKeyboardID)
    Dim LCID As Long
   
    If hKeyboardID > 0 Then
    '
        If hKeyboardID And &H8000& Then '32768
            LCID = &H8000& Or (hKeyboardID And &H7FFF&) '32767
        Else
            LCID = hKeyboardID And &HFFFF&
        End If
    '
        If LCID Then
            dwLCType = LOCALE_SCOUNTRY      '<-----------------
            '
            Dim sReturn As String
            Dim nSize As Long
            nSize = GetLocaleInfo(LCID, dwLCType, sReturn, Len(sReturn))
            If nSize > 0 Then
                sReturn = Space$(nSize)
                nSize = GetLocaleInfo(LCID, dwLCType, sReturn, Len(sReturn))
                getLayoutCaption = Left$(sReturn, nSize - 1)
            End If
            '
        End If
    End If
End Function


Public Function getLayoutCaption(VyVal hKeyboardID as integer) :wink:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 27.09.2005 (Вт) 12:04

чета мне не верится что это выход! hKeyboardID - обычное число Long, по єтому пофиг как его передавать! а константі глючат по страшному!
Мне надо список язіков как в Tray висит, там на русском а у меня на аглицком вылазит!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.09.2005 (Вт) 12:55

mayhem писал(а):чета мне не верится что это выход! hKeyboardID - обычное число Long, по єтому пофиг как его передавать! а константі глючат по страшному!
Мне надо список язіков как в Tray висит, там на русском а у меня на аглицком вылазит!


Приведенный ниже код выводит страну в текущей локали.
Если у тебя получится не по русски - разбирайся со своей локалью ибо она не русская... :lol:

Код: Выделить всё
Public Enum LCTYPE
    LOCALE_SLANGUAGE = &H2                  ' localized name of language
    LOCALE_SCOUNTRY = &H6                   ' localized name of country
End Enum

Public Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal iLCTYPE As LCTYPE, ByVal sBuffer As String, iSize As Long) As Long

Public Sub Main()
    Debug.Print GetLocaleInfo(1033, LOCALE_SCOUNTRY), GetLocaleInfo(1033, LOCALE_SLANGUAGE)
End Sub

Public Function GetLocaleInfo(iLocale As Long, iType As LCTYPE) As String
    Dim i As Long, s As String * 255
    i = GetLocaleInfoA(iLocale, iType, s, Len(s))
    If i > 1 Then GetLocaleInfo = Left$(s, i - 1)
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

mayhem
Новичок
Новичок
Аватара пользователя
 
Сообщения: 49
Зарегистрирован: 26.07.2004 (Пн) 14:02
Откуда: kiev

Сообщение mayhem » 27.09.2005 (Вт) 18:46

вывело нормально! буду разбираться!

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 28.09.2005 (Ср) 7:28

Private Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal iLCTYPE As LCTYPE, ByVal sBuffer As String, iSize As Long) As Long

Эта функция требует в последнем параметре ByVal, т.е.
Private Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal iLCTYPE As LCTYPE, ByVal sBuffer As String, ByVal iSize As Long) As Long

ИМХО лучше использовать W-версию этой функции, по крайней мере, у меня она выдала США вместо ??? в A-версии.
Код: Выделить всё
Private Declare Function GetLocaleInfoW Lib "kernel32" (ByVal Locale As Long, ByVal iLCTYPE As LCTYPE, _
        ByVal sBuffer As Long, ByVal iSize As Long) As Long

Public Function GetLocaleInfo(ByVal iLocale As Long, ByVal iType As LCTYPE) As String
    Dim i As Long, s As String
    s = String(255, " ")
    i = GetLocaleInfoW(iLocale, iType, StrPtr(s), Len(s))
    If i > 1 Then GetLocaleInfo = Left$(s, i - 1)
End Function
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 33

    TopList