Zitat von
BerndS;1458482
Hier die Anpassung in der QuickRpt.pas:
[CODE:
function TQRCustomBand.AddPrintable(PrintableClass : TQRNewComponentClass) : TQRPrintable;
var
...
begin
...
if Assigned(FParentReport) then
aPrintable.FQRPrinter := FParentReport.QRPrinter;
end;
[/CODE]
Danke für den Tip. Jetzt funktioniert es.
Ich habe festgestellt, dass es nichts mit meinem Vorgehen zu tun hat sondern eher ein QuickReport-Bug ist.
Folgender Code läuft einwandfrei, wenn man ihn im FormCreate ausführt.
Führt man ihn dagegen in OnBeforePrint aus, funtioniert es, wenn man den TQrShape Block auskommentiert. Sobald man auch den TQrShape aktiviert, kommt es wieder zur
Access-Violation
Delphi-Quellcode:
procedure TrptTest2.qrbaAnalysisBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
var
lShape: TQRShape;
lLabel: TQRLabel;
begin
// Funktioniert immer
lLabel := TQRLabel.Create(self);
lLabel.Name := 'QrLabel0001';
lLabel.top := 5;
lLabel.left := 10;
lLabel.Caption := lLabel.Name;
lLabel.Parent := qrbaAnalysis;
// Funktioniert im FormCreate, nicht aber im OnBeforePrint
lShape := TQRShape.Create(self);
lShape.Name := 'QrShape0001';
lShape.top := 5;
lShape.left := 10;
lShape.width := 300;
lShape.Height := 30;
lShape.Parent := qrbaAnalysis;
end;
Dieser Code funktioniert immer, vorausgesetzt man hat in QuickRpt.pas - TQRCustomBand.AddPrintable obige Änderung eingefügt
Delphi-Quellcode:
procedure TrptTest2.qrbaAnalysisBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
var
lShape: TQRShape;
lLabel: TQRLabel;
begin
// Funktioniert immer
lLabel := TQRLabel(qrbaAnalysis.AddPrintable(TQRLabel));
lLabel.Name := 'QrLabel0001';
lLabel.top := 5;
lLabel.left := 10;
lLabel.Caption := lLabel.Name;
lLabel.Parent := qrbaAnalysis;
// Funktioniert auch immer
lShape := TQRShape(qrbaAnalysis.AddPrintable(TQRShape));
lShape.Name := 'QrShape0001';
lShape.top := 5;
lShape.left := 10;
lShape.width := 300;
lShape.Height := 30;
end;