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

Вниз

Кодировки ASCII   Найти похожие ветки 

 
kaif ©   (2008-01-29 18:31) [0]

Пытаюсь использовать армянский шрифт Arial LatArm.
Буквы армянского алфавита (их всего 36) занимают ASCII-коды, начиная с 178 и далее подряд (всего 62 символа).

procedure TForm1.Button2Click(Sender: TObject);
var
 c: char;
 i: integer;
begin
 Edit2.Text := "";
 for i := 178 to 178 + 62 - 1 do
 begin
   c := chr(i);
   Edit2.Text := Edit2.Text + c;
 end;
 Label1.Caption := Edit2.Text;
 PaintBox1.Canvas.Font.Charset := ANSI_CHARSET;
 PaintBox1.Canvas.Font.Name := "Arial LatArm";
 PaintBox1.Canvas.TextOut(0,0,Edit2.Text);
end;


Все компоненты (и TEdit и TLabel и TCanvas, в который я попробовал вывести текст вручную, как видно в примере) отображают в русской Windows XP Pro только четыре армянские буквы, с кодами 181,182,183 и 187.
На остальных позициях отображаются квадраты.

Тот же EXE-файл отображает весь алфавит без проблем под русской Windows 2000.

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

В "таблице символов" Windows все буквы видны под XP тоже.
Даже в Notepad-е все буквы видны.

Видимо только дельфийские приложения так себя ведут. Но ведь они вызывают функцию DrawText(), а дальше все делает Windows... Я ничего не понимаю и даже не представляю, что можно предпринять.

Помнится лет пять назад у меня была точно такая же проблема под Windows 2000. Тогда под Windows 98 все работало нормально, а под W2k часть букв не отображалась. Теперь все отображаются, но проблема теперьв XP.

Кто что может посоветовать или прояснить?
С уважением.


 
Плохиш ©   (2008-01-29 18:40) [1]


> kaif ©   (29.01.08 18:31)  

Ну не верю я, что kaif не знает про отсутствие поддержки юникода в визуальных компонентах VCL.

> Но ведь они вызывают функцию DrawText(),

А привязана она к DrawTextA...


 
Плохиш ©   (2008-01-29 18:41) [2]

TNT спасёт отца русской демократии :-)


 
clickmaker ©   (2008-01-29 18:46) [3]


> про отсутствие поддержки юникода в визуальных компонентах
> VCL

кроме четырех армянских букаф )


 
kaif ©   (2008-01-29 19:03) [4]

Я в курсе, что VCL компоненты не поддерживают юникод. Иначе свойство Caption у Label-а было бы WideString как минимум.
Но ТNТ не спасает.
Армянский юникод тоже не работает под русской Windows XP Pro.
В компонентах TNT вместо квадратов выводятся одни вопросики.
Даже четырех букв не видно.
К тому же у меня есть желание использовать не юникод, а просто ANSI. Меня это вполне устраивает. И это работает под другими операционными системами. Но только не под русской XP.
Отвечающим.

Просьба обратить внимание на то, что под Windows 2000 SP2 абсолютно тот же EXE-файл нормально выводит весь алфавит.


 
clickmaker ©   (2008-01-29 19:07) [5]


> [4] kaif ©   (29.01.08 19:03)

а если поставить там в рег. настройках "язык для не-уникод программ - армянский"?


 
Anatoly Podgoretsky ©   (2008-01-29 19:07) [6]

> kaif  (29.01.2008 18:31:00)  [0]

ANSI_CHARSET
Надо выполнить много условий, чтобы это заработало для конкретного языка
Это и локализация на уровне системы. Если не соответствует то результат трудно получить.
Я не знаю есть ли поддержка армянского в виндоус и насколько она широкая.
Но точно это не должны быть самопальные шрифты.
Если поддержка есть, то лучшее решение Юникод.


 
kaif ©   (2008-01-29 19:11) [7]

Этот шрифт (Arial LatArm) рассчитан на работу в кодировке ANSI. И он работает у всех дельфистов в Армении. А у меня под русским XP - никак. Или мне теперь ставить английскую XP или ставить Delphi с десятками плохо ставящихся палитр под свой русский w2k (на том же компьютере), чтобы заставить это работать по-человечески? Как вообще русифицируют винды и кто этим занимается? У меня такое ощущение, что раньше русский 2000 тоже был кривой, а вот теперь чудесным образом исправился...


 
clickmaker ©   (2008-01-29 19:12) [8]


> Как вообще русифицируют винды и кто этим занимается?

судя по всему, не армяне )


 
kaif ©   (2008-01-29 19:17) [9]

Пожалуй мне ничего не остается, как инсталлировать все под W2k. Мне еще предстоит специфическая проблема разбираться с COLLATION ORDER для армянских букв под Firebird чтобы UPPER в SQL мог работать.


 
Плохиш ©   (2008-01-29 19:19) [10]


> kaif ©   (29.01.08 19:11) [7]
> Этот шрифт (Arial LatArm) рассчитан на работу в кодировке
> ANSI. И он работает у всех дельфистов в Армении.

Значит надо выставить CharSet у компонентов тот, в котором есть армянские буквы.


 
kaif ©   (2008-01-29 19:21) [11]

Как все это тяжко... Если государства не могут договориться о способах юзать таблицы из 256 символов, о чем они вообще могут договориться?... И в сотовых телефонах та же пса... Это вечный гимор. Юникод тоже кривой. Все криво. Я читал где-то, что в юникоде буква Й состоит отдельно из И, а отдельно из этой хреновины, что над ней. Не знаю, байка или нет...


 
kaif ©   (2008-01-29 19:24) [12]

2 Плохиш ©   (29.01.08 19:19) [10]

