Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Проблеммы с кодировкой   Найти похожие ветки 

 
Ertong ©   (2004-08-24 20:40) [0]

Вот поставил себе английский XP(раньше был русский). Теперь в почти всех моих формах вместо нормально русского текста на кнопках я вижу знаки вопроса. В одном журнале читал, что это решается изменением в реестре нескольких ключей. Это сработало. Но как будет работать моя программа у других пользователей. Я ж не могу править реестр в программе, т.к. может не быть администраторских прав. И потом, другие программы  работают нормально без исправления. Как избежать таких неприятностей?

P.S. Исходники DMClient"a владеют такими же проблемами. Но скачаный бинарник пашет без проблем.


 
YurikGL ©   (2004-08-24 20:46) [1]

Локализовывать или ставить MUIpack


 
Ertong ©   (2004-08-24 21:25) [2]


> Локализовывать или ставить MUIpack

Но ведь другие программы пашут, я тоже хочу :)


 
YurikGL ©   (2004-08-24 21:45) [3]

Попробуй пользовать разные шрифты, потом настроек шрифтов дофигища.


 
Ertong ©   (2004-08-24 22:04) [4]

Пробовал.
Это не то :(
Заголовки окон - системные шрифты. А в них тоже баги.


 
Piter ©   (2004-08-24 23:16) [5]

Ertong ©   (24.08.04 20:40)

попробуй моего клиента - http://www.piter.pechora.org

Я там кое чего делал, по идее какая бы винда не была (если она win"2000 и выше), большинство текста должно отображаться по русски. Я не переделал только подсказки и заголовки окон.

Ertong ©   (24.08.04 20:40)
Но скачаный бинарник пашет без проблем


а-а-а. Так в DMClient все нормально отображается? Тогда проще, просто выставляй у своих контролов font.charset русский, вот и все...


 
Ertong ©   (2004-08-25 01:22) [6]


> а-а-а.

Вот тут то и пироги. Скачаный ехешник нормально пашет. А если скачать сырцы и откомпилить то одни "вопросы". Почему?


> Я там кое чего делал

Если не секрет, то что именно?


 
Piter ©   (2004-08-25 01:34) [7]

Ertong ©   (25.08.04 1:22) [6]
А если скачать сырцы и откомпилить то одни "вопросы". Почему?


ну не знаю. В D7 пофигу где компилить, наверное особенности IDE D6... или какой ты там используешь...


 
Piter ©   (2004-08-25 01:34) [8]

Ertong ©   (25.08.04 1:22) [6]
Если не секрет, то что именно?


ну я так не помню... VCL правил, в общем


 
Германн ©   (2004-08-25 03:58) [9]

2 Ertong ©   (24.08.04 20:40)

Если не о чем не заботиться, то в настройках всех шрифтов указана кодировка "DEFAULT_CHARSET". Ответь, пожалуйста, на вопрос - какой шрифт является "основным" в русской версии окон, а какой в английской?!

Теперь вопрос: А что ты хочешь?


 
nikkie ©   (2004-08-25 13:51) [10]

>Исходники DMClient"a владеют такими же проблемами. Но скачаный бинарник пашет без проблем.
оч интересно. а чем ты компилируешь?


 
wicked ©   (2004-08-25 13:59) [11]


> В одном журнале читал, что это решается изменением в реестре
> нескольких ключей. Это сработало.

хых, любители реестр править... это решается через
Control Panel - Regional and Language Options - Advanced - Language for non-Unicode programs... выставляется нужный язык и вуаля... :)
кстати, возможно, что это и есть ответом на [9]...


 
Piter ©   (2004-08-25 14:07) [12]

wicked ©   (25.08.04 13:59) [11]
хых, любители реестр править... это решается через
Control Panel - Regional and Language Options - Advanced - Language for non-Unicode programs


но есть и другие случа. Человек, например, работает в Германии :) И у него там стоит немецкий. А при этом он еще и исользует русские программы...


 
Sergey Kaminski ©   (2004-08-25 14:30) [13]

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

Я начинал программировать во времена ДОС (Borland Pascal, Turbo Pascal). После этого вместе со всеми перешел на Win 3.1., писал сначала на VB, после на Turbo Pascal for Win, также BC++.
Потом пошло-поехало. Win95, 98 (и русская и англ), NT 4 (то же самое). Сейчас основные машины, на которых происходит компиляция - Win2k & XP - английские, без МУИ всяких. Все программы, поступавшие в обиход имели русский интерфейс. Запускались на всевозможных машинах.

И Я НИ РАЗУ не имел сабжевых проблем. Ни разу не занисался извращением и не правил RTL. и т.п.

Нет, имел один раз и недавно. Одно диалоговое окно на машине с _РУССКИМ_ ХР показало кракозябры. Посмотрел в исходник - да, моя криворукость виновата. Случайно поменял CharSet на HEBREW_CHARSET или что-то в этом роде. Исправил. ВСЕ.

ЭТО НЕ ПРОБЛЕМА ПРОГРАММИСТА: на таргет-машине ДОЛЖНА быть нормально настроена русская локаль, ДОЛЖНЫ быть нормальные русские шрифты, если они хотят запускать русские программы. Пусть это хоть финская версия винды. ВСЕ.


 
wicked ©   (2004-08-25 14:33) [14]


> но есть и другие случа. Человек, например, работает в Германии
> :) И у него там стоит немецкий. А при этом он еще и исользует
> русские программы...

и если он в Control Panel исправит язык на русский, то немецкие программы кракозябрами поплывут?... ну максимум что будет - пару умляутов не увидит...
а вообще то это касается только не-юникодовских программ... с остальными всё ок...


 
wnew ©   (2004-08-25 14:33) [15]

Sergey Kaminski ©   (25.08.04 14:30) [13]
100% верно!


 
Sergey Kaminski ©   (2004-08-25 14:35) [16]

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


 
wnew ©   (2004-08-25 14:36) [17]

wicked ©   (25.08.04 14:33) [14]

> ну максимум что будет - пару умляутов не увидит

Умляуты будут заменены русскими символами. В том числе, иногда, и в файловой системе. А это уже, согласитесь, - чревато.


 
Sewix   (2004-08-25 14:42) [18]

Надо было при установки XP выбрать подтержку русского языка. Там где языки и стандарты(не помню как по английски). У меня уже год английсая xp все программы корректно отображают русский текст.


 
wnew ©   (2004-08-25 14:48) [19]

Sergey Kaminski ©   (25.08.04 14:35) [16]
Винды то юникодовые, но к сожалению, сама Delphi не поддерживает Unicode, хотя есть выход - TntControl компоненты. Правда сохраняется некоторые неудобства: если в среде Delphi создавать русскоязычные приложения под не руссколокализованным Windows - в редакторе кода не возможно писать на русском. В этом случае приходится извращаться - печатать в каком-нибудь другом редакторе и потом копировать в дельфийский, после чего там будет отображено кракозябрами, но при запуске приложения - всё Ок, если конечно использовались компоненты, поддерживающие Unicode. Хотя, к примеру, родные делфийские TMemo, TBitBtn, TEdit и, наверное, ещё некоторые могут корректно отображать кириллицу. А вот TRichEdit, хотя и имеет общего предка с TMemo - никак не желает работать с кириллицей.


 
wicked ©   (2004-08-25 15:29) [20]

> wnew ©   (25.08.04 14:36) [17]

> Умляуты будут заменены русскими символами. В том числе,
> иногда, и в файловой системе.

хм... специально вчера ставил опыт (звонил знакомый - точно такая же проблема):
1. создал в фаре (он не юникодовый) файл с кирилическим названием...
2. поменял локаль на английскую...
3. поглядел в фаре на название - оно отобразилось знаками вопроса (русские надписи в фаре - кракозябрами, как и ожидалось) и файл при этом не открывался... в експлорере, напротив, всё было как и надо - кириллическое имя файла...
4. поменял локаль на русскую - всё вернулось на свои места...

отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами...
или я где-то неправ?...


 
wicked ©   (2004-08-25 15:48) [21]

тест невидимых сообщений - можно удалить...


 
GrayFace ©   (2004-08-25 15:48) [22]

Sergey Kaminski ©   (25.08.04 14:30) [13]
После этого вместе со всеми перешел на Win 3.1.,

Sergey Kaminski ©   (25.08.04 14:30) [13]
И вообще, ошибки программ - НЕ ПРОБЛЕМА ПРОГРАММИСТА: на таргет-машине ДОЛЖНЫ быть установлены всякие дебаггеры и дизасемблеры, если они хотят запускать хоть какие-то программы.
Sergey Kaminski ©   (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?

А проги остались АНСИшными.
Это для меня загадка вроде той, почему человек, начинающий программировать, в первую очередь хочет "круглые кнопки" и в трей запуздыривать...
Стремление к прекрасному :)

wicked ©   (25.08.04 15:29) [20]
> или я где-то неправ?...

Ты не прав в [15].


 
Sergey Kaminski ©   (2004-08-25 15:56) [23]

GrayFace ©   (25.08.04 15:48) [22]

Если китаец хочет, чтобы его китайская программа работала на твоей машине, он вправе расчитывать на то, что у тебя как-минимум установлены китайские шрифты. И нормально настроена система а не "реестр править".

Стремление к прекрасному :)

У всех свое представление о прекрасном. В мои представления о прекрасном, например, "круглые кнопки" не входят.


 
Piter ©   (2004-08-25 16:15) [24]

Sergey Kaminski ©   (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?


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

Да и VCL Unicode не поддерживает.


 
Piter ©   (2004-08-25 16:18) [25]

wicked ©   (25.08.04 15:29) [20]
отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами


а вот это интересный вопрос...

Sergey Kaminski ©   (25.08.04 15:56) [23]
он вправе расчитывать на то, что у тебя как-минимум установлены китайские шрифты


конечно. Но он не вправе требовать, чтобы у него локаль была установлена как тебе хочется. В идеале программа вообще должна запускаться корректно на какой хочешь системе (unicode"овой).


 
Sergey Kaminski ©   (2004-08-25 16:21) [26]

Piter ©   (25.08.04 16:15) [24]

Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ.


 
Sergey Kaminski ©   (2004-08-25 16:23) [27]


В идеале программа вообще должна запускаться корректно на какой хочешь системе


Не поверишь, так оно и есть.


 
wnew ©   (2004-08-25 16:41) [28]

wicked ©   (25.08.04 15:29) [20]

> отсюда напрашивается вывод, что имена фалов в
> юникодовых системах (win2k, winXP) хранятся в юникоде,
> даже если они были созданы не-юникодовыми
>программами...
> или я где-то неправ?...

Да, где-то не прав. Всё дело в том, что проводник в Win9x и тем более в новых Windows может отображать имена файлов обозванных по русски совершенно корректно. Но! Попробуй, используя TTreeView и TListView, вывести корректно дерево файлов в этих компонентах, разумеется, на не русском Windows (имею в виду региональные настройки). Даже, если исползовать COM интерфейс и информацию о файловой системе вытягивать прямо из именного файлового пространства Windows - ничего кроме знаков вопрса не получишь. А вот, если использовать TntControl компоненты - то всё в полном ажуре.


 
GrayFace ©   (2004-08-25 17:53) [29]

>Sergey Kaminski ©   (25.08.04 14:30) [13]
> После этого вместе со всеми перешел на Win 3.1.,

Это я хотел сказать, что далеко не все переходили на Win3.1


 
GrayFace ©   (2004-08-25 18:00) [30]

Sergey Kaminski ©   (25.08.04 15:56) [23]
> У всех свое представление о прекрасном. В мои
> представления о прекрасном, например, "круглые кнопки" не входят.

В мое тоже, но неXPшные кнопки уж не в какое прекрасное и подавно не лезут.
Sergey Kaminski ©   (25.08.04 16:21) [26]
Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ.

Отменяли. Чтобы в уникодовских виндах скопировать что-то русское в буфер обмена надо переключать раскладку клавы.


 
Piter ©   (2004-08-25 18:00) [31]

Sergey Kaminski ©   (25.08.04 16:21) [26]
Замечу, что с появлением юникодовых Windows, НИКТО не отменял в них поддержку не юникодовых программ


и что? Слушай, я не понимаю о чем мы говорим. Так о чем все таки? Что ты хочешь сказать. Я хочу сказать простую вещь - что если у тебя программа русская, а у человека немецкая локаль - то будут пробелемы. Ты с этим споришь?

wnew ©   (25.08.04 16:41) [28]
Да, где-то не прав. Всё дело в том, что проводник в Win9x и тем более


странный ты человек. Говоришь, что не прав и далее таки подтверждаешь свою правоту...

Попробуй, используя TTreeView и TListView

так эти компоненты тоже ANSI"шные! А что ты хотел?! Выстави им Font правильный.

А вот, если использовать TntControl компоненты - то всё в полном ажуре

Вот именно! А ПОЧЕМУ? Не из-за этого ли:

отсюда напрашивается вывод, что имена фалов в юникодовых системах (win2k, winXP) хранятся в юникоде, даже если они были созданы не-юникодовыми программами

Если из-за этого - то странно однако! Хотя еще вот какое предположение - может, это в NTFS встроен Unicode? ты попробуй тоже самое на FAT... хотя нет, на фат тоже самое будет.

Вот и вопрос - что, в FAT предусмотрено два байта на буквы имени?


 
wnew ©   (2004-08-25 18:12) [32]

Piter ©   (25.08.04 18:00) [31]
:)) Перечитай пост 28, а потом иди отдыхать:)


 
Sergey Kaminski ©   (2004-08-25 18:18) [33]


Я хочу сказать простую вещь - что если у тебя программа русская, а у человека немецкая локаль - то будут пробелемы. Ты с этим споришь?


Я спорю, с тем, что есть такая проблема. НЕТ такой проблемы. Как нет проблемы: воровать ли серябряные ложки в гостях или не воровать.

Если программа русская, а у человека немецкая локаль, то это проблема НЕ программиста. Может у того человека вообще нет Windows или он вообще не умеет компьютером пользоваться, в т.ч. настроить систему. Как нет проблемы программиста баз данных в том, что у человека на "той" машине может не стоять BDE.


 
Sergey Kaminski ©   (2004-08-25 18:20) [34]

Нет проблемы китайского программиста в том, что у тебя иероглифы не показываются. Поставь шрифты, настрой локаль и все претензии к китайцу исчезнут.


 
Sergey Kaminski ©   (2004-08-25 18:21) [35]

>> GrayFace ©   (25.08.04 17:53) [29]
>> Это я хотел сказать, что далеко не все переходили на Win3.1

Простите великодушно


 
Piter ©   (2004-08-25 18:25) [36]

wnew ©   (25.08.04 18:12) [32]
:)) Перечитай пост 28, а потом иди отдыхать:)


я этот пост читал, между прочим. Я еще на него и ответил. Теперь ответь ты, что не так?

Единственное, что я ник перепутал :)

Sergey Kaminski ©   (25.08.04 18:18) [33]
Если программа русская, а у человека немецкая локаль, то это проблема НЕ программиста


хорошо. Значит, это проблема пользователя? Ок.

А теперь если ты такой умный - ответь. Если нужно использовать английские программы (это понятно), немецкие и при этом еще и русские - что делать?! Хочешь сказать такого не бывает? Спроси у wnew - он тебе расскажет.

Ты хоть сам то понимаешь для ЧЕГО делался Unicode, а?

Sergey Kaminski ©   (25.08.04 18:20) [34]
Поставь шрифты, настрой локаль


ты совсем что ли? Причем здесь Unicode и локаль? Объясни плиз как сочетается Unicode и локаль? Unicode РАЗРАБАТЫВАЛСЯ для того, чтобы не зависеть от локали. Думай, прежде чем говоришь.


 
wnew ©   (2004-08-25 18:28) [37]

Sergey Kaminski ©   (25.08.04 18:20) [34]
Такой подход не всегда оправдан. Первый же пример  - интернет-браузер. А если требуется создать HTML-редактор, который предполагается использовать в Германии, но способным создавать русскоязычные странички? А различные переводчики? Ну и т.д. Да и вообще, коли придумали Unicode - лучше его использовать, тем более, думаю, что для разработчиков, особенно шароварщиков - это только прибавит выгоды. К примеру, здесь в Германии, не малое колличество людей с удовольствием пользовались бы русскими программами, но естественно у всех установлен немецкий Windows, а делать русскую локализацию - означает создавать те же проблеммы для немецких программ.


 
Piter ©   (2004-08-25 18:35) [38]

Да он вообще противоречит самому себе:

Sergey Kaminski ©   (25.08.04 16:23) [27]
В идеале программа вообще должна запускаться корректно на какой хочешь системе

Не поверишь, так оно и есть.


и потом:

Нет проблемы китайского программиста в том, что у тебя иероглифы не показываются. Поставь шрифты, настрой локаль и все претензии к китайцу исчезнут.


 
Piter ©   (2004-08-25 18:37) [39]

Sergey Kaminski ©   (25.08.04 14:35) [16]
И вообще, откуда сейчас-то проблемы берутся, когда винды юникодовые пошли?


То есть, с одной стороны человек говорит, что Unicode как раз спасает от проблем, нет нужды настраивать локаль. А с другой он потом тут же утверждает, что локаль должна быть настроена "правильно".

ну так если локаль настроена "правильно" - нафига тогда Unicode вообще?


 
Sergey Kaminski ©   (2004-08-25 18:43) [40]


ты совсем что ли? Причем здесь Unicode и локаль? Объясни плиз как сочетается Unicode и локаль? Unicode РАЗРАБАТЫВАЛСЯ для того, чтобы не зависеть от локали.


Молодец, разъяснил мне, непутевому, для чего юникод придумали.

>>wnew ©   (25.08.04 18:28) [37]
Ваши примеры как раз из той области, когда приложение именно и должно использовать юникод, с чем я и не спорил.
А вот вместо нормально русского текста на кнопках я вижу знаки вопроса это несколько другое, имхо.


 
Sergey Kaminski ©   (2004-08-25 19:05) [41]

2 Piter

Может, я слишком сложно изъясняюсь. Попытаюсь попроще:

Если приложение должно быть интернациональным, нужно использовать юникод или иные средства, именно для этого предназначенные. А не плакать на то, что на немецкой локали русские символы в не-юникодовой программе с умляутами. И не думать,что это есть проблема, которая "решается" правкой реестра или другим шаманством.

При таком подходе - нет и не может быть никакой проблемы.


 
Anatoly Podgoretsky ©   (2004-08-25 19:14) [42]

Пример офис, IE, OE и другие продукты микрософта, в Дельфи из встроеных, пожалуй только RichEdit (в режиме сохранения RTF) нормально работает, даже на не Юникод Виндоус, но это заслуга Микрософт, а не Борланд.


 
Ertong ©   (2004-08-25 20:37) [43]


>  [7] Piter ©   (25.08.04 01:34)
>  [10] nikkie ©   (25.08.04 13:51)

D7


> хых, любители реестр править... это решается через
> Control Panel - Regional and Language Options - Advanced
> - Language for non-Unicode programs... выставляется нужный
> язык и вуаля... :)

Нет :) Это не помогло!
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Control\Nls\CodePage
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage
1250 - с_1251.nls
1252 - с_1251.nls

procedure TForm1.Button1Click(Sender: TObject);
const str:String="Заголовок";
begin
 Caption:=str;
end;
- пашет, если язык для не юникод программ русский

procedure TForm1.Button1Click(Sender: TObject);
const str:WideString="Заголовок";
begin
 Caption:=str;
end;
- Не пашет

procedure TForm1.Button1Click(Sender: TObject);
const str:WideString="Заголовок";
begin
 SetWindowTextW(handle,PWideChar(str));
end;
- Пашет

Но для лайбела последним методом не сделаеш.:(


 
wnew ©   (2004-08-25 21:05) [44]

Ertong ©   (25.08.04 20:37) [43]

>procedure TForm1.Button1Click(Sender: TObject);
>const str:String="Заголовок";
>begin
> Caption:=str;
>end; - пашет, если язык для не юникод программ русский
>
>procedure TForm1.Button1Click(Sender: TObject);
>const str:WideString="Заголовок";
>begin
> Caption:=str;
> end; - Не пашет

Эти два примера и не могут нормально функционировать, т.к. свойство Caption ожидает значение типа string. В данном случае не имеет значение то, что во втором примере объявлена константа типа WideString, при присвоении Caption всё-равно имеет тип AnsiString.

 А вот с третим примером всё в полном порядке.

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


 
Ertong ©   (2004-08-25 21:16) [45]


> Эти два примера и не могут нормально функционировать, т.к.
> свойство Caption ожидает значение типа string. В данном
> случае не имеет значение то, что во втором примере объявлена
> константа типа WideString, при присвоении Caption всё-равно
> имеет тип AnsiString.

Второй проимер - согласен. Но все таки Дельфи сам вызывает WideCharToMultiByte :)
А первый пример, помойму нормальный.

Интересно то, что в Windows.pas. Все функции обьявлены как Ansi, т.е. нпример SetWindowText -> SetWindowTextА.


 
wnew ©   (2004-08-25 21:52) [46]

Ertong ©   (25.08.04 21:16) [45]
Первый пример, конечно, нормальный, но для русской локализации.

А где это Delphi сама вызывает WideCharToMultiByte?
По моему функции Delphi WideCharLenToStrVar, ну и через неё: WideCharToString, WideCharLenToString, WideCharToStrVar вызывают функцию API WideCharToMultiByte и всё, больше нигде эта функция не вызывается.

Так вот, при попытке чтения Unicode текстового файла, используя функцию WideCharToString для вывода в TMemo (в не русском Windows), ничего хорошего кроме вопросительных знаков вместо русского текста не получается.
  В функции WideCharLenToStrVar модуля System функции WideCharToMultiByte(0, 0, Source, SourceLen, nil, 0, nil, nil) первым параметром передаётся 0, но если вместо ноля передать 1251 - то TMemo в этом случае корректно отображает кириллицу. К сожалению с TRichEdit этот фокус не проходит.
 
  Да, модули VCL править последнее дело. Лучше скопировать эти функции в свой проект и там переделать.


 
nikkie ©   (2004-08-25 21:59) [47]

>[43] Ertong
>D7

ну вот и объяснение. бинарник компилировался на D6+upd2. насколько я помню, эти проблемы с D7 и заставили Piter-a править VCL.

>wnew
Эти два примера и не могут нормально функционировать, т.к. свойство Caption ожидает значение типа string. В данном случае не имеет значение то, что во втором примере объявлена константа типа WideString, при присвоении Caption всё-равно имеет тип AnsiString.

я думаю, все-таки может работать нормально, пусть и не в твоей ситуации, SetThreadLocale должна помочь.

между String и WideString тоже есть разница. попробуй использовать в тексте программы 2 константы - String и WideString, и попробуй после компиляции найти эти константы в exe. String лежит as is, WideString - в виде unicode. преобразование второй константы из ascii в unicode произвел компилятор. получается, что играет роль под какой локалью компилировалась программа.

>А вот с третим примером всё в полном порядке.
да где же все в порядке? на Win9x такая программа и не запустится.


 
nikkie ©   (2004-08-25 22:01) [48]

>А где это Delphi сама вызывает WideCharToMultiByte?
system.pas CharFromWChar
а она вызывается из _LStrFromPWCharLen


 
Piter ©   (2004-08-25 22:09) [49]

Ertong ©   (25.08.04 21:16) [45]
Интересно то, что в Windows.pas. Все функции обьявлены как Ansi, т.е. нпример SetWindowText -> SetWindowTextА.


что значит все? Функция SetWindowTextW не объявлена что ли?

Sergey Kaminski ©   (25.08.04 19:05) [41]
При таком подходе - нет и не может быть никакой проблемы


а почему же ты говоришь о том, что если хочешь чтобы китайская программа работала - то ты обязан выставить китайскую консоль?!


 
Piter ©   (2004-08-25 22:10) [50]

nikkie ©   (25.08.04 21:59) [47]
я думаю, все-таки может работать нормально, пусть и не в твоей ситуации, SetThreadLocale должна помочь


нет


 
Piter ©   (2004-08-25 22:11) [51]

SetThreadlLocale мало чем помогает...


 
Ertong ©   (2004-08-25 22:24) [52]

I>
> что значит все? Функция SetWindowTextW не объявлена что
> ли?

Обявлена, но SetWindowText, намертво ссылается на Ansi версию. Логично было бы делать это через директиви компилятора.


 
Piter ©   (2004-08-25 22:26) [53]

Логично по твоему? Ну вот изменил ты директиву и VCL уже никогда не скомпилируется. Кому это надо? Главное - зачем?


 
Ertong ©   (2004-08-25 22:30) [54]

В идеале VCL должна полностью поддерживать юникод :) Но это только в идеале :(


 
wnew ©   (2004-08-25 22:40) [55]

Ertong ©   (25.08.04 22:30) [54]
Ну посети эту страничку и, возможно, обретёшь счастье:) К примеру, я уже счастлив:)


 
Ertong ©   (2004-08-25 22:55) [56]


> эту страничку

Какую страничку :)


 
Ertong ©   (2004-08-25 22:58) [57]


> между String и WideString тоже есть разница. попробуй использовать
> в тексте программы 2 константы - String и WideString, и
> попробуй после компиляции найти эти константы в exe. String
> лежит as is, WideString - в виде unicode. преобразование
> второй константы из ascii в unicode произвел компилятор.
> получается, что играет роль под какой локалью компилировалась
> программа.

Компилятор перевел отлично


 
wnew ©   (2004-08-25 23:02) [58]

Ertong ©   (25.08.04 22:55) [56]
А забыл ссылку дать:) Но я ранее её уже давал:)
http://tnt.ccci.org/


 
Ertong ©   (2004-08-25 23:09) [59]


> http://tnt.ccci.org/

Качаю, щас посмотрю.


 
Piter ©   (2004-08-25 23:52) [60]

Ertong ©   (25.08.04 22:30) [54]
В идеале VCL должна полностью поддерживать юникод :) Но это только в идеале :(


в смысле, в идеале? Она могла бы поддерживать unicode, но не поддерживает :(


 
nikkie ©   (2004-08-26 00:29) [61]

>Ertong
>Компилятор перевел отлично
либо ты не понял того, что я написал, либо неправильно проверял.

имеем Russian локаль как дефолт. компилируем такую программу:

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, Windows;
const
 S1: String = "РУССКИЙ";
 S2: WideString = "НЕМЕЦКИЙ";
begin
 Writeln(Integer(S1[1]));
 Writeln(Integer(S2[1]));
 MessageBox(0, PChar(S1), nil, MB_OK);
 MessageBoxW(0, PWideChar(S2), nil, MB_OK);
end.


запускаем. на выходе имеем:
208
1053
+ читаемый текст в обоих MessageBox.

идем в Regional Settings и ставим Afrikaans как дефолтную локаль. перегружаемся.
запускаем ОТКОМПИЛИРОВАННУЮ программу. на выходе имеем:
208
1053
+ НЕчитаемый текст в первом MessageBox и читаемый во втором.

удаляем exe и компилируем. запускаем. на выходе имеем:
208
205
+ НЕчитаемый текст в обоих MessageBox.

идем в Regional Settings и ставим Russian как дефолтную локаль. перегружаемся.
запускаем ОТКОМПИЛИРОВАННУЮ программу. на выходе имеем:
208
205
+ читаемый текст в первом MessageBox и НЕчитаемый во втором.

думаем.


 
GrayFace ©   (2004-08-26 12:58) [62]

Sergey Kaminski
Если вы расчитываете на использование вашей программы нерусскими, знающими русский язык, то вы обязаны менять Charset. А поскольку это очень просто, отказываться от это глупо. А, вообще, это проблема, прежде всего Delphi с AnsiVCL и DEFAULT_CHARSET"ом по умолчанию.

Ertong ©   (25.08.04 20:37) [43]
Но для лайбела последним методом не сделаеш.:(

У лейбла в свойстве Font есть Charset.


 
Nero   (2004-08-28 13:00) [63]

А нехер себе win ХэРэ ставить! Лучше грузани старую добрую 98



Страницы: 1 2 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.032 c
1-1094113972
ZemA
2004-09-02 12:32
2004.09.19
События происходят дважды. Это нормально?


1-1093921769
Александр1
2004-08-31 07:09
2004.09.19
Реестр


1-1094397791
Забывший
2004-09-05 19:23
2004.09.19
Как по OnMouseDown чего-либо (панели, к примеру) инциировать...


4-1091707930
GuAV
2004-08-05 16:12
2004.09.19
Вопрос по OpenThemeData


3-1093279783
mouse_web
2004-08-23 20:49
2004.09.19
Запустить дополнительную форму параллельно процессу