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

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

Поддержка русского языка только в моей программе


Ping-Pong ©   (2007-01-29 23:25:00) 

Delphi не поддерживает Юникод. Устанавливать для текущего пользователя "Язык программ, не поддерживающих Юникод" в настройках системы вручную - проблематично. Пользователь может установить свой язык, и возмущаться по поводу неправильной работы моей программы.

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


Ping-Pong   (2007-01-30 21:14:00) [1]

У меня и так компонентов своих больше 100 штук в проекте.
То есть, повторюсь, я не буду использовать сторонние компоненты.

Ладно, можно считать обсуждение закрытым.


GrayFace   (2007-01-30 20:13:00) [2]

Ну, можно самому загружать строки из файла... У меня в прогах основной язык - английский, а другие берутся из Language.txt. См. RSLang в http://www.delphimaster.ru/cgi-bin/forum.pl?id=1169883926&n=3
C MessageBox'ами, конечно, придется использовать W-версию (или MessageBoxEx?).


Ping-Pong   (2007-01-30 18:39:00) [3]

Значит надо твою программу заставить поддерживать юникод

Уже понял, что другого решения нет.
Сижу, компоненты правлю. Хорошо хоть большинство самописные.
Работы!...


Плохиш   (2007-01-30 18:27:00) [4]


> Ping-Pong   (30.01.07 18:18) [12]

Значит надо твою программу заставить поддерживать юникод. Извини, если не прав.


Ping-Pong   (2007-01-30 18:18:00) [5]

Если юзер на своей (не русской) оси ставит для "Юникод" не русский, значит ему нафиг не нужна твоя прога

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

У юзера стоит еще Квик-букс английская, и еще разные приложения. И под "Юникод -> Русский" у него вместо символов валют выводятся знаки вопроса (то есть, то же, что и для русских букв при нерусских настройках). С одной стороны - моя программа, с другой стороны - другие программы. Как решить проблему? Перезагружаться, каждый раз меняя язык? Гы...


iXT   (2007-01-30 18:05:00) [6]

Если юзер на своей (не русской) оси ставит для "Юникод" не русский, значит ему нафиг не нужна твоя прога


alex_***   (2007-01-30 17:57:00) [7]

ну хз тогда :(


Ping-Pong   (2007-01-30 16:45:00) [8]

а СHARSET в фонте русский поставил?

Естественно. Только, прежде чем фонтом выводить на канву, система преобразовывает юникод-строку в анси-строку, где и появляются проблемы. То есть, до фонта дело не доходит.


alex_***   (2007-01-30 16:39:00) [9]

а СHARSET в фонте русский поставил?


Ping-Pong   (2007-01-30 15:50:00) [10]

Ресурсы в юникоде же лежат...

Выводятся они потом как простые анси-строки. А для этого - преобразуются в фоновом режиме (кем? ОС?) из юникода в анси-строки. И под ОС с настройками "не-русскими" отображаются "?????", потому что алгоритм преобразования тупит, и не понимает, в какой язык преобразовывать (ну, тут кто угодно ступил бы). Вот, как заставить эти внутренние механизмы ОС производить преобразования строк из Юникода в анси-строки (и наоборот), учитывая, что строки эти - на русском языке? То есть, я хочу сказать операционной системе, что моя программа работает на русском языке, в Win-кодировке. Как это сделать?


alex_***   (2007-01-30 12:38:00) [11]

а что значит писала по-русски? Ресурсы в юникоде же лежат... Чтобы MessageBox по-русски был?


ЮЮ   (2007-01-30 12:33:00) [12]


> Хотелось бы обойтись стандартными средствами, без использования
> сторонних компонентов.


Тогда можно:
1) ограничиться компонентами, имеющими обработчики типа OnDrawXXX, где использовать виндовозные функции для WideString, т.е., например, не TextOut[A], а TextOutW
2) в программе использовать не String, а WideString
3) использовать Unicodный шрифт

Посли таких извращений программа писала по-русски на японской Win98


Ping-Pong   (2007-01-30 12:12:00) [13]

Хотелось бы обойтись стандартными средствами, без использования сторонних компонентов.


Плохиш   (2007-01-30 11:28:00) [14]

tntlib


Ping-Pong   (2007-01-30 11:14:00) [15]

Неужели нет решения?


Ping-Pong   (2007-01-30 09:03:00) [16]

Нашел SetThreadLocale(), но она, почему-то, не работает.


Наверх

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