Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid--->QuickReport (https://www.delphipraxis.net/37141-stringgrid-quickreport.html)

semo 1. Jan 2005 02:09


StringGrid--->QuickReport
 
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? :gruebel:

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.

semo 1. Jan 2005 12:37

Re: StringGrid--->QuickReport
 
jemand hatte im forum von delphi-source.de den hinweis gegeben dass man die stringgridlinien auch allein mit den qrabel hinbekommt.

weiß wer wie?

semo 6. Jan 2005 20:34

Re: StringGrid--->QuickReport
 
wirklich niemand? :gruebel:

angos 25. Aug 2009 10:29

Re: StringGrid--->QuickReport
 
bei dem QRLabel gibts die Eigenschaft Frame. Die sollte dir helfen

Gruß
angos


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz