Вниз
Скачать: CL | DM;

Размеры шрифтов   Найти похожие ветки 

 
shu_3d   (2003-03-03 14:56) [0]

Приветствую, мастера!
Я начал копаться в работе с фонтами, и поскольку я еще довольно таки чайник в этой области, возникло у меня несколько вопросов.
1)Предположим, я при рисовании на форме устанавливаю mm_anisotropic, и задаю font.size или font.height для canvasa формы. Вопос:
к какому окну (логическому или просмотра) относятся эти величины? Если они относятся к логическому, о чем можно судить по их описанию, то как вообще понимать, что Size-это пункты, а Height-это пиксели, ведь в логическом окне есть только единицы, не привязанные к физическим размерам. А если size и Height относятся к смотровому окну, то вообще фигня получается. Например, если в Onpaint формы установить фиксированный size( или height) шрифта и устанавливать mapmode в anisotropic, отображая область фиксированного размера на ClientRect формы, а в Onresize делать refresh, тогда получается что физические размеры текста, отображаемого в Onpaint на форме, изменяются при изменении размеров формы. Отсюда вывод, что Size (и Height) все-таки подвязан к логическому окну, и тогда стает вопрос, что же они в этом случае означают конкретно?
2)Мне необходимо получить точную информацию о ФИЗИЧЕСКИХ размерах строки при печати, т.е. сколько мм конкретная строка будет занимать на распечатанном на принтере листе по высоте и ширине. Например, делается так:
имеется принтер, в настройках которого стоит 600*600 dpi. При нажатии на кнопке выполняется следующий код:
printer.begindoc;
printer.canvas.font.size:=72;
printer.canvas.textout(0,0,"M");
showmessage(inttostr(printer.canvas.textheight("M")));
printer.enddoc;
Так как size по идее представляет собой высоту шрифта в пунктах, т.е. в 1/72 дюйма, то при печати (т.к. size>0, то internal leading в высоту символа не включается) буква M должна быть в высоту 1 дюйм, а в сообщении должно быть выведено 1дюйм*600 dpi=600. Реально же получается, что принтер печатает букву высотой в 1,8 см, а в сообщении выдается число 670. Даже если 1,8 перевести в дюймы, а потом умножить на dpi принтера, то получим 1,8/2,54*600=425, а не 670. Вопрос:
если я при печати устанавливаю высоту шрифта printer.canvas.font.size:=..., как мне точно узнать, сколько мм по высоте и ширине будет занимать напачатанная строка на листе бумаги, причем при любом выбранном режиме mapmode. И наоборот, предположим, что я знаю, сколько должна занимать на листе бумаги строка текста, как мне получить нужное значение font.size при любом выбранном mapmode?
3)В Win32 Programmer"s Reference есть две структуры, описывающие фонт:
OUTLINETEXTMETRICS и TEXTMETRICS. Обе они имеют общие поля, в первую очередь меня интересуют поля (o)tmAscend, (o)tmdescend. Чем все-таки эти поля (т.е. например tmAscend от otmAscend) отличаются реально друг от друга (желательно не цитировать при этом переводы help)?


 
MBo ©   (2003-03-03 15:53) [1]

книги:
Петцольд
Тейксейра-Пачеко
Фенг Юань



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
4-91599
shu_3d
2003-03-03 14:56
2003.04.28
Размеры шрифтов


1-91281
Dmitry V. Averuanov
2003-04-17 12:24
2003.04.28
Как передать array of char из DLL ?


1-91289
ArtemB
2003-04-15 13:48
2003.04.28
FindComponent


3-91220
pasha_golub
2003-04-09 18:18
2003.04.28
Неверный результат выполнения запроса


14-91482
Дремучий
2003-04-09 12:17
2003.04.28
Обучение нейросетей.... ИИ на основе форума?




   Наверх