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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.019 c
3-1220351355
Konrads
2008-09-02 14:29
2009.05.03
Самый быстрый запрос


15-1236147118
Dennis I. Komarov
2009-03-04 09:11
2009.05.03
из avi -> vaw(mp3,...)


2-1237261817
Drowsy
2009-03-17 06:50
2009.05.03
Update Failed


2-1237419179
Новичок
2009-03-19 02:32
2009.05.03
Программное добавление полей в ADOTable1


2-1237890003
Дмитрий Белькевич
2009-03-24 13:20
2009.05.03
В каком контексте выполняется TTread.Create?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский