Отображение раскладки в Label
проблема в том, что мне нужно не только переключать программно раскладку языка (любого, не только русского и английского), но и еще обображать их имена(как в системе: en,ru, kz) в label.
первую часть проблема я нашал как решать, но вот как правильно отобразить kln_active я не знаю ((((((((((((((((((
буду очень счастлива, если кто-нить мне подскажет.
Привет All'ы!
проблема в том, что мне нужно не только переключать программно раскладку языка (любого, не только русского и английского), но и еще обображать их имена(как в системе: en,ru, kz) в label.
первую часть проблема я нашал как решать, но вот как правильно отобразить kln_active я не знаю ((((((((((((((((((
буду очень счастлива, если кто-нить мне подскажет.
GetKeyboardLayoutName - возвращает название активной раскладки клавиатуры.
GetKeyboardLayoutName - возвращает название активной раскладки клавиатуры.
я испробывала много всего, НО как получить именно буквенный эквивалент (en,ru, it, kk и тд)?
эта функция вовращает числовой (0х409,0х419).
я испробывала много всего, НО как получить именно буквенный эквивалент (en,ru, it, kk и тд)?
эта функция вовращает числовой (0х409,0х419).
Сорри, не досмотрел... :0
В общем, можешь поиграться с классом TLanguages (есть один глобальный экземпляр класса, его возвращает функция Languages), там есть названия раскладок. Только, насколько я помню, там возвращается полное имя (типа "English (United States)", "Russian" и т.д.).
я испробывала много всего, НО как получить именно буквенный эквивалент (en,ru, it, kk и тд)?
эта функция вовращает числовой (0х409,0х419).
case x of
#$409: label1.caption := 'en';
#$419: label1.caption := 'ru';
end;
что-то типа того.
читай внимательно.
мне нужно не только ДВА языка, но и другие, о которых я еще не знаю (может у чела стоят помимо русского и английского- китайский и казахский....)
makbeth
спасибо, за подсказку. о классе пока еще ничего не читала, но со своей проблемой справилась оказалось все очень просто!
//перехваетывает сообщение, отвечающие за переключение раскладки языка.
procedure TMainWindow.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var AbbrLangSystem: array[0..KL_NAMELENGTH] of char;
begin
//сообственно говоря, само сообщение
if Msg.message = WM_INPUTLANGCHANGEREQUEST then begin
//перекллючает язык
ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);
//выводит аббривиатуру текущего языка
GetLocaleInfo(LoWord(GetKeyboardLayout(0)),LOCALE_SISO639LANGNAME ,@AbbrLangSystem,SizeOf(AbbrLangSystem));
//ну и отображаем в Лабле
Label1.Caption:=UpperCase(AbbrLangSystem);
end;
end;
procedure TForm1.FormCreate(Sender : TObject);
begin
Application.OnMessage:=MsgHandler;
end;
читай внимательно.
мне нужно не только ДВА языка, но и другие, о которых я еще не знаю (может у чела стоят помимо русского и английского- китайский и казахский....)
Я это прекрасно понимаю. :)
Но педложить что-либо, кроме как вручную перебирать языки и их коды, к сожалению, не могу. Хотя...
http://www.google.com/search?ie=UTF-8&hl=ru&q=%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B5%D0%B9%20%D0%B8%20%D0%B8%D1%85%20%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2
Яндекс вам в помощь.