Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переключение языка Rus-En в VB6  (Прочитано 10110 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Mefody
Сумасшедший программист
Участник

ru
Offline Offline
Пол: Мужской

« : 28-07-2011 10:30 » 

Понадобилось мне сделать переключалку языков на Visual Basic 6. Поискал по Интернету, везде один и тот же вариант:
Код:
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long 

' Переключаем на русский
Call ActivateKeyboardLayout(68748313, 0)
' Переключаем на английский
Call ActivateKeyboardLayout(67699721, 0)
Или варианты той же программы, например, отсутствует слово Private, или числа вынесены в отдельные константы. Но это неважно.
И главное, на форумах все говорят: Спасибо, всё прекрасно работает!
А у меня, как ни ввожу, на оператор Declare выдает вот такую ошибку:
Only comments may appear after End Sub, End Function, or End Property

Причем независимо от того, куда я эту строку ставлю - в начале программы, где определения Dim и Const или в середину, прямо там, где мне нужно переключать раскладку, в том модуле, в котором я ее переключаю, или в модуле Form_Load, или в любом другом.

А если этот оператор поставить в область (Declarations), где ему, казалось бы, самое место, то получаю вот такую ошибку:
Constants, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules

Вопрос: Как заставить этот код работать? Может, надо ещё какие-то действия произвести?
А может быть, нужно просто скопировать этот файл user32.dll из каталога Windows\System32 в каталог моего проекта?
Что скажете?

Спрашивал на другом форуме, там тоже все говорят, что нормально работает.
Неужели у меня одного эта ошибка вылезает? В чем дело может быть?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 28-07-2011 11:37 » new

Если вставляешь в модуль, то замени Private на Public.

Проверь, что в user32.dll функция действительно так называется. Если имя отличается даже на букву, то после Lib "user32" напиши Alias "реальное имя".

Например:

Код: (Visual Basic)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, lParam As Long) As Long
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mefody
Сумасшедший программист
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 28-07-2011 16:42 » 

Все, выяснил.
Оператор Private Declare надо было писать в разделе (Declarations), а не в том модуле, где я делаю переключение.
Причем именно с Private, а не с Public, и притом раньше, чем операторы Dim, которые задают общие переменные.
А функция называется абсолютно правильно, так что никакие алиасы не нужны.
Все, вопрос закрыт.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines