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

Поиск:

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


Опытный
**


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

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



Цитата(Snowy @  1.2.2006,  19:02 Найти цитируемый пост)
Корни ее в том, что при запуске на нерусской системе, уникод ресурсов нашей программы переводится в анси, согласно языку, установленному в системе.

Практически было установлено, что если в настройках системы установлен английский язык для программ, не поддерживающих юникод, то ни один из этих способов не помогает. Проверено на WinXP SP2 Rus с измененными настройками, BDS2006 Update 2. 
PM MAIL WWW   Вверх
Snowy
Дата 17.5.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(s-mike @  17.5.2006,  10:55 Найти цитируемый пост)
Проверено на WinXP SP2 Rus с измененными настройками, BDS2006 Update 2.
Я и не говорил, что этот способ работает для BDS2006.
В заголовке темы указаны версии с 6-9.
С 7-кой проверял на виндах с 98 по 2005. Работает отлично.
2006 еще не исследовал. Все еще работаю на 7-ке.
Возможно там можно будет найти другое решение. 
PM MAIL   Вверх
s-mike
Дата 17.5.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Моя реплика относится к этой фразе:
Цитата(Snowy @  2.2.2006,  20:26 Найти цитируемый пост)
Не затрагивает только BDS2006 - там проблем нет изначально. 

Хотя насколько я помню в этой версии проблем с языками стало меньше, но не помню точно в каком месте smile Но вот от неправильных юникодных настроек она, увы, не спасает. 
PM MAIL WWW   Вверх
forever
Дата 14.9.2006, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Snowy @  17.5.2006,  11:12 Найти цитируемый пост)
2006 еще не исследовал. Все еще работаю на 7-ке.
Возможно там можно будет найти другое решение. 

Не нашлось пока решения?

Использую Delphi 10Lite. Такая проблема: копирую в проводнике путь к файлу, вставляю в стандартный TEdit - кириллица заменяется на ????.
RUSSIAN_CHARSET и SetThreadLocale(1049) ничего не дают. В остальном проблем с русским нет.
Как побороть вставку?
PM   Вверх
Alexeis
Дата 14.9.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(forever @  14.9.2006,  06:23 Найти цитируемый пост)
RUSSIAN_CHARSET и SetThreadLocale(1049) ничего не дают

Так эти настройки должны относится к делфи, а не проекту, ведь редактор их коряво отображает. Обычно, перед копированием переключают раскладку на "RU" анолгично при вставке, после чего текст уже проблемы исчезают smile 


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

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

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


Новичок



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

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



alexeis1
Цитата(alexeis1 @  14.9.2006,  07:45 Найти цитируемый пост)
Так эти настройки должны относится к делфи, а не проекту, ведь редактор их коряво отображает.

Юзеру на это с высокой колокольни.


Цитата(alexeis1 @  14.9.2006,  07:45 Найти цитируемый пост)
 Обычно, перед копированием переключают раскладку на "RU" анолгично при вставке, после чего текст уже проблемы исчезают

1. Если попробовать последовать сказанному - результат ничтожен.
2. Даже если бы так было - как объяснить юзеру что он должен танцевать с бубном и как ответить на его здоровое недоумение "зачем?". Ведь в тот же Блокнот все вставляется нормально - почему здесь криво?
PM   Вверх
Alexeis
Дата 14.9.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



forever, а все это я неправельно понял, я думал проблема при копировании текста в редактор кода делфи, просто и такая тоже встречается...

Добавлено @ 09:08 
Так это и на семерке тоже не помогает, тот же глюк.


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

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

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


Новичок



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

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



alexeis1
Цитата(alexeis1 @  14.9.2006,  09:04 Найти цитируемый пост)
Так это и на семерке тоже не помогает, тот же глюк.

Хм... У меня есть 7-е приложения (не мои) где это работает. В них тот же самый текст из буфера вставляется нормально, без ???. Исходников не имею, но авторы ссылаются именно на способ описанный здесь.
PM   Вверх
Alexeis
Дата 14.9.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



forever
Попробуйте вставлять текст из буфера обмена нажатием кнопки
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetThreadLocale(1049);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  count, i   : Integer;
  formatlist : array of Integer;
  wstr       : PWideChar;
  astr       : PAnsiChar;
  format     : Cardinal;

