Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 17:35   #1
abtat
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Плохо Сброс в язык по умолчанию при выходе из DBGrid

Приложение на С++ Builder 2010 должно работать с использованием двух языков (рус и engl), причем машины разных пользователей могут иметь разную раскладку клавиатуры по-умолчанию. Столкнулся с тем, что при клике на DBGrid для выбора нужной альтернативы, программа сваливается к раскладке по-умолчанию, что очень неудобно для пользователей. На разных форумах эта проблема упоминается, но ничего лучше, чем предложение переписывать DBGrid, я не нашел.
Может быть кому-либо удалось с этим справиться?
abtat вне форума Ответить с цитированием
Старый 13.03.2012, 10:42   #2
Bit_Man
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 29
По умолчанию Ставь где надо. Обычно OnEnter

Код:
//---------------------------------------------------------------------------
void SetRu()
{
    char sLayout[KL_NAMELENGTH];
    //Выясняем клавиатурную раскалдку
    GetKeyboardLayoutName(sLayout);
    //Если не РУ ставим РУ
    if (atoi(sLayout) != 419) LoadKeyboardLayout("00000419",KLF_ACTIVATE);
}
//---------------------------------------------------------------------------
void SetEng()
{
    char sLayout[KL_NAMELENGTH];
    //Выясняем клавиатурную раскалдку
    GetKeyboardLayoutName(sLayout);
    //Если не Eng ставим Eng
    if (atoi(sLayout) != 409) LoadKeyboardLayout("00000409",KLF_ACTIVATE);
}
//---------------------------------------------------------------------------

Последний раз редактировалось ACE Valery; 13.03.2012 в 20:09.
Bit_Man вне форума Ответить с цитированием
Старый 19.03.2012, 12:32   #3
abtat
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
По умолчанию void SetRu()

Процедуры работают, но это не то, что нужно. Мне нужно не установить русскую или английскую раскладку, а сохранить ту раскладку, которая была установлена в DBGrid перед выходом из нее.
Экспериментом установлено, что раскладка сбрасывается на умолчание при любом выходе из DBGrid, как и при установке фокуса на другой объект, так и при смене видимости панели.
Цель долстигнута, если в каждую процедуру, завершающую работу с каждой DBGrid вставить первым оператором получение имени раскладки, а последним - ее восстановление. Проверять, изменилась ли раскладка, нет смысла. Поскольку таких вставок будет много, переменную OldLayout стоит объявить в глобальных переменных.
void __fastcall TKBLayoutForm1::DBGrid1DblClick(TOb ject *Sender)
{
char OldLayout[9];
GetKeyboardLayoutName(OldLayout);
Panel2->Visible = false;
Panel1->Visible = true;
ClickCheckEdit->SetFocus();
LoadKeyboardLayout(OldLayout, KLF_ACTIVATE);
}
Считаю мой вопрос закрытым.
abtat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подтверждения при выходе из программы Ayubkhon Общие вопросы Delphi 18 18.06.2013 00:53
Ошибка при выходе из программы Warn Общие вопросы Delphi 3 07.11.2011 16:16
Зависание программы при выходе codermoder Работа с сетью в Delphi 6 18.12.2010 23:16
Ошибка при выходе из игры cs 1.6 pavel42 Компьютерное железо 19 20.10.2009 21:00