Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Русская раскладка в D2010 [WinXP]


pvr ©   (2010-08-07 18:57:00) 

В D2006 и более ранних версиях я писал:

 ActivateKeyboardLayout(LoadKeyboardLayout('00000419', 0), 0);

В результате приложение работало с активной русской раскладкой. Если создавалось диалоговое окно, то и в нём автоматически была русская раскладка.

В D2010 при создании главного окна я вновь выполняю тот же оператор, и раскладка становится русской. Беда в том, что в созданных диалогах раскладка английская. Более того, как я ни пытался применить свой оператор в разных обработчиках событий, раскладка не переключалась, а при закрытии диалога в главной форме остаётся английская раскладка.

Как победить эту напасть?


pvr   (2010-08-10 22:03:00) [1]

Что-то, кроме примера, придуманного ИШ, ничего больше гладко не работает. Одно утешение - проект, подправленный для D2010, без единого изменения компилируется и в D2006. А там всё работает, как ожидается.

Спасибо за сочувствие.


pvr   (2010-08-09 21:39:00) [2]

Спасибо, Игорь. Я не догадался создать с нуля.

В моём случае на самом деле диалог наследуется. Кроме того, в нём фреймы. Попробую завтра, на каком этапе перестаёт работать "наследование" раскладки.


Игорь Шевченко   (2010-08-09 21:12:00) [3]


> Может, ещё будет какое предложение?


unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfMain = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation

uses DialogForm;

{$R *.dfm}

procedure TfMain.Button1Click(Sender: TObject);
begin
 with TfDialog.Create(Self) do
   try
     ShowModal;
   finally
     Free;
   end;
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 ActivateKeyboardLayout(LoadKeyboardLayout('00000419', 0), 0);
end;

end.


unit DialogForm;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfDialog = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
 end;

implementation

{$R *.dfm}

end.


В созданном диалоге в Edit1 вводятся русские буквы

D2010


pvr   (2010-08-09 19:54:00) [4]

Короче, проверка возвращаемых значений не помогла. И без проверки раскладка в диалоге становилась английской, и с проверкой, которую предложил Игорь, она тоже становится английской.

Может, ещё будет какое предложение? Я с благодарностью рассмотрю.


pvr   (2010-08-09 19:48:00) [5]

Кстати, в 2006-м в обработчике FormCreate диалога фукции LoadKeyboardLayout и ActivateKeyboardLayout возвращают те же значения $4190419 и $4190419. Но там мне и не приходилось их вызывать, потому что в диалоге оставалась русская раскладка.


pvr   (2010-08-09 19:28:00) [6]

Ну, если кому ещё интересно, то обработчике FormCreate диалога LoadKeyboardLayout возвращает $4190419, а ActivateKeyboardLayout тоже возвращает $4190419.


pvr   (2010-08-09 19:11:00) [7]

Функция LoadKeyboardLayout возвращает, как ей и положено, $4190419, а функция ActivateKeyboardLayout возвращает, как ей и положено, $4090409.
После их выполнения раскладка становится русской.

Когда же я создаю диалоговое окно, раскладка становится английской. Вопрос и состоит в том, как сделать, чтобы раскладка в диалоге оставалась русской.


  (2010-08-09 19:07:00) [8]

Удалено модератором


Anatoly Podgoretsky   (2010-08-09 19:06:00) [9]


> Я проверяю.

Врешь.


Palladin   (2010-08-09 17:44:00) [10]


> Я проверяю.

Никто здесь не видит что ты проверяешь и как ты проверяешь. Что вернула функция LoadKeyboardLayout ? А функция ActivateKeyboardLayout ?


12   (2010-08-09 17:41:00) [11]

To get extended error information, use the GetLastError function.


Smile   (2010-08-09 17:35:00) [12]

Тебя не просят рассказать, о том что в диалоговом окне раскладка становится английской, а советуют анализировать код возврата функции. Но похоже, что это напоминает разговор слепого с глухонемым
:(


pvr   (2010-08-09 17:32:00) [13]

Я проверяю. В главном окне всё так же, как и в D2006. Но когда создаю диалоговое окно, раскладка становится английской.


Palladin   (2010-08-09 17:11:00) [14]

Тебе посоветовали проверить значения возвращенные функциями. Что тут уморительного-то?


pvr   (2010-08-09 17:09:00) [15]

У кого-нибудь есть соображения?


pvr   (2010-08-09 16:12:00) [16]

Ну, уморил Игорь! Как бы сделал вид, что... как бы ответил...


Игорь Шевченко   (2010-08-07 19:31:00) [17]

как бы каждая из перечисленных функций имеет возвращаемое значение...его как бы неплохо проверять...


Наверх

Титульная страница Поиск, карта сайта Написать письмо