Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как получить полноценный символ корня под Windows?  (Прочитано 10321 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugrita
Помогающий

ru
Offline Offline

« : 06-04-2010 07:00 » new

Если в консольном приложении вывести на печать символ CHR(251)
то получим более или менее приличное изображение радикала, правда без горизонтальной палки
Если же учитывая разницу между ANSI и DOS (или OEM) кодировкой сделать
преобразование
c_sqr: Char;
............
function TfMain.FromWinToDos(cc: Char): Char;
var ss:String;
begin
  ss:=cc;
  OEmToChar(pChar(ss),pChar(ss));
  RESULT:=ss[1];
end;
..........................
c_sqr:= FromWinToDos(CHR(251));


то получим правда нечто похожее на радикал но в  усеченном виде- скорее как буква v
Можно ли в принципе получить полноценное изображение радикала в Delphiпод
Windows?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-04-2010 07:01 » 

eugrita, подбери подходящий фонт и его размер, чтобы было так, как ты хочешь.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 06-04-2010 07:38 » 

в юникоде это символ 221A
Записан

Странно всё это....
eugrita
Помогающий

ru
Offline Offline

« Ответ #3 : 10-04-2010 13:23 » 

Да спасибо.
А вот еще связанный с Юникодом вопрос
а как распечатать кодовую таблицу Unicode из Delphi?
Фишка типа
for i:=250 to 300
 begin
 c:=CHR(i); writeln('i=',i,' ',c);
 end;
Не проходит, т.к. даже если  с:WideChar
то все равно СHR умеет работать только с Char а не с WideChar.
Хотелось бы посмотреть из Delphi Unicode-символы на предмет выбора полезных, которых нет в
традиционных ANSU
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 10-04-2010 15:09 » 

используйте не Chr, а функции для преобразования из StrUtils, работающее с юникодом и мультибайтовыми кодировками.
Записан

eugrita
Помогающий

ru
Offline Offline

« Ответ #5 : 11-04-2010 10:08 » 

А вот еще какая-то нестыковка
как достать любой символ Unicode WideChar(i) ?
вроде бы обозначение символьной константы #222A дано в 16-ичном виде
 это -код символа интеграл #222A  сам проверял : если
L: TNTLabel;
    L.Caption:=WideChar($222B);
то интеграл действительно выводится если в L.Font установлен в Arial Unicode MS
------------------------------------------------------------------------------------------
считая 222B 16-ичной записью преобразуем в 10-ичное i

222B  = 11+2*16+2*16*16+2*16*16*16=11+32+512+8192=8747
аналогично знак радикала #221A
221A =10+1*16+2*16*16+2*16*16*16=10+16+512+8192=8730

Однако при вызове
var c: WideСhar;
 c:=WideChar(8147) ; //или c:=WideChar(8130)
с последующей печатью writeln(c);
выводятся вовсе не эти символы а ?
Почему?
« Последнее редактирование: 11-04-2010 10:14 от eugrita » Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 11-04-2010 13:27 » 

очевидно, потому, что вывод через writeln идёт в консоль, у которой свой, не юникодный, шрифт. для вывода в консоль надо конвертить в OEM.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines