Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизПечать на принтер Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c