Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 4893470220568296.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 1238
Просмотры материалов : 4487846
 
Корректная печать содержимого экрана в Borland C++ Builder (22.12.2014). Печать E-mail
2014 - Декабрь
22.12.2014 21:22
Save & Share

Столкнулся с частой проблемой языка Borland C++ Builder v.6.0, выражаемую в мелкой печати каких-либо графических объектов. Например, распечатка GroupBox делается обычным методом PaintTo; однако изображение на листе получается в 10-20 раз меньше, чем на экране.

Связано это с особенностью взаимосвязи разрешения принтера с разрешением экрана. Разрешение экрана статично и равно 96dpi, в то время как разрешение принтера может меняться. Builder старый язык, шло время - разрешения принтеров становились все больше и больше, а напечатанные изображения - все меньше и меньше.

В интернете решение данной проблемы присутствует всего в одном экземпляре, потому что остальные программисты просто забивали и сдавались. Но и единственный экземпляр решения не такой понятный и приличный по объему (так и не смог заставить его работать).

Мне повезло: удалось написать код, корректно растягивающий графические объекты на весь лист формата A4. При этом теряется качество, однако преобразование разрешения исходного объекта - это уже другая задача. Традиционно выкладываю код в полезных исходниках для программистов.

TRect r(0, 0, Prntr->PageWidth - 20, Prntr->PageHeight - 20); //Область печати, в которую будет помещен объект, с учетом полей печати принтера.

if (iMode == 1) Chart_Graphs->PrintPartial(r); //Особенная функция TChart, позволяющая печатать график на весь лист.

if (iMode == 2)
{
    Graphics::TBitmap *bmBMP = new Graphics::TBitmap(); //Объект растрового рисунка.
    bmBMP->Width = GroupBox_Information_Words->Width;
    bmBMP->Height = GroupBox_Information_Words->Height;


    GroupBox_Information_Words->PaintTo(bmBMP->Canvas, 0, 0); //В растровом рисунке находится объект печати.
    Prntr->Canvas->StretchDraw(r, bmBMP); //Растянуть по области печати принтера растровый рисунок.
}

 
 

Последние новости


©2008-2019. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).