Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Можно ли вывести Unicode на Image?


Автор: EKoshelev 6.2.2013, 13:39
Хочу попробовать вывести иероглифы на Image. Шрифты есть...
Если кто-нибудь знает как, подскажите плз )

Автор: Чучмек 6.2.2013, 16:53
А в лэйбу можешь вывести? И какая делфа?

Автор: EKoshelev 7.2.2013, 09:05
Честно гря, я даже не знаю как компьютеру в мозг этот юникод загрузить. Там вроде был какой-то WideChar штоль? И съест ли лабель такой чар - фиг знает.

Дельфа седьмая.

--------

В лейбл, похоже, не выводится. Сейчас (на работе) шрифтов китайских нет, зато есть втроенный греческий, например. Дак вот из Word'а взял код буквы "гамма" (0x03b3) и накидал вот такой код:

Код

var
  w: WideChar;
begin
  w := WideChar($03B3);
  Label1.Caption := w;
end;



В результате на лейбле оказался знак вопроса. Символы из ASCII выводит нормально, если чё. Шрифт на лейбле Times New Roman.

Автор: Чучмек 7.2.2013, 09:47
Я почему и спрашиваю.
Цитата(EKoshelev @  7.2.2013,  09:05 Найти цитируемый пост)
 w := WideChar($03B3);
  Label1.Caption := w;

Так не получится. В неюникодной делфе все равно преобразуется в ansistring.
Но в любом случае можно. И в любом случае через canvas. Только в d7 придется через API.
Минут через 20 пример дам.

Автор: Akella 7.2.2013, 09:52
А TNT components не спасут гиганта мысли?

Добавлено через 38 секунд
Или http://www.tmssoftware.com/site/tmsuni.asp

Автор: Чучмек 7.2.2013, 10:50
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 img:TImage;
 s:WideString;
 var sz:TSize;
begin
 img:=TImage.Create(form1);
 img.Canvas.Font.Size:=64;    //вообще img.Picture.bitmap.Canvas
 AddFontResource('C:\Program Files\Borland\Delphi7\Projects\иероглифы\FZSJSFW1.TTF');
 img.Canvas.Font.Name:='FZShouJinShu-S10T';
 img.Canvas.Font.Style:=[fsBold];
 img.Canvas.Font.Color:=rgb(200,0,0);
 img.Canvas.Brush.Color:=rgb(0,0,0);
 SetLength(s,4);
  s[1]:=#$9501;
  s[2]:=#$9502;
  s[3]:=#$9503;
  s[4]:=#$9504;
 //fillchar(sz,sizeof(sz),0);
 GetTextExtentPoint32W(img.Canvas.Handle,PWideChar(s),length(s),sz);
 img.Picture.bitmap.Width:=trunc(sz.cx*(1+0.4));
 img.Picture.bitmap.Height:=trunc(sz.cy*(1+0.4));
 img.AutoSize:=true;
 img.Canvas.FillRect(Rect(0,0,img.Width,img.Height));
 ExtTextOutW(img.Canvas.Handle, trunc(0.2*sz.cx), trunc(0.2*sz.cy), 0, nil, PWideChar(s),Length(s), nil);
 Form1.InsertControl(img);
end;


Добавлено через 4 минуты и 25 секунд
ps
Даже запись вида
Код

WideString:=#$9501#$9502#$9503#$9504;

в d7 не работает :(

Автор: Чучмек 7.2.2013, 11:22
http://hanbalik.narod.ru/library/fonts/fzsjsfw.zip

Автор: EKoshelev 7.2.2013, 11:39
Akella, да, на TNT уже получилось. Просто стараюсь избегать использования нестандартных компонентов.


Чучмек, Спасибо, твой пример пашет. По крайней мере с греческими буквами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)