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

Вниз

Размер страницы принтера....   Найти похожие ветки 

 
Alex_C   (2009-03-19 17:19) [0]

Возникла необходимость на форме отобразить панель, размерами, точно равними размерали текущего листа принтера. Ну типа PrintPreview.
Делал так:

PixX := GetDeviceCaps(Printer.Handle, LOGPIXELSX); // Колочество пикселей в дюйме
PixY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
Width := Round(Printer.PageWidth / PixX * Screen.PixelsPerInch);
Height := Width * GetDeviceCaps(Printer.Handle, VertSize) div
     GetDeviceCaps(Printer.Handle, HorzSize);

где Width, Height - размеры TPanel. Вроде как все верно, но нанель на экране имеер размеры примерно на 1 сантимерт меньше, чем печатный лист. Причем опознается это как тупо померив линейкой, так и напечатав на Panel сетку c шагом 1 см.
Шаг сетки считается так:

PixelGridStep := Round(FDrawPanel.GridStep * PixelsPerInch / MillimetersPerInch);

причем шаг верный - линейка это подтверждает :)
Получается что Printer выдает неверные данные....
Почему?
Принтер используется тот, что по умолчанию в системе.


 
KilkennyCat ©   (2009-03-20 02:28) [1]


> опознается это как тупо померив линейкой,


Выведи картинку на проектором на экран метра этак три по диагонали, а лучше в кинотеатре, и попробуй тупо измерить рулеткой и подумать о физических свойствах пикселей монитора.


 
KilkennyCat ©   (2009-03-20 02:31) [2]

Кроме того, некоторые принтеры, например, большинство лазерных офисников, не умеют печатать без полей.


 
Alex_C   (2009-03-20 08:46) [3]


> Выведи картинку на проектором на экран метра этак три по
> диагонали


Нифига :)
Смотрел тоже самое допустим в FastReport - там как раз все верно. Т.е. что то не так... Но пока не понял что :)


 
KilkennyCat ©   (2009-03-20 10:49) [4]

Наверняка "там все верно" не абсолютно для всех принтеров.


 
Alex_C   (2009-03-20 11:33) [5]

В общем разобрался, просмотря исходники от других PrintView....
Оказалось как обычно: во всех Faq не верноя информация...
На деле перевести реальный размер бумаги на экран простим методом
GetDeviceCaps - нельзя!
Чтоб размер на экране соответствовал размеру бумаги надо из принтера получить размер размер текущего листа в мм, а затем через Screen.PixelsPerInch перевести в размер на экране.
Интересно, что везде про это умалчивается..


 
Anatoly Podgoretsky ©   (2009-03-20 16:33) [6]

> Alex_C  (20.03.2009 11:33:05)  [5]

Ничего не умалчивается, но все равно тебе это мало что даст, в отличии от принтера у монитора это виртуальная характеристика, не стабильная, требующая постоянно калибровки.



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1235821749
TInt
2009-02-28 14:49
2009.05.03
Чем отличается OnClose от OnDestroy ?


2-1237363573
Darvin
2009-03-18 11:06
2009.05.03
Состояние буфера СОМ порта


15-1236055605
Дмитрий С
2009-03-03 07:46
2009.05.03
HotKey на всех Desktop-ах.


15-1235820460
iZEN
2009-02-28 14:27
2009.05.03
Диалог стандартного TWAIN-драйвера сканера


6-1202735762
gear
2008-02-11 16:16
2009.05.03
Как выключить HTTP/1.1 и включить HTTP/1.0 в WININET?