Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: Quickreport TQrShape in TQrChildBand kopieren

  Alt 28. Feb 2020, 11:27
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;
  Mit Zitat antworten Zitat