|
#1
|
||||
|
||||
Арабские шрифты
Кто-нибудь работал с арабскими шрифтами?
1231.png На картинке видно, как арабский шрифт отображается в Delphi, и как он выглядит после TextOut'а при использовании шрифта Consolas. Как видно, в делфи он приведен к моноширному, в то время как на форме он отрисован совсем иначе. Мне при отрисовке тоже надо сделать его моноширным (ну или хотя бы около того). Почему я решил, что это Consolas - на самом деле не важно; в студии точно стоит Consolas (проверял), и там рисуется точно так же. Как этого добиться? З.Ы. честно говоря, корректность вывода не важна, можно и тупо заменить вопросиками или написать "arabic____<...>_" вместо этого. Все равно читать это никому не надо, а если и будет надо - выделить, Ctrl+C и в переводчик (при копировании можно подсунуть нормальный текст). Но это не красиво. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 01.02.2013 в 19:11. |
#2
|
||||
|
||||
На форме какой шрифт используется? В Windows 7 даже в Tahoma арабские буквы присутствуют физически.
Мне кажется, что тут принцип ничем не отличается от того, как если бы текст был на русском. Если это TLabel, нужно установить ему соответствующий моноширинный шрифт, а GDI крайняк нужный подставит, и даже в Windows XP, если установлена поддержка азиатских языков. А в шрифтах от Windows 7 уже даже в Courier New арабские буквы присутствуют физически, как и в Tahoma, и подставлять ничего не придется. Ой, на код не посмотрел. :-) Мне кажется, что в самом коде ошибка. Надо наоборот -- сначала взять Handle, а потом уже ставить шрифт. Последний раз редактировалось Freeman, 01.02.2013 в 23:03. |
#3
|
||||
|
||||
Цитата:
Меня интересует именно то, как изменить их начертание с того, что отображается на DC (на форме), на то, как это отображается в коде. Такое ощущение, что они отрисовали кучу подчеркиваний, а поверх них вручную на нужном расстоянии расположили буквы. Однако последние два символа и парочка в середине опровергают это предположение. jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
Цитата:
Вот что получилось у меня (Windows XP с поддержкой азиатских языков, Delphi 6): Код:
const Arabic: array[0..12] of WideChar = ( #$0627, #$0644, #$0634, #$0627, #$064A, #$0627, #$0633, #$0645, #$0020, #$0635, #$064A, #$0646, #$064A ); var B: TRect; begin with Canvas.Font do begin Name := 'Courier New'; Height := 30; // Size := 9; end; B := TButton(Sender).BoundsRect; TextOutW(Canvas.Handle, B.Left, B.Bottom + 10, Arabic, Length(Arabic)); end; CourierNew.png Потом строчку с именем шрифта закомментировал и встала умолчательная Tahoma (на форме умолчанием выставлена именно Tahoma): Commented.png Delphi 6 не позволяет писать по-арабски с русской локалью, поэтому для сравнения вставил в PSPad (Courier New, 9pt): PSPad.png Тот же Courier New, 9pt на форме, -- закомментил Height и раскомментил Size. Найдите 10 отличий, что называется: 9pt.png |
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
Bargest (02.02.2013)
|
#5
|
||||
|
||||
Что ж это получается, студия при отрисовке арабского текста меняет шрифт на курьера? Там точно стоит consolas по умолчанию.
jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
||||
|
||||
У меня Consolas не стоит, поэтому экспериментировал с Courier New.
|