Форум по 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.
При выборе в нем, раскладка меняется.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;

Как программно переключить раскладку клавиатуры
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//На русский
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.

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()?

Код:
1
2
3
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,907
Версия 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, время: 09:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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