Показать сообщение отдельно
  #2  
Старый 10.08.2007, 12:05
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

1.

Список установленных раскладок клавиатуры выводится в ListBox.
При выборе в нем, раскладка меняется.

Код:
procedure GetKLList(List: TStrings);
var
  AList : array [0..9] of Hkl;
  AklName: array [0..255] of Char;
  i: Longint;
begin
  List.Clear;
  for i := 0 to GetKeyboardLayoutList(SizeOf(AList), AList) - 1 do
    begin
      GetLocaleInfo(LoWord(AList[i]), LOCALE_SLANGUAGE, AklName, SizeOf(AklName));
      List.AddObject(AklName, Pointer(AList[i]));
    end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  GetKLList(ListBox1.Items);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin

  with Sender as TListBox do
    ActivateKeyboardLayout(Hkl(Items.Objects[ItemIndex]), 0);
end;

Как программно переключить раскладку клавиатуры
Код:
//На русский
procedure TForm1.Button1Click(Sender: TObject);
var
  Layout: array[0.. KL_NAMELENGTH] of char;
begin
  LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
end;
 
//На английский
procedure TForm1.Button2Click(Sender: TObject);
var
  Layout: array[0.. KL_NAMELENGTH] of char;
begin
  LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
end;

2.

Список часовых поясов:

Код:
uses Registry;  
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               reg : TRegistry; 
               ts : TStrings; 
               i : integer; 
             begin 
               reg := TRegistry.Create; 
               reg.RootKey := HKEY_LOCAL_MACHINE; 
               reg.OpenKey( 
             'SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones', 
                           false); 
               if reg.HasSubKeys then begin 
                 ts := TStringList.Create; 
                 reg.GetKeyNames(ts); 
                 reg.CloseKey; 
                 for i := 0 to ts.Count -1 do begin 
                   reg.OpenKey( 
               'SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\' + 
                     ts.Strings[i], 
                   false); 
                   Memo1.Lines.Add(ts.Strings[i]); 
                   Memo1.Lines.Add(reg.ReadString('Display')); 
                   Memo1.Lines.Add(reg.ReadString('Std')); 
                   Memo1.Lines.Add(reg.ReadString('Dlt')); 
                   Memo1.Lines.Add('----------------------'); 
                   reg.CloseKey; 
                 end; 
                 ts.Free; 
               end else 
               reg.CloseKey; 
               reg.free; 
             end; 

Чтобы узнать часовой пояс, пользуйся GetTimeZoneInformation().
Какие значения возвращает функция GetTimeZoneInformation()?

Код:
 const TIME_ZONE_ID_UNKNOWN  =  0; 
             const TIME_ZONE_ID_STANDARD =  1; 
             const TIME_ZONE_ID_DAYLIGHT =  2;

А изменить - SetTimeZoneInformation
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием