Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Dimaxx ©   (2003-09-16 22:54) [0]

Братва! У меня такая проблема:

В моей программе предусмотрена печать графической информации. Информация растягивается на весь лист. Я использовал модуль KOLPrinters. Прога, в принципе, готова. Опробовал печать на работе. Все работает. Сейчас поправил кое-что в коде (не печати) и снова пробую на работе. Не идет печать!!! У нас на работе два принтера на машине: HP DeskJet 1220C и Canon LBP-810. Описываю все по порядку...

1) Создаю PrintDalog

var PRN: PPrintDlg;
...
PRN:=NewPrintDialog(From.Handle,[pdCollate,pdPrintToFile,pdWarning,pdHelp]);


2) Далее в процедуре печати пишу

if PRN.Execute then
 begin
   Printer^.Assign(PRN.Info);
   W:=Printer^.PageWidth;
   H:=Printer^.PageHeight;
   DPIX:=GetDeviceCaps(Printer^.Canvas.Handle,LOGPIXELSX);
   DPIY:=GetDeviceCaps(Printer^.Canvas.Handle,LOGPIXELSY);
   ...
   Printer^.BeginDoc;
   ...
   // Далее рисуем на канве принтера заготовку
   ...
   // Здесь графически выводим текст через DrawText
   ...
   // Здесь рисую значки из битмапов
   ...
   Printer^.EndDoc;
 end;


3) Глушу PRN.Free;

Все! Вывожу под Вынь98 на печать свои художества.

ГЛЮК №1: При настройке параметров указываю ориентацию Ландшафт. Дебажу пошагово и получаю ВСЕГДА ширину меньше высоты (то есть ориентация всегда Портрет). Пробовал вручную задать после диалога Ландшафт - не помогает.

ГЛЮК №2: На HP печать не проходит (не появляется в трее значок диспетчера печати и нет превьюшного окна драйвера HP). На Canon посылаю - получаю ошибку в библиотеке драйвера. На третьей машине по ВыньМЕ с HP 1100 выдает ошибку в библиотеке драйвера HP...

Перезагружаюсь в ХРюшу и запускаю там - вываливается ошибка в GDI32.dll. Приехали! Че за ботва?! Лезу в код и начинаю отключать участки по порядку. Нашел-таки! Ошибку вызывает блок вывода текста графически. Без этого блока на HP все запускается, а на Canon все равно ошибка в его библиотеке. Но может и нормально напечататься. Но глюк №1 все равно остается!!!

Теперь смотрим блок печати текста (переменная С - масштабный коэффициент: 1,2,3 и т.д.):

...
Printer^.Canvas.Font.FontName:="Arial Narrow";
Printer^.Canvas.Font.FontHeight:=26*С;
Printer^.Canvas.Font.FontStyle:=[fsBold];
Printer^.Canvas.Font.Color:=0;
Mode:=SetBkMode(Printer^.Canvas.Handle,TRANSPARENT);
for Y:=0 to 14 do
 for X:=0 to 19 do
   begin
     S:=...;
     R:=Bounds(X0+5*C,Y0+20*C,DX-10*C,2*Printer^.Canvas.TextHeight(S));
     Printer^.Canvas.Brush.Color:=...;
     Printer^.Canvas.DrawText(S,R,DT_CENTER+DT_TOP+DT_WORDBREAK);
   end;
SetBkMode(Printer^.Canvas.Handle,Mode);
...


Может, я туфту написал, но ерунда - все ведь работало... И функция WriteLn из KOLPrinters работает нормально!!! Я в замешательстве!!! Все раньше работало!! У меня куча тестовых отпечатков с разными DPI и ориентациями на обоих принтерах!! Ради эксперимента попробовал на сетевой машине послать (опять на такой же Canon) и на одиночной под ВыньМЕ с HP LJ1100! Все то же самое!!! Не могут же три машины одинаково глючить. Причем печать из Ворда, Автокада и прочих приблуд нормально выводится!!

Пробовал по-другому. Создавал шрифт через NewFont и Assign"овал его на канву. Ноль эмоций!!!

В свете сказанного хотел бы спросить:

1) Как правильно реализовать независимость от DPI? На всех принтерах, которые мне доступны, DPI всегда равны (300х300 и 600х600). Через ф-цию GetDeviceCaps можно запросить ASPECTX и ASPECTY. Я не совсем понял для чего они служат - вроде бы эти самые масштабные коэффициенты. Если печать будет происходить, скажем, на фото-Epson с разрешением 5760х1440, то у меня получится лажа. То есть, если я выведу квадрат 100х100 точек, то на 300х300 dpi будет квадрат, 600х600 - тоже, а при 2400х1200 - вертикальный прямоугольник? Так не пойдет!

2) Может кто кинет в меня примерчик по моей проблеме?

PS: А может винду снести?


 
Boguslaw   (2003-09-16 23:14) [1]

var PRN: PPrintDlg;
...
PRN:=NewPrintDialog(From.Handle,[pdCollate,pdPrintToFile,pdWarning,pdHelp]);

Do You mean :
PRN := NewPrintDialog(Form,[pdCollate,pdPRintToFile,pdWarning,pdHelp]);

Anyway give full example of what You are doing between Begin and EndDoc.


 
Boguslaw   (2003-09-16 23:32) [2]

Well, I tested with some printer drivers (not printers becouse I don"t have it) and seems that some DPI is capable to be selected  but others not (for HP PCL 5L 300 and 600 DPI can be selected but 75 DPI not) Maybe a printer driver  behaviour ? The same is for Portrait /Landscape :
Portrait : W= 2329, H= 3241
Landscape = W = 3236 H = 2329 , so Portrait is higher then should be ??? Possibly a bug in KOLPrinterDialogs package but I"m not sure. Some docs said about non-printable area excluded from printing by  drivers.


 
SPeller ©   (2003-09-17 08:15) [3]

Если проблемы в выводом текста не исчезли, то попробуй убрать вызовы TextHeight и TextWidth (всё что вызывает TextExtent) в канве. Попробуй вместо этого подставить константные значения. Дело в том, что в нутри TextExtent может происходить избавление от хендла контекста, используемого данным объектом канвы. Проверь значение хендла после вызова TextHeight или подобных, и если оно равно нулю - то это баг. Я Кладову уже писал об этом. Там изменения какие-то для закрытия утечек были сделаны, но не Владимиром, а Герасимовым. Надо ему по голове настучать за такие заплатки :) Шутка :). Я спасся на время комментированием в коде TextExtent строки
 If Not fIsPaintDC then ClearHandle := True;
но Кладов на это сказал "fIsPaintDC кстати нельзя трогать". Поэтому пока жду его реакции на происходящее.


 
Gandalf ©   (2003-09-17 20:12) [4]

Можешь попробовать альтернатив MHPrinters - он колный конверт VCL аналога - если там код пахал, будет и сдесь - причем один в один.


 
Dimaxx ©   (2003-09-17 21:23) [5]

Вот текст процедуры печати - нет возможности разместить полностью, поэтому в архиве.

http://dimaxx.nightmail.ru/print.zip



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

Форум: "KOL";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
14-1079985969
Andreykom
2004-03-22 23:06
2004.04.25
Memory


4-1077017998
Clift
2004-02-17 14:39
2004.04.25
LVM_GETITEMPOSITION


1-1081541319
Сергей П.
2004-04-10 00:08
2004.04.25
StringGrid


1-1081531477
MaxidroM555
2004-04-09 21:24
2004.04.25
Работа с классами


14-1080819212
VMcL
2004-04-01 15:33
2004.04.25
Формат MP3 объявлен вне закона





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский