Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
3-71558
NiBL'S
2003-08-28 17:26
2003.09.22
В DBgrid e не отображаются все записи таблицы.


3-71495
Abikos
2003-09-01 12:56
2003.09.22
Interbase


14-71893
freeman2003
2003-09-03 16:30
2003.09.22
Не выполняется хранимая процедура на SQL server из delphi


14-71882
Zhenka
2003-09-03 08:47
2003.09.22
Подскажите как оптимизировать код.


14-71912
Ru
2003-09-03 11:43
2003.09.22
Украина? Федеративное Государство Украина. Быть или не быть?




   Наверх