Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Язык клавы при запуске программы   Найти похожие ветки 

 
FRick ©   (2004-06-02 17:59) [0]

Как сделать так чтобы при запуске формы и во время работы
стоял только English язык??????????????


 
Gero ©   (2004-06-02 18:01) [1]


> Язык клавы

Это как?


 
FRick ©   (2004-06-02 18:23) [2]

Тоесть язык ввода!


 
serge ©   (2004-06-02 18:24) [3]

наверное обрабатывать WM_INPUTLANGCHAGEREQUEST (не помню точного названия)


 
FRick ©   (2004-06-02 18:51) [4]

Вот я сам нашол статью вам прегодится:

-------------------------------------------------------
Секреты Delphi. Изменение языка ввода в программах

В процессе ввода в эксплуатацию ваших творений возникает множество замечаний от пользователей, связанных с повышением скорости ввода данных, удобства интерфейса пользователя и добавления функциональности программы. Часто можно услышать вопрос: "А можно...?", на что обычно отвечаешь: "Возможно все", записываешь все в блокнот, и начинаются поиски решения.

Процесс шлифовки программ продолжается постоянно. И обратная связь с пользователями позволяет создать действительно удобный и полезный продукт.
Именно поэтому я приверженец спиральной модели разработки, когда циклы доработок повторяются постоянно как в процессе разработки, так и в процессе эксплуатации программного обеспечения.
Один из таких вопросов — "А возможно ли при вводе данных автоматически менять язык ввода данных?" — попробуем решить сегодня. Для этого воспользуемся системной функцией Windows API LoadKeyboardLayout.
Создадим две процедуры для смены языка и поместим их в общедоступный модуль. Вторая версия данной процедуры позволяет использовать более простой синтаксис вызова для общеупотребительных кодировок.

procedure SetKeyboardLayout(const aLayout: String);overload;
procedure SetKeyboardLayout(const primary LangID, subLangID: Word);overload;
. . .
implementation
. . .
procedure SetKeyboardLayout(const primary LangID, subLangID: Word);
var
Layout: array[0.. KL_NAMELENGTH] of char;
d: word;
s: string;
begin
d:= (subLangID shl 10) or primaryLangID or (Longint(0) shl 16);
s:= IntToHex(d,8);
//Вызов функции Windows API для смены языка
LoadKeyboardLayout(StrCopy(Layout,PChar (s)),KLF_ACTIVATE);
end;

procedure SetKeyboardLayout(const aLayout: String);
var
primaryLangID, subLangID: Word;
begin
if UpperCase(aLayout)="RU" then
primaryLangID := LANG_RUSSIAN
else if UpperCase(aLayout)="GE" then
primaryLangID := LANG_GERMAN
else
primaryLangID := LANG_ENGLISH;
SetKeyboardLayout(primaryLangID, SUBLANG_ DEFAULT);
end;

//Пример вызова созданной функции, переключающей язык ввода на русский
procedure TfrmPayment.dbedtFioEnter(Sen-der: TObject);
begin
SetKeyboardLayout(LANG_RUSSIAN, SUBLANG_DEFAULT);
end;

//Либо более простой синтаксис
procedure TfrmPayment.dbedtFioEnter (Sender: TObject);
begin
SetKeyboardLayout("RU");
end;

Список кодировок можно посмотреть в модуле windows.pas. Привожу несколько общеупотребительных:
• LANG_BELARUSIAN;
• LANG_ENGLISH;
• LANG_FRENCH;
• LANG_GERMAN;
• LANG_POLISH;
• LANG_RUSSIAN;
• LANG_UKRAINIAN.

Надеюсь, данный материал поможет добавить вашим программам профессионализма и получить признание пользователей.

-----------------------------------------------------------


 
FRick ©   (2004-06-02 19:43) [5]

Вот этот код работает:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Timer_LANG: TTimer;
 procedure SetKeyboardLayout(const aLayout: String); overload;
   procedure FormCreate(Sender: TObject);
   procedure Timer_LANGTimer(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure Tform1.SetKeyboardLayout(const aLayout: String);
var
primaryLangID, subLangID: Word;
Layout: array[0.. KL_NAMELENGTH] of char;
s: string;
d: word;
begin
d:= (subLangID shl 10) or primaryLangID or (Longint(0) shl 16);
s:= IntToHex(d,8);

//Вызов функции Windows API для смены языка
LoadKeyboardLayout(StrCopy(Layout,PChar (s)),KLF_ACTIVATE);

if UpperCase(aLayout)="RU" then
primaryLangID := LANG_RUSSIAN
else if UpperCase(aLayout)="EN" then
primaryLangID := LANG_ENGLISH
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer_LANG.Enabled:= true;
Timer_LANG.Interval:= 1;
end;

procedure TForm1.Timer_LANGTimer(Sender: TObject);
begin
 form1.SetKeyboardLayout("EN");
end;

end.


 
FRick ©   (2004-06-02 19:44) [6]

Только всегда English!


 
M126   (2004-06-03 09:19) [7]

Для подгрузки русского делаешь в событии формы OnActivate    
    LoadKeyBoardLayout("00000419", KLF_ACTIVATE);
Для английского - LoadKeyBoardLayout("00000409", KLF_ACTIVATE);



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.051 c
14-1087174011
Ajax
2004-06-14 04:46
2004.07.11
"Методики засыпания"


14-1088041732
Думкин
2004-06-24 05:48
2004.07.11
С днем рождения! 24 июня


4-1085595377
RomariO
2004-05-26 22:16
2004.07.11
Эмуляция принтера


11-1076098035
DDA
2004-02-06 23:07
2004.07.11
ImageShow problem


1-1088198532
jktu
2004-06-26 01:22
2004.07.11
Вопрос о формуле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский