Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-91156
nvalery500
2003-04-09 11:42
2003.04.28
БД и файл-сервер


3-91169
lart
2003-04-09 14:31
2003.04.28
Очистить базу данных DBF


14-91525
VID
2003-04-10 00:22
2003.04.28
XL REPORT


1-91339
tytus
2003-04-15 17:15
2003.04.28
Вид компонент


1-91325
saska
2003-04-15 15:30
2003.04.28
Убить TStringlist





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский