![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размер страницы принтера.... [D7, XP]
Alex_C © (2009-03-19 17:19:00)Возникла необходимость на форме отобразить панель, размерами, точно равними размерали текущего листа принтера. Ну типа 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 выдает неверные данные....
Почему?
Принтер используется тот, что по умолчанию в системе.
Anatoly Podgoretsky (2009-03-20 16:33:00) [1]> Alex_C (20.03.2009 11:33:05) [5]
Ничего не умалчивается, но все равно тебе это мало что даст, в отличии от принтера у монитора это виртуальная характеристика, не стабильная, требующая постоянно калибровки.
Alex_C (2009-03-20 11:33:00) [2]В общем разобрался, просмотря исходники от других PrintView....
Оказалось как обычно: во всех Faq не верноя информация...
На деле перевести реальный размер бумаги на экран простим методом
GetDeviceCaps - нельзя!
Чтоб размер на экране соответствовал размеру бумаги надо из принтера получить размер размер текущего листа в мм, а затем через Screen.PixelsPerInch перевести в размер на экране.
Интересно, что везде про это умалчивается..
KilkennyCat (2009-03-20 10:49:00) [3]Наверняка "там все верно" не абсолютно для всех принтеров.
Alex_C (2009-03-20 08:46:00) [4]
> Выведи картинку на проектором на экран метра этак три по
> диагонали
Нифига :)
Смотрел тоже самое допустим в FastReport - там как раз все верно. Т.е. что то не так... Но пока не понял что :)
KilkennyCat (2009-03-20 02:31:00) [5]Кроме того, некоторые принтеры, например, большинство лазерных офисников, не умеют печатать без полей.
KilkennyCat (2009-03-20 02:28:00) [6]
> опознается это как тупо померив линейкой,
Выведи картинку на проектором на экран метра этак три по диагонали, а лучше в кинотеатре, и попробуй тупо измерить рулеткой и подумать о физических свойствах пикселей монитора.