Einzelnen Beitrag anzeigen

wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
122 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Tabelle und Abfragen drucken

  Alt 15. Jul 2011, 17:47
Hallo Falco953,

durch Zufall habe ich vor einiger Zeit unter http://www.delphi3000.com/articles/article_2398.asp?SK= ein ausgezeichnetes Snippet
(D3 oder höher & QRep.3.0 oder > ?) gefunden. Autor ist R.R.Aguilo.

Es waren einige Fehler drin, die ich verbessert habe.
Sind gekennzeichnet.

Ich habe dafür ein Programm geschrieben. (D7-QR3-BDE-Paradox)

Wenn Du interesse hast schicke ich es Dir oder stelle es in D.-Praxis !


Das Schöne daran ist, dass Du mit EINEM ! Report-Formular beliebige
Ergebnisse aus beliebigen Tables (mit SQL und dargestellt im DBGrid)
mit QRPrewiew anzeigen und ausdrucken kannst.

Vielleicht hilft es Dir weiter ?

Wendelin

************************************************** *******************

Orginal von R.R.Aquilo -->

First make a new form, name it as TGridReport and drop a TQuickRep on it.
Rename you QuickRep to GridRep. Then make a Preview that receives a DBGrid as parameter, just like this:



Delphi-Quellcode:
procedure TGridReport.Preview(Grid: TDBGrid);
var
  i, CurrentLeft, CurrentTop : 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;
  CurrentTop := 6;

  {Record where the user stopped in the DBGrid} 
  BMark:=Grid.DataSource.DataSet.GetBookmark;
  {Don't let the grid flicker while the report is running} 
  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;
      {Create Header with QRLabels} 
      with TQRLabel.Create(GridRep.Bands.ColumnHeaderBand) do
      begin
        Parent := GridRep.Bands.ColumnHeaderBand;
        Color := GridRep.Bands.ColumnHeaderBand.Color;
        Left := CurrentLeft;
        Top := CurrentTop;
        Caption:=Grid.Columns[i].Title.Caption;
      end;
      {Create Detail with QRDBText} 
      with TQRDbText.Create(GridRep.Bands.DetailBand) do
      begin
        Parent := GridRep.Bands.DetailBand;
        Color := GridRep.Bands.DetailBand.Color;
        Left := CurrentLeft;
        Top := CurrentTop;
        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;

    {After all, call the QuickRep preview method} 
    GridRep.PreviewModal; {or Preview if you prefer} 

  finally
    with Grid.DataSource.DataSet do
    begin
      GotoBookmark(BMark);
      FreeBookmark(BMark);
      EnableControls;
    end;
  end;
end;
Wolfgang

Geändert von mkinzler (15. Jul 2011 um 17:49 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat