Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Печать на принтер   Найти похожие ветки 

 
Alek Aaz ©   (2003-09-09 13:33) [0]

Добрый день.
Вывожу на принтер HP6L файлик такой процедурой:

begin
IF Edit1.Lines.Strings[0]="" then exit;
............................
IF PrintDialog1.Execute then
with Printer do
begin
Title:=Form1.Caption;
BeginDoc;
Canvas.Font:=Edit1.Font;
PHeight:=PageHeight;
THeight:=Canvas.TextHeight(Edit1.Lines.Strings[0]);
NLines:=Floor(PHeight/THeight);
NPage:=Floor(Edit1.Lines.Count/NLines)+1;
TPage:=1;
For i:=0 to Edit1.Lines.Count-1 Do
Begin
THeight:=Canvas.TextHeight(Edit1.Lines.Strings[i]);
Canvas.TextOut(0, 10+(i-(TPage-1)*NLines)*(THeight), Edit1.Lines.Strings[i]);
IF i=(TPage*NLines) then
Begin
TPage:=TPage+1;
NewPage;
End;
End;
EndDoc;
end;

Если жирную строчку не вставлять, то все ОК. Если поставить, то текст начинает "уезжать". Следующая строчка сдвинута относительно верхней в право на N символов. Доходит до правой границы печати и далше печатает по 3 символа от строки. Но ведь я указал Canvas.TextOut(0, ! Куда она лезет-то? Кто знает в чем тут грабли?


 
Johnmen ©   (2003-09-09 14:13) [1]

Грабли - в кривых драйверах для лазерных принтеров ХП.
Особенно это наглядно для 6L. Букет глюков его драйвера впечатляет ! И особенно это связано со шрифтами.

Попробуй поставь "облегченный" клиентский драйвер. Глюков почти нет, но и печатать будет медленнее...:)


 
Alek Aaz   (2003-09-09 16:35) [2]

Да не... не катит...
В принципе я нашел где глюк.
в PrinterSetupDialog изменил страницу на горизонтальную. А если на принтер смотреть через PrintDialog то страница оказалась вертикальная! Когда поменял все стало Ок. Но не понимаю я! Нафига нужен тогда PrinterSetupDialog? Что он делает-то?


 
Anatoly Podgoretsky ©   (2003-09-09 16:50) [3]

Для обратной связи между твоей программой и пользователем.


 
Alek Aaz ©   (2003-09-10 06:31) [4]

2Anatoly Podgoretsky
:) Обожаю "дельные" советы.


 
Anatoly Podgoretsky ©   (2003-09-10 07:37) [5]

Так не спрашивай :-)


 
Alek Aaz ©   (2003-09-10 08:20) [6]

2Anatoly Podgoretsky
Так не спрашивай
^^^^^^^^^^^^^
???????

2All
Вот еще вопросы:
// часть первая - определяем количество строк на листе
Printer.Canvas.Font:=Edit1.Font;
PHeight:=Printer.PageHeight;
THeight:=Printer.Canvas.TextHeight(Edit1.Lines.Strings[0]);
NLines:=Floor(PHeight/THeight);
NPage:=Floor(Edit1.Lines.Count/NLines)+1;
PrintDialog1.MinPage:=1;
PrintDialog1.FromPage:=1;
PrintDialog1.ToPage:=1;
PrintDialog1.MaxPage:=NPage;
// часть вторая - хочет ли пользователь что-нибудь исправить?
IF PrintDialog1.Execute then
// часть третья - определяем количество строк на листе и распечатываем
with Printer do
begin
Title:=Form1.Caption;
BeginDoc;
Canvas.Font:=Edit1.Font;
PHeight:=PageHeight;
THeight:=Canvas.TextHeight(Edit1.Lines.Strings[0]);
NLines:=Floor(PHeight/THeight);
NPage:=Floor(Edit1.Lines.Count/NLines)+1;
TPage:=1;

Так вот. THeight выдает разное значение в первой и третьей части. В первой - неправильное. Пробовал пихать Printer.Refresh и до и после Printer.Canvas.Font:=Edit1.Font; Ноль эмоций. Что делать?
Кажется здвиг получается когда строка не вмещается на страницу. Щас попробую или clipReg попробовать или TextRect или TextFlag поставить в ETO_CLIPPED

По поводу сменить драйвера. Так лучше может ОС сменить :)



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

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-71506
ViJen
2003-09-01 10:51
2003.09.22
Fast Reports


1-71730
Wandererr
2003-09-06 11:50
2003.09.22
Popup меню в стиле Delphi7


3-71479
Andrey V.
2003-09-02 09:23
2003.09.22
Может ли такое быть ???


1-71657
Тих
2003-09-08 21:05
2003.09.22
HTML в CLipboard


14-71824
vopros
2003-09-02 10:16
2003.09.22
Из головы вылетело.