![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Язык клавы при запуске программы [D6, WinXP]
FRick © (2004-06-02 17:59:00)Как сделать так чтобы при запуске формы и во время работы
стоял только English язык??????????????
M126 (2004-06-03 09:19:00) [1]Для подгрузки русского делаешь в событии формы OnActivate
LoadKeyBoardLayout('00000419', KLF_ACTIVATE);
Для английского - LoadKeyBoardLayout('00000409', KLF_ACTIVATE);
FRick (2004-06-02 19:44:00) [2]Только всегда English!
FRick (2004-06-02 19:43:00) [3]Вот этот код работает:
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 18:51:00) [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.
Надеюсь, данный материал поможет добавить вашим программам профессионализма и получить признание пользователей.
-----------------------------------------------------------
serge (2004-06-02 18:24:00) [5]наверное обрабатывать WM_INPUTLANGCHAGEREQUEST (не помню точного названия)
FRick (2004-06-02 18:23:00) [6]Тоесть язык ввода!
Gero (2004-06-02 18:01:00) [7]
> Язык клавы
Это как?