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;