Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.08.2007, 10:57
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию Два вопроса

Всем привет!
У меня два вопроса:
1. Как опредилить раскладки, которые поддерживает клавиатура и как можно ее поменять;
2. Как узнать часовой пояс.
Заранее большое спасибо!
Ответить с цитированием
  #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

Последний раз редактировалось 4kusNick, 10.08.2007 в 12:09.
Ответить с цитированием
  #3  
Старый 10.08.2007, 12:10
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Большое спасибо, 4kusNick!
Ответить с цитированием
  #4  
Старый 11.08.2007, 20:22
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Хочу немного добавить к ответу 4kusNick.
Не советую слишком увлекаться сменами раскладок. Лично мне не нравятся те программы которые без моего участия переключают раскладки, и думаю что в этом я не одинок.
Ответить с цитированием
  #5  
Старый 11.08.2007, 21:48
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Полностью согласен с Aristarh Dark, но сам чато сталкивался с ситуациями, когда это переключение очень полезно и не надоедает пользователю. Как-то я использовал Grid стороннего разработчика, и там было неудобно реализовано нажатие точек и запятых, точнее, при нажатии на запятую в англ. раскладке она ставилась, а в русской - нет, причем при нажатии именни русской запятой тоже ничего не происходило, тогда мне приходилось менять раскладку на англ. на время изменения чисел в том Grid'е, а сразу при окончании редактирования, включать обратно ту, что была до радактирования, т.о. я добивался удобства ввода точек (запятых) в числах и сам переключал обратно на исходную раскладку, чем не давал пользователю повода для беспокойства =) В общем, да, не стоит забывать о том, что пользвателю может быть не удобно такое переключение, но этого можно избежать, если переключение необходимо лишь на время - переключать в исходное состояние....
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #6  
Старый 13.08.2007, 12:11
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Всем спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter