Печать содержимого DBGrid через QuickReport

Автор: Rafael Ribas Aguilу
Частенько у пользователя возникает необходимость распечатать отчёт из базы данных. Естественно, что он начинает просить Вас добавить такую возможность в приложение. Как оказалось, при помощи TQuickRep данную задачу можно очень легко решить.
Итак, приступим. Для начала создайте новую форму, назвав её TGridReport, и поместите на неё TQuickRep. Переименуйте QuickRep в GridRep. Затем сделайте следующию процедуру, которая получает в качестве параметра DBGrid:

procedure TGridReport.Preview(Grid: TDBGrid);

var

 i, CurrentLeft, Current : integer;

 BMark: TBookmark;

begin

 GridRep.Dataset:=Grid.DataSource.DataSet;

 if not GridRep.Bands.HasColumnHeader then

  GridRep.Bands.HasColumnHeader:=true;

 if not GridRep.Bands.HasDetail then

  GridRep.Bands.HasDetail:=true;

 GridRep.Bands.ColumnHeaderBand.Height:=Abs(Grid.TitleFont.Height) + 10;

 GridRep.Bands.DetailBand.Height:=Abs(Grid.Font.Height) + 10;

 CurrentLeft := 12;

 Current := 6;

 {Запись, на которой пользователь останавливается в DBGrid}

 BMark:=Grid.DataSource.DataSet.GetBookmark;

 {Запретим мерцание грида в процессе работы отчёта}

 Grid.DataSource.DataSet.DisableControls;

 try

  for i:=0 to Grid.FieldCount - 1 do

  begin

  if (CurrentLeft + Canvas.TextWidth(Grid.Columns[i].Title.Caption)) >

  (GridRep.Bands.ColumnHeaderBand.Width) then

  begin

  CurrentLeft := 12;

  Current := Current + Canvas.TextHeight('A') + 6;

  GridRep.Bands.ColumnHeaderBand.Height := GridRep.Bands.ColumnHeaderBand.Height +

  (Canvas.TextHeight('A') + 10);

  GridRep.Bands.DetailBand.Height := GridRep.Bands.DetailBand.Height +

  (Canvas.TextHeight('A') + 10);

  end;

  {Создадим заголовок отчёта при помощи QRLabels}

  with TQRLabel.Create(GridRep.Bands.ColumnHeaderBand) do

  begin

  Parent := GridRep.Bands.ColumnHeaderBand;

  Color := GridRep.Bands.ColumnHeaderBand.Color;

  Left := CurrentLeft;

   := Current;

  Caption:=Grid.Columns[i].Title.Caption;

  end;

  {Создадим тело отчёта при помощи QRDBText}

  with TQRDbText.Create(GridRep.Bands.DetailBand) do

  begin

  Parent := GridRep.Bands.DetailBand;

  Color := GridRep.Bands.DetailBand.Color;

  Left := CurrentLeft;

   := Current;

  Alignment:=Grid.Columns[i].Alignment;

  AutoSize:=false;

  AutoStretch:=true;

  Width:=Grid.Columns[i].Width;

  Dataset:=GridRep.Dataset;

  DataField:=Grid.Fields[i].FieldName;

  CurrentLeft:=CurrentLeft + (Grid.Columns[i].Width) + 15;

  end;

  end;

  lblPage.Left := bdTitle.Width - lblPage.Width - 10;

  lblDate.Left := bdTitle.Width - lblDate.Width - 10;

  {Далее вызовем метод предварительного просмотра из QuickRep}

  GridRep.PreviewModal; {либо, если желаете, то PreviewModal}

 finally

  with Grid.DataSource.DataSet do

  begin

  GotoBookmark(BMark);

  FreeBookmark(BMark);

  EnableControls;

  end;

 end;

end;

Взято из http://forum.sources.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...