Ты видно невнимательно читаешь.
Повторюсь.
ПОД РУССКОЙ WINDOWS 2000 WORKSTATION SP2 ВСЕ РАБОТАЕТ.
НЕ РАБОТАЕТ ПОД РУССКОЙ WINDOWS XP PROFESSIONAL.
При чем тут CHARSET?


 
clickmaker ©   (2008-01-29 19:35) [13]


> Я читал где-то, что в юникоде буква Й состоит отдельно из
> И, а отдельно из этой хреновины, что над ней. Не знаю, байка
> или нет...

а исландский символ ogonek - аж из трех: O, хреновина над ней и хвостик сбоку под ней
армянам ишшо повезло... )


 
Плохиш ©   (2008-01-29 23:11) [14]


> kaif ©   (29.01.08 19:24) [12]

судя по http://msdn2.microsoft.com/en-us/library/aa912040.aspx
контролам нужно установить юникодовый язык и charset = 0x042b

> Я читал где-то, что в юникоде буква Й состоит отдельно из
> И, а отдельно из этой хреновины

Анекдоты читал?


 
Reindeer Moss Eater ©   (2008-01-29 23:19) [15]

"Символ должен быть байтом.
Байт должен иметь разрядность платформы."

/* Из неопубликованного манифеста несуществующей партии "Земляне против юникода" */

:)


 
guav ©   (2008-01-30 00:05) [16]

Может там где не работает просто галка в Панель управления->Языки и стандарты->Дополнительно->кодовые страници не установлена ?


 
Anatoly Podgoretsky ©   (2008-01-30 00:29) [17]

> Плохиш  (29.01.2008 23:11:14)  [14]

Не совсем так, это один из методов формирования изображения.


 
ketmar ©   (2008-01-30 06:41) [18]

>[4] kaif ©(29.01.08 19:03)
>Армянский юникод

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


 
kaif ©   (2008-01-30 14:52) [19]

2 ketmar ©   (30.01.08 06:41) [18]
армянский уникод суров, да. а чем не угодил не-армянский, которым пользуется весь остальной мир?


Что за странный и хамовитый пост?

Говоря "армянский юникод тоже не работает" я лишь имел в виду, что армянские символы в стандартном юникоде под русской XP не отображаются шрифтами, содержащими в себе армянские символы  (например Sylfaen)  под русской XP, если это пытаться сделать из Delphi, даже используя компоненты, допускающие тип WideString.

Армянский алфавит входит в состав мирового юникода. Как и русский.

Но как существуют русские кодовые страницы на 256 символов ASCII (1251 или 866), точно так же существуют и армянские кодовые страницы на 256 символов, позволяющие вместо юникода использовать один байт на символ. Существуют юникодовые шрифты, отображающие армянский, например, Sylfaen и обычные True Type шрифты под Windows, я в данном случае пытаюсь использовать шрифт Arial LatArm, содержащий английские буквы там, где принято и армянские там, где принято помещать национальную кодировку.

Все совершенно стандартно.

А мой выбор в пользу ASCII вместо юникода обусловлен тем, что это приложение баз данных, и я не хочу искусственно завышать объемы информации, когда могу использовать по одному байту на символ.

И под любой английской версией WIndows это все работает и работает даже под русскими версиями W2k, хотя раньше под этими версиями были похожие проблемы.

У меня проблема только под русской Windows XP.
И я думаю, что не только с армянским языком под ней буду проблемы, судя по тому, что я наблюдаю.

Так как она делает не совсем то, что должна делать, когда я объявляю кодировку ASCII и предлагаю вывести строку шрифтом Arial LatArm, для которого стандартной кодовой страницей является именно ASCII, в чем я еще раз на всякий случай убедился, запросив у самой Windows эту информацию родными функциями WinAPI.

Блин, благодаря тебе я уже пожалел, что задал свой вопрос здесь.

Плохиш ©   (29.01.08 23:11) [14]
контролам нужно установить юникодовый язык и charset = 0x042b


Стандартная VCL с юникодом не работает. Использовать стороннюю библиотеку я не хочу, так как тогда мне придется переписывать огромное приложение с нуля, да к тому же я вообще не хочу юзать юникод, меня вполне устроит один байт на символ, так как ничего кроме английский+армянский отображать мне не требуется. Многих же здесь устраивает win1251, например. И я не заставляю их переходить на юникод, когда у них под какой-то версией Windows вылезают кракозябры, если в шрифтах VCL компонентов у них установлен DEFAULT_CHARSET, а не RUSSIAN_CHARSET.


 
clickmaker ©   (2008-01-30 16:17) [20]


> [19] kaif ©   (30.01.08 14:52)

а ты [5] попробовал?
не то чтобы это руководство к действию, просто интересно - будет эффект?


 
Anatoly Podgoretsky ©   (2008-01-30 16:46) [21]


> А мой выбор в пользу ASCII вместо юникода обусловлен тем,
>  что это приложение баз данных, и я не хочу искусственно
> завышать объемы информации, когда могу использовать по одному
> байту на символ.

Это экономия на спичках, потери могут быть больше, особенно в будущем.

Заставить работать не Юникод приложение, на другой локализации, на ХР задача сложная.



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

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

Наверх




Память: 0.53 MB
Время: 0.013 c
1-1202989267
lead-in
2008-02-14 14:41
2008.12.07
TSFDS


15-1222820307
brother
2008-10-01 04:18
2008.12.07
навеяло башем...


2-1224846527
NieL
2008-10-24 15:08
2008.12.07
проблема с OLE-сервером (AccessViolation)


15-1223126568
Урсулапов_
2008-10-04 17:22
2008.12.07
RSS-поток в кодировке UTF-8


15-1223229279
TUser
2008-10-05 21:54
2008.12.07
Проспект имени Путина