begin
  OpenClipboard(edt1.Handle);
  count := CountClipboardFormats();
  SetLength(formatlist, count);
  formatlist[0] := EnumClipboardFormats(0);
  For i := 1 to count - 1
  do
    formatlist[i] := EnumClipboardFormats(formatlist[i-1]);

  format := GetPriorityClipboardFormat(formatlist[0], count);

  if format = CF_UNICODETEXT
  then
    Begin
      wstr := PWideChar(GetClipboardData(format));
      edt1.Text := wstr;
    end
  else
    Begin
      astr := PAnsiChar(GetClipboardData(format));
      edt1.Text := astr;
    end;

  CloseClipboard();
end;


Добавлено @ 10:56 
У меня сработало, если сработает и у вас, то можно будет сделать перехват
WM_TEXT всего приложения с тем чтобы исправить эту проблему для всех полей ввода сразу.


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

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

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


Амеба
Group Icon


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

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



Кстати эту проблему действительно надо решать вручную, поскольку это глюк windows а не борланд! Я только что проверил вставку того же текста в поле едит созданое на MFC абсолютно тот же эффект, просто сам windows контрол edit не верно обрабатывает сообщение WM_PASTE, т.е. не верно конвертирует юникодную строку в ansi строку, вероятно он не использует для этого настройки локализации.

Добавлено @ 11:47 
От этой проблемы изначально избавлены юникодные версии контролов
Например вот такой Едит отлично вставляет русский текст
Код

  CreateWindowExW(WS_EX_CLIENTEDGE, 'edit',
                  nil, WS_CHILD or WS_VISIBLE or WS_BORDER or
                  ES_LEFT or ES_AUTOHSCROLL,
                  50, 35, 200, 25,
                  Form1.Handle, 1, HInstance, nil);



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

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

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


Эксперт
****


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

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



SetThreadLocale(1049) это также WinAPI комманда, а не борланда.
Мы говорим винде, что для юникодной конвертации мы хотим использовать русскую локаль.
В этом и смысл данной строки.

Замечено: если приложение использует XP манифест, то используется локаль, указанная там.
По умолчанию - это локаль 0 - нейтральная.
Пока этот вопрос не исследовал.

Я может ещё не проснулся, но не пойму о чём спор...
PM MAIL   Вверх
Alexeis
Дата 14.9.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



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


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

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

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


Новичок



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

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



Цитата(forever @  14.9.2006,  06:23 Найти цитируемый пост)
Такая проблема: копирую в проводнике путь к файлу, вставляю в стандартный TEdit - кириллица заменяется на ????.
RUSSIAN_CHARSET и SetThreadLocale(1049) ничего не дают. В остальном проблем с русским нет.
Как побороть вставку?

Тут такой полтергейст проявился: у товарища D7 и XP SP1, у меня D10 и XP SP2. Компилю прогу - в эдитах кириллица вставляется как ??????, отправляю exe ему - у него на системе кириллица вставляется в эдиты без проблем (в скомпиллированном у меня exe!). Неразбериху вносит обратный эксперимент: в скомпиллированный у него exe и у меня кириллица вставляется нормально. Где копать?
PM   Вверх
Fedia
Дата 2.10.2006, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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



Цитата(forever @  2.10.2006,  02:28 Найти цитируемый пост)
ут такой полтергейст проявился: у товарища D7 и XP SP1, у меня D10 и XP SP2. Компилю прогу - в эдитах кириллица вставляется как ??????, отправляю exe ему - у него на системе кириллица вставляется в эдиты без проблем (в скомпиллированном у меня exe!). Неразбериху вносит обратный эксперимент: в скомпиллированный у него exe и у меня кириллица вставляется нормально. Где копать?

У меня точно такая же проблема. Глюк с искажением текста при копировании в буфер происходит на скомпилированных на моем рабочем ПК проектах. Причем если проект скомпилирован у меня, то искажение происходит на всех ПК. Если проект компилируется у моего коллеги, то проблем c искажением текста нет ни на одном ПК.

Цитата(alexeis1 @  14.9.2006,  11:39 Найти цитируемый пост)
это глюк windows а не борланд!

Скорее вcего так, вопрос в том, имеется ли возможность этот глюк преодолеть ?


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2006, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Fedia, я же привел рабочий код вставки из буфера обмена от http://forum.vingrad.ru/index.php?showtopi...;st=15&hl=#
Напишите наследника в котором переопределена обработка WM_PASTE.

Либо пишите на апи с использованием юникодных компонентов


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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