Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Вниз

Кодировки 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.005 c
15-1222931778
JohnKorsh
2008-10-02 11:16
2008.12.07
Вопрос по работе с сетью.


2-1225395211
batya-x
2008-10-30 22:33
2008.12.07
Работа с чужими окнами


15-1222915880
Slider007
2008-10-02 06:51
2008.12.07
С днем рождения ! 2 октября 2008 четверг


3-1210962405
kvp
2008-05-16 22:26
2008.12.07
Yaffil: Долго открывается таблица


15-1223128705
Городской Шаман
2008-10-04 17:58
2008.12.07
Жалеете ли вы о том, что пошли работать в IT.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский