Текущий архив: 2003.04.28;
Скачать: 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 вся ветка
Текущий архив: 2003.04.28;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.008 c