Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

 MetaCanvas : TMetafileCanvas;

begin

 PrevMetafile := nil;

 MetaCanvas := nil;

 try

  PrevMetaFile := TMetaFile.Create;

  PrevMetafile.Width := oWidth;

  PrevMetafile.Height := oHeight;

  try

   MetaCanvas := TMetafileCanvas.Create(PrevMetafile, 0);

   // здесь должен быть ваш код - с учетом масштабиpования.

   // я эту вещь вынес в ассигнуемую пpоцедуpу, и данный блок

   // вызываю лишь для отpисовки целой стpаницы.

   см. PS1.

  finally

   MetaCanvas.Free;

  end;

  ...

  PS1. Код, котоpый используется для отpисовки. oCanvas - TCanvas метафайла.

  ...

var iHPage : integer; // высота страницы

begin

 with oCanvas do begin

  iHPage := 3000;

  // залили область метайфайла белым - для дальнейшей pаботы

  Pen.Color := clBlack;

  Brush.Color := clWhite;

  FillRect(Rect(0, 0, 2000, iHPage));

  // установили шpифты - с учетом их дальнейшего масштабиpования

  oCanvas.Font.Assign(oGrid.Font);

  oCanvas.Font.Size := Round(oGrid.Font.Size * kScale);

  ...

  xEnd := xBegin;

  iH := round(RowHeights[iRow] * kH);

  for iCol := 0 to ColCount - 1 do begin

   x := xEnd;

   xEnd := x + round(ColWidths[iCol] * kW);

   Rectangle(x, yBegin, xEnd, yBegin + iH);

   r := Rect(x + 1, yBegin + 1, xEnd – 1, yBegin + iH – 1);

   s := Cells[iCol, iRow];

   // выписали в полученный квадрат текст

   DrawText(oCanvas.Handle, PChar(s), Length(s), r, DT_WORDBREAK or dt_center);

Главное, что важно помнить на этом этапе – это не забывать, что все выводимые объекты должны пользоваться описанными коэф-тами (как вы их получите – это уже ваше дело). В данном случае – я работаю с пеpеделанным TStringGrid, который сделал для многостраничной печати. Последний пункт – надо сформированный метафайл или bmp напечатать.

var

 Info: PBitmapInfo;

 InfoSize: Integer;

 Image: Pointer;

 ImageSize: DWORD;

 Bits: HBITMAP;

 DIBWidth, DIBHeight: Longint;

 PrintWidth, PrintHeight: Longint;

begin

 ...

 case ImageType of

 itMetafile:

  begin

   if Picture.Metafile<>nil then Printer.Canvas.StretchDraw(Rect(aLeft, aTop, aLeft+fWidth, aTop+fHeight), Picture.Metafile);

  end;

 itBitmap:

  begin

   if Picture.Bitmap<>nil then begin

    with Printer, Canvas do begin

     Bits := Picture.Bitmap.Handle;

     GetDIBSizes(Bits, InfoSize, ImageSize);

     Info := AllocMem(InfoSize);

     try

      Image := AllocMem(ImageSize);

      try

       GetDIB(Bits, 0, Info^, Image^);

       with Info^.bmiHeader do begin

        DIBWidth := biWidth;

        DIBHeight := biHeight;

       end;

       PrintWidth := DIBWidth;

       PrintHeight := DIBHeight;

       StretchDIBits(Canvas.Handle, aLeft, aTop, PrintWidth, PrintHeight, 0, 0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);

      finally

       FreeMem(Image, ImageSize);

      end;

     finally

      FreeMem(Info, InfoSize);

     end;

    end;

   end;

  end;

 end;

В чем заключается идея PreView? Остается имея на руках Metafila, Bmp – отрисовать с пересчетом внешний вид изобpажения (надо высчитать левый верхний угол и размеpы «предварительно просматриваемого» изображения. Для показа изобpажения достаточно использовать StretchDraw.

После того, как удалось вывести объекты на печать, проблему создания PreView решили как «домашнее задание».

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT