Собственно задача в следующем: есть StringList, его нужно вывести на печать с минимальными полями, в несколько колонок , заполнив весю страницу. Написал процедуру, которая выводит на канву текст:
Код:
begin
...
while i3<Kod.Count-1 do //Kod - Стринглист
begin
for i2 := 0 to RowOfClmn-1 do //Строк в колонке
begin
//W+ClmnInt - ширина строки + расстояне между колонками
//H+RowInt - высота строки + расстояне между строками
Printer.Canvas.TextOut((W+ClmnInt)*ClmnCount, (H+RowInt)*i2,Kod[i3]);
i3:=i3+1;
if i3 = Kod.Count then Break;
end;
ClmnCount:= ClmnCount+1; //номер колонки
end;
end;
Страницу заполняю, изменяя размер шрифта и растояния между колонками и строками. На канве принтера все отрисовывается правильно, но я не вижу что делаю, пока не напечатаю страницу.
Отрисовать канву принтера (например в PainBox) нельзя, для StretchDraw нужен TGraphic.
Пытался вывести текст сначала на другую канву (PainBox, BitMap: TBitMap).
И вот тут начинаются проблеммы со шрифтами. С принтером все ясно у страницы есть физические размеры в милиметрах, шрифт задается в дюймах (размер шрифта / 72 * inch) и при LOGPIXELSX = 600 (или 1200, или какой другой) имеем вполне определенный размер в пикселях.
Есть конечно - BitMap.Canvas.Font.PixelsPerInch равное 96, только толку от него мало, 600/96 = 6,25 а разность высоты текста у канвы принтера и канвы битмэпа при разных размерах шрифта плавает вокруг этого числа. В общем то что выводится на принтер и на битмэп не совпадает,а использовать Printer.Canvas.StretchDraw не лучшее решение шрифты размазываются.
Пробовал вот с этим разобратся
http://www.sql.ru/forum/477567/predv...-pered-pechatu подчти ни чего не понял.