Thema: Delphi Stringgrid drucken

Einzelnen Beitrag anzeigen

Benutzerbild von semo
semo

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

Re: Stringgrid drucken

  Alt 4. Jan 2005, 20:29
hat jemand zufällig ne gescheite anleitung zum darstellen eines stringgrids per quickreport?

hier mal mein code.....:

Code:
procedure TMainForm.TBtnDruckClick(Sender: TObject);
var
  QRForm1: TQRForm1;
begin
  //griddruck(stringgridKlienten,0,0,1);
  WriteToLogFile('START: MainForm - GridDruck');
  QrForm1 := nil;
  try
    Windowstate := wsMinimized;
    QrForm1:= TQrform1.Create(Self);
    QRForm1.initialise(StringGridKlienten);
    QrForm1.QuickRep1.Preview;
  finally
    Windowstate := wsNormal;
    QrForm1.Free;
  end;
  WriteToLogFile('ENDE: MainForm - GridDruck');
end;

Code:
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];
    aQrShape.DoubleBuffered := true;

    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;
    aQrShape.DoubleBuffered := true;
    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;
  Mit Zitat antworten Zitat