Форум: "Система";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Внизкак переключить разкладку клавы (рус./лат./....) Найти похожие ветки
← →
LVA (2002-02-22 11:34) [0]Может кто подскажет:
Мне необходимо переключать разкладку клавы в моей программе, например по RadioGroup.
← →
Johnmen (2002-02-22 11:44) [1]SetKeyboardLayout, в NT не раб.
← →
LVA (2002-02-22 11:58) [2]но мне и не нужно в NT4
← →
777 (2002-02-22 12:03) [3]
Layout: array[0.. KL_NAMELENGTH] of char;
//RU
LoadKeyboardLayout( StrCopy(Layout,"00000419"),KLF_ACTIVATE);
//EN (или наоборот? :)
LoadKeyboardLayout(StrCopy(Layout,"00000409"),KLF_ACTIVATE);
← →
LVA (2002-02-22 12:43) [4]а может кто знает где посмотреть коды для других кодировок?
ах да и спасибо "777" за помощ
← →
Romkin (2002-02-22 13:12) [5]Вот тебе автомат:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, AppEvnts, Buttons;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
BitBtn1: TBitBtn;
procedure RadioGroup1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FList: array of HKL;
procedure ActivateRG;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Registry;
{$R *.DFM}
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
ActivateKeyboardLayout(FList[RadioGroup1.ItemIndex],0);
end;
const
LocaleNames = "\System\CurrentControlSet\Control\Keyboard Layouts\";
procedure TForm1.ActivateRG;
var
BufSize, i: integer;
s: string;
ActiveLayout: HKL;
begin
if RadioGroup1.Items.Count = 0 then exit;
ActiveLayout := GetKeyboardLayout(0);
for i := Low(FList) to High(FList) do
if FList[i] = ActiveLayout then
RadioGroup1.ItemIndex := i;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
BufSize, i: integer;
s: string;
LocaleName: string;
Reg: TRegistry;
begin
FList := nil;
BufSize := GetKeyboardLayoutList(0,FList);
SetLength(FList, BufSize);
GetKeyboardLayoutList(2,FList[0]);
//Get names
SetLength(s,KL_NAMELENGTH - 1);
RadioGroup1.Items.Clear;
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
for i := Low(FList) to High(FList) do
begin
GetKeyboardLayoutName(PChar(s));
if Reg.OpenKey(LocaleNames + s, false) then
begin
LocaleName := Reg.ReadString("Layout Text");
RadioGroup1.Items.Add(LocaleName);
end;
Reg.CloseKey;
ActivateKeyboardLayout(HKL_NEXT,0);
end;
finally
Reg.Free;
end;
ActivateRG;
end;
end.
← →
Anatoly Podgoretsky (2002-02-23 11:05) [6]LVA © (22.02.02 11:58)
Если тебе не нужно в линейке НТ, то зачем в запросе указываешь Win2k, WinXP и не передергивай речь не про НТ4 а про линейку НТ.
Кстати такая радиогруппа уже есть в строенная в систему, в systray только разреши ее в настройках системы, между прочим это именно то место куда лезет пользователь для "переключать разкладку клавы".
LVA © (22.02.02 12:43)
Другие идентификаторы можно посмотреть или в MSDN или на крайний случай в реестре, сделай поиск по 00000419 и найдешь все известные твоей системе.
← →
Sasha9 (2002-02-23 19:11) [7]
ActivateKeyboardLayout(HKL_NEXT{HKL_PREV},KLF_REORDER);
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c