Модераторы: 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   Вверх
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   Вверх
Fedia
Дата 3.10.2006, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я разобрался. Спросил у более опытного коллеги на работе, он удивился, что я до сих пор не в курсе, как эта проблема устраняется, и рассказал мне вот что:
1. Запускаем regedit.
2. Производим поиск значений параметров, содержащих 1252.
3. Заменяем эти значения на 1251.
4. Перезагружаемся.
5. Проводим тест и радуемся smile


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


Новичок



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

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



Fedia
Цитата(Fedia @  3.10.2006,  04:06 Найти цитируемый пост)
2. Производим поиск значений параметров, содержащих 1252.

Так это стародавняя проблема. Вот не думал, что она и здесь скажется. Но не нужно менять все вхождения 1252 - достаточно  
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\1252 заменить c_1252.nls на c_1251.nls

Цитата(Fedia @  3.10.2006,  04:06 Найти цитируемый пост)
5. Проводим тест и радуемся

Радость омрачается тем, что на других компах скомпиллированные у меня проги ведут себя по прежнему: у кого были ??? - так и остались, у кого было нормально - тоже без изменений.
PM   Вверх
Alexeis
Дата 3.10.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Fedia, Это решение давно извесно и было выложено н форуме, но это не выход. Тем более у него бывают побочные эффекты связаные с использованием других языков. У некоторых установлено по 3 языка и больше, а программа должна нормально функционировать на любой машине. Проблему предлогаю решить установкой локального (внутрипрограмного) перехватчика сообщеня WM_PASTE, который будет ловить сообщения до передачи их соотв. компоненту.


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

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

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


Шустрый
*


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

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



Как я понимаю, проблема так и не решена до конца.
Как же заставить текст правильно копироваться в буфер? Прога, скомпиленная в D6, имеет Memo с установленным RUSSIAN_CHARSET, и строка SetThreadLocale(1049) прописана. Однако, при запуске на 2000 винде скопированный ИЗ ОКНА (а не В ОКНО) программы текст вставляется в блокнот коряво. То же приложение нормально ведет себя на ХР (возможно, дело не в версиях винды, а в локализациях, но это не суть вопроса).
PM   Вверх
mai62
Дата 15.4.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня тоже были проблемы с кодировкой при копировании в буфер.  Где-то нашел такой рецепт, у меня работает.
Код

type

TLangClipboard = class(TClipboard)
private
  procedure SetCodePage(const CodePage: longint);
public
  procedure Open; override;
  procedure Close; override;
end;

implementation

procedure TLangClipboard.Close;
begin
  SetCodePage(LangManager.LanguageID);
  inherited;
end;

procedure TLangClipboard.Open;
begin
  inherited;
  SetCodePage(LangManager.LanguageID);
end;

procedure TLangClipboard.SetCodePage(const CodePage: longint);
var Data: THandle;
    DataPtr: Pointer;
begin
  Data:= GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, 4);
  try
    DataPtr := GlobalLock(Data);
    try
      Move(CodePage, DataPtr^, 4);
      SetClipboardData(CF_LOCALE, Data);
    finally
      GlobalUnlock(Data);
    end;
  except
    GlobalFree(Data);
  end;
end;

initialization

  FClipboard:= TLangClipboard.Create;
  OldClipboard:= SetClipboard(FClipboard);
  if OldClipboard <> nil then OldClipboard.Free;


LangManager.LanguageID - это у меня переключатель языка интерфейса от DKLang.
PM MAIL   Вверх
Alexeis
Дата 15.4.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Romero @  15.4.2007,  11:57 Найти цитируемый пост)
То же приложение нормально ведет себя на ХР (возможно, дело не в версиях винды, а в локализациях, но это не суть вопроса).

  Пробовали при копировании и при вставке текста переключатель языков винды установить в положение "RU"? Это позволяет винде правильно определить таблицу перекодировки юникод -> Ansi. Иначе прийдется перехватывать вставку текста и самостоятельно конвертировать юникод в анси. Это вылечить невозможно, так этими вещами управляет винда, а не сам делфи. Тоже самое происходит, например, и в редакторе от Microsoft Visual C++ 6. Тут лечить нужно программистов Microsoft от криворукости. 


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

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

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


Шустрый
*


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

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



Хм, с RichEdit таких проблем не наблюдается. При этом никаких танцев с бубном, строкой SetThreadLocale(1049) и установкой RUSSIAN_CHARSET не требуется. Странно!
PM   Вверх
Alexeis
Дата 15.4.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Romero, Ну он передает информацию в буфер обмена в формате RTF, где к для каждого символа можно узнать сопроводительную информацию, т.е. шрифт, размер, цвет, абзац, выравнивание, возможно еще и номер таблицы.


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

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

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


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Да, занятная тема ;) В вашем полку прибыло ;) 
Вобщем приведу сразу код:
Код

  procedure TfrmLog.ilmCopyToClipbrdClick(Sender: TObject);
  const
    clrf : String = Char(13)+Char(10);
  var
    Event     : PVSTEvent;
    EventTxt  : string;
    Clipbrd   : TClipboard;
  begin
    Event := vstEventLog.GetNodeData(vstEventLog.FocusedNode);
    if Assigned(Event) then
    begin
      Clipbrd := Clipboard;
      if Assigned(Clipbrd) then
      begin
        with frmAbout do
        begin
          EventTxt := 
               'Application ver.: '+lbAppVerValue.Caption+clrf+
               'Application BuildDate: '+lbBuildDate.Caption+clrf+clrf+
               'Event Information: '+clrf+clrf+
               'Date: '+FormatDateTime('yyy-mmmm-dd',Event.Date)+clrf+
               'Time: '+FormatDateTime('hh:nn:ss:ms',Event.Time)+clrf+
               'Text: '+Event.Event;
        end;
        Clipbrd.AsText := EventTxt;
        FreeAndNil(Clipbrd);
      end;
    end; // Assigned
  end;

