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

Поиск:

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


Эксперт
****


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

Репутация: 192
Всего: 484



 Постоянно возникает вопрос о проблеме с превращением русских символов в проекте в ?????????.
Не всегда помогает и установка чарсета в RUSSIAN_CHARSET.
Вот сейчас лично столкнулся с данной проблемой.
Как оказалось проблема решается довольно просто.
Корни ее в том, что при запуске на нерусской системе, уникод ресурсов нашей программы переводится в анси, согласно языку, установленному в системе.
Менять настройки системы некультурно.
Поэтому всего лишь нужно заставить нашу программу думать, что она запускается на русской системе.
Делается сия манипуляция элементарно.
1. Открываем наш dpr файл. (главный файл проекта, если кто не знает. Например Project1.dpr)
2. В Uses добавляем Windows.
3. Самой первой строчкой после 'begin' пишем:
Код
SetThreadLocale(1049);

Все. Программа будет культурно работать даже в китайской винде.
Главное не забывать добавлять эту строчку в каждый ваш новый проект.
Новый проект будет выглядеть примерно так:
Код
program Project1;

uses
  Forms, Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  SetThreadLocale(1049);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Далее. У каждой формы нужно сменить Font. MS Sans Serif, поставленный там по умолчанию, не является юникодным шрифтом. Я рекомендую, например Tahoma.
При смене шрифта не забудьте установить Charset в RUSSIAN_CHARSET.
PM MAIL   Вверх
ivan219
Дата 1.2.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 12



Во за это большое спасибо smile
PM MAIL ICQ   Вверх
DemoCode
Дата 2.2.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 41



А если у меня при запуске на нерусской винде все символы (включая английские) превращаются в ?????????. На русской винде всё ок. Твой метод поможет? Или тут что-то другое. (Delphi6)


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Snowy
Дата 2.2.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 192
Всего: 484



Именно. Поэтому я и создал новую тему, чтобы она не терялась.
Достаточно вставить эту строчку и сделать у форм RUSSIAN_CHARSET.
Это лечит все проблемы.
Плюс к этому это решает вообще все проблемы с перекодированием из юникода в ANSI и наоборот.
А это уже затрагивает Delphi 1-7.
Не затрагивает только BDS2006 - там проблем нет изначально.
PM MAIL   Вверх
Quadr0
Дата 2.2.2006, 22:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 10:00
  Вверх
Poseidon
Дата 2.2.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Лучше в FAQ добавить...


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Bog d`An
Дата 5.2.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

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



А фишку с копированием в буфер русских букв при английской расскладке клавиатуры и последующей вставкой ?????? ?? ?????? решает? Вроде там тоже проблемы с перекодированием в ANSI?
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
remax
Дата 5.2.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Просто супер! smile smile


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Snowy
Дата 6.2.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 192
Всего: 484



Цитата(Bog d`An @ 5.2.2006, 22:17 Найти цитируемый пост)
А фишку с копированием в буфер русских букв при английской расскладке клавиатуры и последующей вставкой ?????? ?? ?????? решает? Вроде там тоже проблемы с перекодированием в ANSI?

Решает все проблемы, связанные с автоматическим конвертированием из юникода в анси и наоборот.
С буфером обмена по идее тоже должно все работать.
По крайней мере под WMVare у меня все корректно отработало.
Если кто столкнется с обратным - пишите.
PM MAIL   Вверх
Bog d`An
Дата 16.2.2006, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

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



мда... а я то думал тут чтото новое... Кстати, Snowy, разя я уже тут, спешу порадовать - с буфером обмена, тьфу-тьфу-тьфу, проблема исчезла.
зы: правда я винды переставил
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
ZBugz
Дата 17.2.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



А если в программе реализованна мультиязыковая поддержка, то это не повлияет на отображение других языков ?
PM MAIL   Вверх
Snowy
Дата 17.2.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 192
Всего: 484



Конечно повлияет. Наборы ведь разные.
Причем это НУЖНО делать. Иначе из всех языков будет работать только язык системы.
SetThreadLocale можно давать в любом месте программы. Она изменяет правила процесса юникодных перекодировок.
Для чего она дается в начале программы: чтобы формы при создании поднимали dfm в корректной кодировке.
Но можно дать SetThreadLocale и при смене языка, только код языка указать нужный. 1049 - это русский. Остальные коды можно посмотреть в MSDN или в реестре.
Также при смене языка потребуется сменить чарсет на всех формах.
Это уже сложней. Но что делать. Если этого не сделать, то вы хоть 10 раз выберите японский язык, но в индийской винде он никогда не сработает.
Так что SetThreadLocale и смену чарсета у форм нужно делать обязательно, иначе ваше "многоязыковое" приложение будет корректно отображать язык только в своей винде и только этот язык.
PM MAIL   Вверх
ivan219
Дата 17.2.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 12



А если много окон то возможны глюки так как моё преложение на немецкой винде норамльно отображает только основную форму а все остальные с ?????? и это при том что я зделал всё что ты скозал и RUSSIAN_CHARSET на всех формах и SetThreadLocale(1049); прописал что делать smile
PM MAIL ICQ   Вверх
Snowy
  Дата 17.2.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 192
Всего: 484



У меня в приложении десятки форм. Работают корректно.
Возможные причины:
1. У контролов не стоит ParentFont = true, соответственно не выставлен RUSSIAN_CHARSET.
2. Надписи в контролы добавляются динамически, а не в DisignTime. Ошибка может быть там.
3. Часть проекта (или весь) писалась не в русской винде. Или в русской, но с переключенными юникодными настройками. В данном случае в контролы проекта пропишется неверно закодированный юникод, который при декодировании будет некорректно декодирован. Я имею ввиду, что язык системы, в которой написан проект (или его часть) не 1049.
Что тут можно сделать...
Возьми приаттаченный файлик. При помощи него ты сможешь конвертнуть свои dfm файлы.

Присоединённый файл ( Кол-во скачиваний: 107 )
Присоединённый файл  DFMconv.zip 184,67 Kb
PM MAIL   Вверх
ivan219
Дата 18.2.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 12



1. Всё стоит все контролы RUSSIAN_CHARSET
2. Нет надпись статична один раз написал и всё незименно
3. Всё писалось на одной ОС настройки неменялись лиш иногда менял раскладку клавиатуры Alt+Shift Ру En чтоб писать соответственно русским и английским но это я думаю не влияет

Фаил попробую и напешу о результате спасибо.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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