Einzelnen Beitrag anzeigen

Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#1

StringGrid--->QuickReport

  Alt 1. Jan 2005, 03:09
ich habe mir mal ne kleine methode zusammengebastelt (anhand der quickreportdemo von delphi 7) mit der ich ein stringgrid in einer druckvorschau anzeigen lassen kann.

die ausgabe auf dem bildschirm sieht auch wunderbar aus bei mir,
nur das druckergebnis lässt ein wenig zu wünschen übrig:
die ersten 3 zellenköpfe fehlen und ab der 8. spalte sind die spaltenköpfe verwischt.

liegt das an meinen drucker? (wohl kaum)
oder ist es einfach nur zu früh und ich gehöre ins bett?

hat jemand vielleicht einen besseren vorschlag wie man ein stringgrid in einer druckvorschau anzeigen kann?

Code:
unit QR1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, QuickRpt, QRCtrls, Grids, QRPrntr;

type
  TQrForm1 = class(TForm)
    QuickRep1: TQuickRep;
    DetailBand1: TQRBand;
    procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
  private
    { Private-Deklarationen }
    zuDruckendesGrid: TStringGrid;
    iZeileNr: Integer;
  public
    { Public-Deklarationen }
    procedure initialise(aGrid: TStringGrid);
  end;

var
  QrForm1: TQrForm1;

implementation

{$R *.dfm}

uses Konstanten;


procedure TQrForm1.initialise(aGrid: TStringGrid);
var
  i, pos: Integer;
  aQrLabel: TQrLabel;
  aQrShape: TQrShape;
begin
  zuDruckendesGrid := aGrid;
  pos := 0;
  for i:=0 to zuDruckendesGrid.ColCount-1 do
  begin
    aQrShape        := TQrShape.Create(DetailBand1);
    aQrShape.Name   := 'QrShape' + IntToStr(i);
    aQrShape.Parent := DetailBand1;
    aQrShape.Width  := zuDruckendesGrid.ColWidths[i];
    aQrShape.Left   := pos;
    aQrShape.Height := zuDruckendesGrid.RowHeights[i];

    aQrLabel        := TQrLabel.Create(DetailBand1);
    aQrLabel.Name   := 'QrLabel' + IntToStr(i);
    aQRLabel.Parent := DetailBand1;
    aQRLabel.Top    := aQrShape.Top+2;
    aQRLabel.Width  := aQrShape.Width-2;
    aQRLabel.Height := aQrShape.Height-5;
    aQRLabel.Left   := pos+2;
    //aQrLabel.Transparent := true;

    pos             := pos + aQRLabel.Width;
  end;
  DetailBand1.Height := aQrShape.Height;
end;


// diese Methode wird immer aufgerufen wenn die nächste Zeile gedruckt werden soll
// Aufruf dieser Methode erfolgt durch QrForm1.QuickRep1.Preview;
// es werden alle Cols/ Spalten durchgegangen von links nach rechts und dabei
// werden alle zugehörigen Zeilen dieser Spalte gedruckt
procedure TQrForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
var
  i: Integer;
begin
  MoreData := iZeileNr < zuDruckendesGrid.RowCount;
  if MoreData then
  begin
    for i:=0 to zuDruckendesGrid.ColCount-1 do
    begin
      try
        if iZeileNr=0 then
        begin
          TQrShape(DetailBand1.FindComponent('QrShape' + IntToStr(i))).Brush.Color := clBtnFace;
          TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Color := clBtnFace;
          //TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Font.Style := [fsBold];
          //TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Alignment := taCenter;
          //TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).
        end else
        begin
          TQrShape(DetailBand1.FindComponent('QrShape' + IntToStr(i))).Brush.Color := clWhite;
          TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Color := clWhite;
          TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Font.Style := [];
        end;

        TQRLabel(DetailBand1.FindComponent('QrLabel' + IntToStr(i))).Caption := zuDruckendesGrid.Cols[i][iZeileNr];

      except
        WriteToLogFile( 'Komponente ' + 'QrLabel' + IntToStr(i) + ' konnte '+
                        'nicht gefunden werden. Reporterstellung wurde abgebrochen.');
      end;
    end;
  end;
  Inc(iZeileNr);
end;


procedure TQrForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  iZeileNr := 0;
end;

end.
  Mit Zitat antworten Zitat