Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.02.2013, 19:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию Арабские шрифты

Кто-нибудь работал с арабскими шрифтами?
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  
Старый 01.02.2013, 23:00
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

На форме какой шрифт используется? В Windows 7 даже в Tahoma арабские буквы присутствуют физически.

Мне кажется, что тут принцип ничем не отличается от того, как если бы текст был на русском. Если это TLabel, нужно установить ему соответствующий моноширинный шрифт, а GDI крайняк нужный подставит, и даже в Windows XP, если установлена поддержка азиатских языков. А в шрифтах от Windows 7 уже даже в Courier New арабские буквы присутствуют физически, как и в Tahoma, и подставлять ничего не придется.

Ой, на код не посмотрел. :-)

Мне кажется, что в самом коде ошибка. Надо наоборот -- сначала взять Handle, а потом уже ставить шрифт.

Последний раз редактировалось Freeman, 01.02.2013 в 23:03.
Ответить с цитированием
  #3  
Старый 02.02.2013, 00:17
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Мне кажется, что в самом коде ошибка. Надо наоборот -- сначала взять Handle, а потом уже ставить шрифт.
Не важно. Я пробовал по-разному. Тем более что в этом коде если менять шрифт на другой, то он меняется на форме. И вообще, используется это в проге на чистом АПИ, код на делфи тут для упрощения примера (и для теста; тестировал, не станет ли лучше если сделать SetTextAlign в TA_RTLREADING). То, что в Consolas есть арабские буквы, я знаю.
Меня интересует именно то, как изменить их начертание с того, что отображается на DC (на форме), на то, как это отображается в коде. Такое ощущение, что они отрисовали кучу подчеркиваний, а поверх них вручную на нужном расстоянии расположили буквы. Однако последние два символа и парочка в середине опровергают это предположение.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 02.02.2013, 03:34
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Bargest
Меня интересует именно то, как изменить их начертание с того, что отображается на DC (на форме), на то, как это отображается в коде.
Гм. Выставить тот же шрифт и тот же размер, вестимо. Как понимаю, речь идет о Windows 7, где поддержка азиатских языков уже искаропки?

Вот что получилось у меня (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;
Сначала был Courier New:
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  
Старый 02.02.2013, 15:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Что ж это получается, студия при отрисовке арабского текста меняет шрифт на курьера? Там точно стоит consolas по умолчанию.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 02.02.2013, 22:00
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

У меня Consolas не стоит, поэтому экспериментировал с Courier New.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter