31.10.2007 11:40
В Delphi и C++Builder'e есть такой замечательный объект Printer, у которого есть канва, на которой что-то можно нарисовать а затем напечатать.

У канвы есть методы, позволяющие определить длину и высоту в пикселях текстовой строки (TextWidth(string) и TextHeight(string)). Саму же текстовую строку можно вывести методом TextOut(string). Так вот, если вывести строку на канву формы, а затем очертить ее прямоугольником, размерами TextWidth и TextHeight, будет всё хорошо. Если же тоже самое сделать на канве принтера, то прямоугольник получается примерно на 10% меньше, т.е. TextWidth и TextHeight возвращают неверные значения! Кто-нибудь сталкивался? Куда копать?
31.10.2007 13:13
С разными шрифтами такое? Какие шрифты?
31.10.2007 13:40
Да из стандартного набора только использую: Arial, да Arial Narrow.
Сначала думал, что от принтера зависит (от его драйвера), но на разных принтерах результат один и тот же. (Внешний вид залитых областей и не сплошных линий, например, зависит от того, на каком принтере они печатаются)

Процедура, отрисовывающая это дело на экране и на принтере одна и таже (в нее указатель на конву передается), на экране всё гуд, а на принтере шрифт выходит больше чем на экране. Причем, если мысленно наложить напечатанное изображение на экранное, то все линии совместятся, даже те, которые обводят текст изходя из его размера (получив размер ф-ями TextWidth, TextHeight), а сам текст получается несколько больше.
31.10.2007 15:37
Тьфу, немного разобрался. Выловил маленькую ошибочку и понял в чем собака зарыта на самом деле.
Так вот, оказывается принтер не воспринимает значение Printer.Canvas.Font.PixelsPerInch
Т.е., если для обычной конвы выполнить:
Код:
Canvas.Font.PixelsPerInch:=100;
Canvas.OutText(0,0,'Hello');
Canvas.Font.PixelsPerInch:=200;
Canvas.OutText(0,0,'Hello');
то второе "Hello" будет в два раза меньше, а если то-же самое выполнить для принтерной канвы, то оба слова будут одинакового размера!
Осталось побороть эту проблему...
Часовой пояс GMT +3, время: 17:03.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.