Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Возможно ли программно переключать язык ввода текста,или получить информацию о том какой язык мспользуется.
Штатными средствами NB, к сожалению, нет! Если вы используете NB версии 5.6, то это все легко можно сделать при помощи функций VBScript. Правда, для этого надо ещё хоть немного знать этот самый VB. Или только при помощи плагина...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Узнать довольно просто. У меня получалось с использованием этих глобальных переменных (выдержка из справки):
[SystemLanguage] Возвращает значение активной локализации операционной системы (язык винды, короче говоря). Например: “English (United States)”
[SystemLanguageExt] Возвращает аббревиатурное сокращение активной языковой локализации операционной системы. Например: “ENU” для английского языка (United States).
Узнать довольно просто. У меня получалось с использованием этих глобальных переменных (выдержка из справки):
Это переменные содержат именно те данные, которые и указаны в справке, и к текущей раскладке клавиатуры отношения не имеют. К тому же, раскладка клавы может быть у каждого активного окна (программы) своя!
Добавлено (17 Июль 2009, 13:19) ---------------------------------------------
Quote (Bodi)
а вот узнать какая используется можно попробовать.
Только если через плагин ии VBS. Плагин делать для такой ерунды смысла нет, а вот вернется из отпуска Дембель, попросим его наваять VB-скрипт (мне изучать его в лом, да и некогда). Преобразуем скрпит в необушную функцию. Это будет самое разумное и экономичное решение! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Я просто видимо не понял вопроса. Если текст (который нужно определить) вводится в программе NB, то можно определить на каком он языке, а если он вводится куда-либо ещё, или вообще не куда не вводится, то конечно просто так его не определить.
получить информацию о том какой язык мспользуется.
Если при вводе текста в самом проекте, то можно подумать... Правда, с наскока я пока не могу сообразить...
Добавлено (17 Июль 2009, 14:38) ---------------------------------------------
Quote (Peter)
Если при вводе текста в самом проекте, то можно подумать..
В принципе, да - есть способ. Правда, над практической реализацией (чтобы было действительно удобно) нужно подумать... - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Можно сделать два массива, содиржащих русский и английский алфавиты. Потом из введеной строки выделить первый символ и (если это буква, а не цифра или т.п.) найти ее в этих массивах.
Можно сделать два массива, содиржащих русский и английский алфавиты.
Я так же и подумал...
Quote (Bodi)
Потом из введеной строки выделить первый символ
Тут все сложнее - а если в процессе набора текста юзер изменил раскладку? Нужно проверять непрерывно в ходе набора текста. Это тоже можно, но алгоритм уже усложняется. Вот, кстати, чем не пример в "копилку" готовых проектов-решений? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Ну дак тогда получится что юзер написал текст на двух языках??
Если обязательно требуется на каком-то одном языке, то - да, все упрощается.
Quote (Bodi)
PS надо еще с регистром что-то придумать...
Для проверки раскладки это как-раз и не нужно, а точнее - ВРЕДНО! Но в принципе, в версии NB 5.6 команда SearchStr уже имеет опцию "с учетом регистра". - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Для проверки раскладки это как-раз и не нужно, а точнее - ВРЕДНО! Но в принципе, в версии NB 5.6 команда SearchStr уже имеет опцию "с учетом регистра".
Я забыл про команды: StrUpper "" "" , StrLower "" "". С ними все будет нормально
Если обязательно требуется на каком-то одном языке, то - да, все упрощается.
Хотя нет! Нам ведь надо четко ограничить раскладку при вводе, поэтому проверять придется НЕПРЕРЫВНО! Это типа защита от дурака...
Добавлено (17 Июль 2009, 15:14) ---------------------------------------------
Quote (Bodi)
Я забыл про команды: StrUpper "" "" , StrLower "" "".
А зачем они?
Добавлено (17 Июль 2009, 15:15) --------------------------------------------- Я имею ввиду зачем они здесь?
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Ну если у нас алфавит будет сохранен в нижнем регистре, а пользователь напишет свою строку в верхнем, то ведь ничего не получится, другими словами "а" и "А" не одно и тоже. Хотя может я чего-то недопонимаю?
Для команды SearchStr это одно и то же! Если, конечно, не задействована опция "с учетом регистра".
Quote (Alex3A)
А вам не кажется, что надо оставитьвсе как оно и есть?
В смысле?
Quote (Alex3A)
Или прога расчитана на обезьян?
На диких?
Мы ведь сейчас рассуждаем чисто ТЕОРЕТИЧЕСКИ! А на каких обезьян рассчитывать прогу пусть юзер сам решает!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Если чисто теоритически то все возможно, не менее чем с десятоком способов Надеюсь вы заметили, что когда в какой либо проге вы установите раскладку и регистр, он сохраняется таким же при переходах с проги на прогу, а это значит, что есть места где это все храниться, остается найти где и использовать Нагуглить можно немеряно.
Ааа... просто я не сразу вас понял, вы хотите искать соответствие введенных букв и букв в массиве с помощью SearchStr? А я хотел сделать что-то вроде этого:
Code
Loop "1" "32" "[n]" If "[MassivRU[n]]" "=" "[text]" .введен русский текст ... ExitLoop Else If "[MassivEN[n]]" "=" "[text]" .введен английский текст ... ExitLoop EndIf EndIf EndLoop
В переменной text первый символ введенной юзером строки.
Quote (Peter)
Нам ведь надо четко ограничить раскладку при вводе, поэтому проверять придется НЕПРЕРЫВНО!
Можно проверить все введенные символы и если этот текст и на том и на другом языке, выдать соответствующее сообщение.
он сохраняется таким же при переходах с проги на прогу
У меня ничего подобного не происходит - как и положено каждое окно открывается с раскладкой по умолчанию, и при смене раскадки сохраняет её на все время сеанса.
Добавлено (17 Июль 2009, 16:24) --------------------------------------------- И при переключении с окна на окно раскладка соответственно меняется тоже.
Добавлено (17 Июль 2009, 16:27) ---------------------------------------------
Quote (Bodi)
букв в массиве
Нам тут не нужны массивы: буквы алфавита достаточно поместить в простые переменные, и уже в них искать соответствия. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Добавлено (17 Июль 2009, 16:34) --------------------------------------------- Все. сейчас работать надо. все вечером.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Эта переменная только для чтения? или для записи то же? делфя russian := LoadKeyboardLayout('00000419', 0); latin := LoadKeyboardLayout('00000409', 0); SetActiveKeyboardLayout(russian); апи SetKeyboardLayout GetKeyboardLayout LoadKeyboardLayout(StrCopy(Layout,PChar (s)),KLF_ACTIVATE); в проект можно све это влепить несколькими способами, через плагин, выполняемый внешний файл, в конце концов, через рундлл32.ехе, написав под его формат библу с нужной функцией...
Ну да, в делфях все просто, но делать специально ради этого плагин как-то... Просто (на мой взгляд) гораздо разумнее и изящнее решить эту же задачу через VB-функцию.
Добавлено (17 Июль 2009, 21:47) ---------------------------------------------
Quote (Bodi)
Например переменная [MassivRU1] будет содержать букву "а", [MassivRU2] - "б" и т.д.
Я сейчас попробовал живьем... В общем, никаие массивы не нужны. все гораздо проще: создаем две (для двух раскладок) переменные, например, [Rus] и [Eng], в них заносим алфавиты:
Понятно, что это совсем упрощенный вариант и его нужно дорабатывать, к тому же надо будет отслеживать каждый вводимый символ, а не все содержание объекта ввода целиком, как это получается сейчас в примере, но проблем нет, и в целом идея, думаю, ясна. Точно также можно обработать и ввод цифр, специальных символов...
Добавлено (17 Июль 2009, 22:00) --------------------------------------------- Но, все же я не стал бы заморачиваться с этими скриптами, а применил VB-функцию.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Спасибо, Peter, за подсказку! А то я с массивами бился... Они не бились... Я как раз делаю ограничение на допустимые символы в поле ввода. Кстати, в свойствах поля ввода есть возможность использовать маски ввода (но либо маска у меня не работает, либо я делаю что-то не так...). Буду признателен за ответ по маске. По идее, если выставить символ А, то должны разрешаться для ввода только английские буквы и цифры, но этого не происходит. Поэтому пришлось писать код.
В отношении вопроса топика код можно считать почти ответом - так можно узнать, какой язык исключается (воспользовавшись ключевыми его символами или всем алфавитом, как в примере ниже) :)...
К моему сожалению более короткого кода я не смог получить (а самый длинный был просто чудовищным - на 40 страниц... :D...) Получилось (в сокращенном виде) следующее:
Code
.допустимое кол-во символов для ввода в окне ввода: 3 SubStr "[PoleVvoda]" "1" "3" "[Stroka]"
.создаем переменную для латиницы и цифр SetVar "[Latinica]" "q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m,Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M,1,2,3,4,5,6,7,8,9"
.код проверки вводимых символов If "[PoleVvoda]" "=" "" AlertBox "Ошибка ввода" "Поле ввода не может быть пустым." Else SearchStr "[Simvol1]" "[Latinica]" "[NumStr1]" SearchStr "[Simvol2]" "[Latinica]" "[NumStr2]" SearchStr "[Simvol3]" "[Latinica]" "[NumStr3]"
IfEx "[NumStr1] > 0 AND [NumStr2] > 0 AND [NumStr3] > 0" тогда все замечательно, следуем сценарию... Else IfEx "[NumStr1] = 0 OR [NumStr2] = 0 OR [NumStr3] = 0" AlertBox "Неверный язык ввода" "Переключите язык клавиатуры" EndIf EndIf EndIf
Не знаю, нужно ли было указывать буквы алфавита в верхнем регистре...
По идее, если выставить символ А, то должны разрешаться для ввода только английские буквы и цифры,
Почему именно английские? Согласно файла справки символ A обозначает набор символа из ДИАПАЗОНА алфавита, и пример:(A-Z, a-z or 0-9) только-лишь ПРИМЕР для английского языка. Не убежден в том, что разработчикам NB было бы в кайф приводить примеры для всех языков, существующих на планете.
Quote (VadimLevkin)
Получилось (в сокращенном виде) следующее:
Какому событию назначен этот код? Если для контроля процесса ввода, то он не будет работать. К тому же, в нем не обработан случай (предупреждение) для меньшего количества символов. Но, универсальности по-прежнему нет, т.к. код привязан к строгому количеству символов.
Quote (VadimLevkin)
Не знаю, нужно ли было указывать буквы алфавита в верхнем регистре...
Нет, не нужно.
Quote (Peter)
Для команды SearchStr это одно и то же!
И запятые между символами тоже не нужны.
P.S. Кстати, количество IF и ENDIF почему-то совпадают...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Спасибо, Peter, за подсказку! А то я с массивами бился... Они не бились... Я как раз делаю ограничение на допустимые символы в поле ввода.
О, я вижу вы уже взялись за этот пример? Моя лень меня когда-нибудь погубит
Quote (VadimLevkin)
Буду признателен за ответ по маске. По идее, если выставить символ А, то должны разрешаться для ввода только английские буквы и цифры, но этого не происходит. Поэтому пришлось писать код.
Здесь с маской не получится, только код.
Quote (VadimLevkin)
Получилось (в сокращенном виде) следующее:
А что делает ваш код? Определяет на английском ли языке написана строка? Лучше попробуйте сделать перевод из английских букв в русские (например: ghbdtn - привет), эта задача намного интересней и тут уж без универсальности никуда.
Quote (Peter)
P.S. Кстати, количество IF и ENDIF почему-то совпадают...
А что делает ваш код? Определяет на английском ли языке написана строка?
Quote (Peter)
Какому событию назначен этот код?
Quote (Peter)
Если для контроля процесса ввода, то он не будет работать.
Это Left Click по кнопке "Принять пароль". Конечно, для контроля процесса ввода он работать не будет. Передо мной стояла задача ограничить поле ввода допустимыми символами (раз уж сам язык ввода менять нельзя). После того как пользователь вводит пароль, он нажимает кнопку "Принять пароль", и если есть недопустимые символы, то программа выдаст сообщение. Поле ввода ограничено 11 символами (в примере я сделал 3, чтобы не засорять пространство.
Quote (Peter)
в нем не обработан случай (предупреждение) для меньшего количества символов.
Верно. Такая обработка ведется у меня по другому - кол-во символов программа наращивает до нужного кол-ва сама, потом только кодирует.
Quote (Peter)
И запятые между символами тоже не нужны.
Да, запятые остались от опытов с массивами, недоглядел
Добавлено (19 Июль 2009, 16:12) ---------------------------------------------
Quote (Peter)
Кстати, количество IF и ENDIF почему-то совпадают...
Все таки я решил поробовать решить эту интересную задачку, и вот что у меня получилось (см. прикрепление). На самом деле это не так сложно как казалось. Определение языка введенного текста получилось на 19 строк, хотя если еще немного подумать, то можно существенно укоротить код. Еще я добавил перевод из английских букв в русские и наоборот. Прошу учесть, что этот пример еще очень сырой и нуждается в дальнейшей доработки.