Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы русского языка в проектах Delphi 6-9, Или вопрос о ??????????? 
:(
    Опции темы
Akella
Дата 26.9.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Если в Windows открыть Панель управления, а там апплет "Язык и региональные стандарты", то на закладке "Дополнительно" можно лицезреть кодовую страницу для неюникодных программ. В нешем случае там всегда установлен "Русский (Россия)".

Так вот. Как узнать, какая кодовая страница установлена на данный момент в системе?
Есть примеры в интернете, которые позволяют узнать активный язык(раскладку клавиатуры), но это не то. В какую сторону копать?

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

Var
  Layout: array[0.. KL_NAMELENGTH] of char;
begin
LoadKeyboardLayout(StrCopy(Layout, '00000419'), KLF_ACTIVATE);

А если винда, например, чешская, то нужно активировать чешский язык. Т.е. вместо '00000419' нужно подставить код чешского языка.

Добавлено через 4 минуты и 9 секунд
Цитата(Snowy @  1.2.2006,  19:02 Найти цитируемый пост)
SetThreadLocale(1049);

можно ещё
Код
SetThreadLocale($0419);


Добавлено через 9 минут и 16 секунд
О, нашёл
Код

with SysLocale do
    ShowMessage(Format('DefaultLCID  = %.8x', [DefaultLCID]));

PM MAIL   Вверх
Akella
Дата 26.9.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Теперь при старте программы достаточно выполнить такую процедуру:
Код

procedure SetProgramLocale();
var
 sLocale: string;
begin
  //узнаем кодовую страницу, которая указана в региональных настройках системы для неюникодных программ и устанавливаем для текущей программы
  with SysLocale do
  sLocale := (Format('%.4x', [DefaultLCID]));
  SetThreadLocale(StrToInt('$'+ sLocale));
end;

PM MAIL   Вверх
PsiMagistr
Дата 11.8.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Я вот свою игрушку отюникодить пытаюсь. Пока безрезультатно.  Проверять приходится перестройкой Windows с Russian на любую другую кодировку. Выходит много чего, от ошибок баз, до неверных отображений символов (вопросы)

Версия: Delphi XE

Используются компоненты для работы с БД (AdoTable, AdoQuery)

Используются динамически создаваемые контролы.


Это сообщение отредактировал(а) PsiMagistr - 11.8.2011, 09:45


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Akella
Дата 11.8.2011, 09:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



И в чём вопрос?
PM MAIL   Вверх
PsiMagistr
Дата 11.8.2011, 09:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Akella, да вопрос прост. 

как ее заюникодить все-таки?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
CodeMonkey
Дата 12.8.2011, 01:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(PsiMagistr @  11.8.2011,  10:41 Найти цитируемый пост)
как ее заюникодить все-таки? 


У меня встречный вопрос: а как вы умудрились сделать обратное?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 12.8.2011, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(PsiMagistr @  11.8.2011,  09:41 Найти цитируемый пост)
как ее заюникодить все-таки? 

Что именно и откель юникодить?
PM MAIL   Вверх
PsiMagistr
Дата 12.8.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Мне нужен русский интерфейс на любой винде.

Ваши предложения, господа.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Alexeis
Дата 12.8.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



PsiMagistr напрягая телепатические возможности предположу что у вас таблицы в БД в Ansi кодировке и осуществляется преобразование Ansi -> Unicode с неправильной таблицей символов, точнее говоря с кодовой таблицей по умолчанию, которая может не совпадать с кириллической. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
PsiMagistr
Дата 12.8.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Alexeis, И каков выход?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Keeper89
Дата 12.8.2011, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Перевести все на юникод.


--------------------
PM MAIL WWW   Вверх
CodeMonkey
Дата 12.8.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(PsiMagistr @  12.8.2011,  15:34 Найти цитируемый пост)
Мне нужен русский интерфейс на любой винде.


А русский шрифт-то на этой винде есть?

Добавлено через 5 минут и 24 секунды
Цитата(PsiMagistr @  12.8.2011,  15:34 Найти цитируемый пост)
Ваши предложения, господа. 


Какие могут быть предложения?

Вам же сказали, что Delphi 2009 и выше (включая Delphi XE) ситуация по умолчанию: ваша программа одинаково работает на любой системе. При условии, что в системе стоит шрифт с кириллицей. Скажем, unicode-шрифт.

Если же у вас не так - это значит, что вы у себя в коде что-то делаете не так.

Внимание, вопрос: КАК мы можем это знать?

Мы можем лишь угадывать, чем (гаданием) и занимается Alexeis в своём последнем посте.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Alexeis
Дата 12.8.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(CodeMonkey @  12.8.2011,  21:26 Найти цитируемый пост)
При условии, что в системе стоит шрифт с кириллицей. Скажем, unicode-шрифт.

  Да вроде как шрифты по умолчанию и так юникодные. 

  Если такие дело в БД, то наилучшим решением будет конвертация таблиц в utf8. Так чтобы при загрузке строк не требовалось кодовых таблиц. Если такое решение не подходит то пробуйте приведенный выше вариант с SetThreadLocale . 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CodeMonkey
Дата 12.8.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата
 Да вроде как шрифты по умолчанию и так юникодные. 


На старых системах Unicode шрифты ставились только с офисом или расширенной поддержкой символов. Т.е. по дефолту их может не быть.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 13.8.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(PsiMagistr @ 12.8.2011,  14:34)
Мне нужен русский интерфейс на любой винде.

Ваши предложения, господа.

Использовать юникодную среду разработки D2009+ или Юникодные компоненты, aka TNT или TMS

Добавлено @ 20:19
Цитата(Alexeis @ 12.8.2011,  16:00)
PsiMagistr напрягая телепатические возможности предположу что у вас таблицы в БД в Ansi кодировке и осуществляется преобразование Ansi -> Unicode с неправильной таблицей символов, точнее говоря с кодовой таблицей по умолчанию, которая может не совпадать с кириллической.

Использовать нормальные СУБД, а не какую-то там недоСУБД.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0936 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.