Суть этой функции в обработчике попуп-меню окна лога закинуть в буфер обмена выделенное в VTV нод с событием. Как видно из кода, я из формы с эбаутом достаю версию и время билда, он отображается нормально! А вот когда копируется в буфер обмена, то все его русские буквы становятся, даже не вопросами, а какиме-то крякозябрами ;(
Этот же код, на другой ЭВМ отрабатывает на ура, есно после сборки на той машине.

Все что оговаривалось выше не помогает, а правка в реестре мне не подойдет, т.к. я пишу мультиязычную программу. Пока вот хочу попробовать метод от mai62, но вдруг еще какие-нибудь мысли есть?

Это сообщение отредактировал(а) EvilsInterrupt - 13.11.2007, 19:53
PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 13.11.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Все, проблему решил, увидел строки в DRKB:
Цитата

Как вставить русский текст в буфер обмена Windows 2000, Windows XP
 
Для указания языка текста в clipboard используется специальный формат CF_LOCALE. Данные в этом формате - это LocaleID: word. При вставке текста в формате CF_TEXT, или CF_OEMTEXT, нужно просто добавить LocaleID в формате CF_LOCALE, после чего Windows сможет правильно преобразовать имеющийся текст в недостающие форматы (например в CF_UNICODETEXT), да и просто будет корректно вставлен в самом CF_TEXT.

Сразу стало понятно, что товарищь mai62 предложил хороший способ ;) Спасибо
PM MAIL WWW ICQ Jabber   Вверх
WaReZMEN
Дата 14.11.2007, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://forum.vingrad.ru/forum/topic-180473.html

Добавлено через 9 минут и 1 секунду
Цитата(Snowy @  3.2.2006,  04:26 Найти цитируемый пост)
Именно. Поэтому я и создал новую тему, чтобы она не терялась.
Достаточно вставить эту строчку и сделать у форм RUSSIAN_CHARSET.
Это лечит все проблемы.
Плюс к этому это решает вообще все проблемы с перекодированием из юникода в ANSI и наоборот.
А это уже затрагивает Delphi 1-7.
Не затрагивает только BDS2006 - там проблем нет изначально.

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

PM MAIL ICQ   Вверх
aktuba
Дата 14.11.2007, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата(WaReZMEN @  14.11.2007,  02:19 Найти цитируемый пост)
что интересно из 50 компьютеролв тока на одном... 

Может там винда не русская стоит?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
EvilsInterrupt
Дата 14.11.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



aktuba, Можешь подскажешь выход из такой ситуации:
Если у меня выбрана русская раскладка, то в буфер обмена копируется и последующая вставка куда-либо(к примеру сюда в окно поста сообщения на форум), то все отображается отлично и никакой крякозябрины. Но если же я выберу английскую раскладку, то после копирования в буфер и последующей вствки куда-либо(к примеру сюда в окно поста сообщения на форум), то крякозябры ;(

Я конечно догадываюсь,что англичание не должны шарить о существовании русского языка. Но как пользователю же пофиг на это! ;)
Может имеет смысл насильно перекодировать на русский в самом буфере обмена, если конечно выбран русский язык или какой-либо другой, к примеру китайский ?
PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 14.11.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Проблема решена, MetalFan подсказал.
Код

  function TfrmLog.SetClipboardText( const AText: string ): Boolean;
  var
    hClipbrd : THandle;
  begin
    Result := True;
    Clipboard.Open;
    Clipboard.AsText := AText;
    hClipbrd := Clipboard.GetAsHandle(CF_TEXT);
    if hClipbrd = INVALID_HANDLE_VALUE then
       Result := False
    else  SetClipboardData(CF_LOCALE, hClipbrd);
    Clipboard.Close;
  end;

ведь по идее:

PM MAIL WWW ICQ Jabber   Вверх
Ymnuk
Дата 27.7.2009, 19:52 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А подскажите такой момент пожалуста.
Есть сервер с DB2 UDB 8.2. Кодировка стоит 1251 и в программе весь русский отображается прекрасно на всех компьютера без исключений, но есть 2 компа, на которых стоит Novel-клиент. На них весь русский язык отображается нормально, кроме выгрузки данных в Excel. Сам файл-шаблон отображается нормально, а вот выгруженные данные отображаются непонятной кодировкой (я так и не выяснил какая кодировка). При использовании Shell API и выборе директории с русским названием появляется та же непонятная кодировка.
Может кто знает как исправить это в программе?
PM MAIL ICQ Skype   Вверх
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.2655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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