Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
3-1087446671
r9000
2004-06-17 08:31
2004.07.11
Определение номера колонки редактируемой таблицы.


8-1083126418
клюква
2004-04-28 08:26
2004.07.11
Резиновые фигуры


3-1087370937
Inkarik
2004-06-16 11:28
2004.07.11
Ошибка SQL Builder


1-1087966935
Игорь
2004-06-23 09:02
2004.07.11
Фокус в TEdit е


1-1088109321
Destroyer
2004-06-25 00:35
2004.07.11
Иконка из файла на кнопке