Тема: Печать Grid
Показать сообщение отдельно
  #4  
Старый 10.06.2010, 10:42
Аватар для Mad programmer
Mad programmer Mad programmer вне форума
Прохожий
 
Регистрация: 11.05.2010
Сообщения: 23
Репутация: 10
По умолчанию

через Quickreport.
Код:
var
  GridReport: TGridReport;

implementation

{$R *.dfm}


procedure TGridReport.Preview(Grid:TDBGrid);
var
  i, CurrentLeft, CurrentTop : integer;
  BMark:TBookmark;
begin

//  GridRep.Page.Length:=420;
//  GridRep.Page.Width:=297;
//  GridRep.Page.PaperSize:=A3;
//  GridRep.Page.Orientation:=poLandscape;

  GridRep.Dataset:=Grid.DataSource.DataSet;

//Заголовок отчета

//  if not GridRep.Bands.HasDetail then
    GridRep.Bands.HasTitle:=true;

  GridRep.Bands.TitleBand.Height:=150;
      with TQRLabel.Create(GridRep.Bands.TitleBand) do
      begin
        Parent := GridRep.Bands.TitleBand;
        Left := 7;
        Top := 7;
        Color:=$00ADADAD;
        Font.Size:=55;
        Caption:='Заголовок отчета.     ';
      end;


//Этот текст будет отображаться вначале каждой страницы

//  if not GridRep.Bands.HasDetail then
    GridRep.Bands.HasPageHeader:=true;

  GridRep.Bands.PageHeaderBand.Height:=100;
      with TQRLabel.Create(GridRep.Bands.PageHeaderBand) do
      begin
        Parent := GridRep.Bands.PageHeaderBand;
        Left := 7;
        Top := 7;
        Font.Size:=16;
        Caption:='Этот текст будет отображаться вначале каждой страницы...';
      end;


//Этот текст будет отображаться в конце каждой страницы

//  if not GridRep.Bands.HasDetail then
    GridRep.Bands.HasPageFooter:=true;

  GridRep.Bands.PageFooterBand.Height:=100;
      with TQRLabel.Create(GridRep.Bands.PageFooterBand) do
      begin
        Parent := GridRep.Bands.PageFooterBand;
        Left := 7;
        Top := 7;
        Font.Size:=16;
        Caption:='Этот текст будет отображаться в конце каждой страницы...';
      end;


//Этот текст будет отображаться в конце всего отчета, после данных

//  if not GridRep.Bands.HasDetail then
    GridRep.Bands.HasSummary:=true;

  GridRep.Bands.SummaryBand.Height:=500;
      with TQRLabel.Create(GridRep.Bands.SummaryBand) do
      begin
        Parent := GridRep.Bands.SummaryBand;
        Left := 7;
        Top := 15;
        Font.Size:=16;
        Caption:='Этот текст будет отображаться в конце всего отчета..';
      end;

  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;
  CurrentTop := 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;
        CurrentTop := CurrentTop + 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;
        GridRep.Bands.ColumnHeaderBand.Color:=$00959595;
      {Создадим заголовок отчёта при помощи QRLabels}
      with TQRLabel.Create(GridRep.Bands.ColumnHeaderBand) do
      begin
        Parent := GridRep.Bands.ColumnHeaderBand;
        Color := GridRep.Bands.ColumnHeaderBand.Color;
        Left := CurrentLeft+25;
        Top := CurrentTop;
        Caption:=Grid.Columns[i].Title.Caption;
//        Alignment:=Grid.Columns[i].Alignment;
        Alignment:=taCenter;

      end;
      {Создадим тело отчёта при помощи QRDBText}
      with TQRDbText.Create(GridRep.Bands.DetailBand) do
      begin
        Parent := GridRep.Bands.DetailBand;
        Color := GridRep.Bands.DetailBand.Color;
        Left := CurrentLeft;
        Top := CurrentTop;
        Alignment:=taCenter;//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;
Admin: Не забываем про теги!
Ответить с цитированием