Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Построение сетки из изображений и TPrinter


Автор: ЧеловекБорща 24.6.2013, 00:15
Доброго времени суток!

Пользователь создает форму для данных и на ней указывает текстовыми метками какие даные куда вставлять.
В роли формы выступает BMP, JPEG, PNG изображение любого размера.
Перед печатью данные из очереди на печать, гуськом проецируются на указанную форму печати.
Теперь имеем дело только с готовыми BMP файлами. 

Далее юзер выбирает шаблон печати, т.е. заранее заданные параметры печати:
Тип/формат бумаги, принтер, ну и конечно же кол-во изображений на лист. 

Например сетка картинок 2x4(2 колонки 4 строки) на 1 лист A4.

Собственно проблема:
Как рисовать изображения сеткой?
 

вот 2 варианта рисования сетки:
Первый:
Код

  var
  iVertLine, i, iHorLine, iCols, iRows, iColsRows: integer;
  z: integer;
begin
  Img.Canvas.Pen.Color := clWhite;
  Img.Canvas.FillRect(Img.BoundsRect);
  z := 25; // Площадь?
  iRows := 4;
  iCols := 4;
  iColsRows := 2;
  Img.Canvas.Pen.Width := 1;
  Img.Canvas.Pen.Color := clBlack;

  for i := 0 to iColsRows do
  begin
    Img.Canvas.MoveTo(0, i * z);
    Img.Canvas.LineTo(iColsRows * z, i * z);
    Img.Canvas.MoveTo(i * z, 0);
    Img.Canvas.LineTo(i * z, iColsRows * z);
  end;


Вместе рисуются и вертикальные и горизонтальные линии, думаю как бы в эту клетку изображение вставить, вот только как?

При таком алгоритме рисование сетки 4x6 невозможно..

А вот так можно рисовать хоть 2x400:
Код

var
  iVertLine, i, iHorLine, iCols, iRows, iColsRows: integer;
  z: integer;
begin
  Img.Canvas.Pen.Color := clWhite;
  Img.Canvas.FillRect(Img.BoundsRect);
  z := 25; // Площадь?
  iRows := 4;
  iCols := 4;
  iColsRows := 2;
  Img.Canvas.Pen.Width := 1;
  Img.Canvas.Pen.Color := clBlack;

    for iHorLine := 0 to iRows do
    begin
    Img.Canvas.MoveTo(0, iHorLine * z);
    Img.Canvas.LineTo(iCols * z, iHorLine * z);
    end;

    // вертикальные
    for iVertLine := 0 to iCols do
    begin
    Img.Canvas.MoveTo(iVertLine * z, 0);
    Img.Canvas.LineTo(iVertLine * z, iRows * z);
    end;


Но я понятия не имею как тут изображение и каким боком вставить....

Может есть способ проще?

В итоге временный TBitmap налезает на Canvas принтера и уходит в печать.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)